相关疑难解决方法(0)

DSP - 通过FFT在频域中进行滤波

我一直在使用FFT的Exocortex实现,但我遇到了一些问题.

每当我在调用iFFT之前修改频率区间的幅度时,结果信号包含一些咔嗒声和砰砰声,特别是当信号中存在低频时(如鼓或低音).但是,如果我用相同的因子衰减所有的箱子,就不会发生这种情况.

让我举一个4样本FFT输出缓冲区的例子:

// Bin 0 (DC)
FFTOut[0] = 0.0000610351563
FFTOut[1] = 0.0

// Bin 1
FFTOut[2] = 0.000331878662
FFTOut[3] = 0.000629425049

// Bin 2
FFTOut[4] = -0.0000381469727
FFTOut[5] =  0.0

// Bin 3, this is the first and only negative frequency bin.
FFTOut[6] =  0.000331878662
FFTOut[7] = -0.000629425049
Run Code Online (Sandbox Code Playgroud)

输出由成对的浮点组成,每个浮点数代表单个bin的实部和虚部.因此,bin 0(数组索引0,1)将代表DC频率的实部和虚部.正如你所看到的,第1和第3个箱子都有相同的值(除了Im部分的符号),所以我猜bin 3是第一个负频率,最后索引(4,5)将是最后的正值频率仓.

然后,为了衰减频率仓1,这就是我所做的:

// Attenuate the 'positive' bin
FFTOut[2] *= 0.5;
FFTOut[3] *= 0.5;

// Attenuate its corresponding negative bin.
FFTOut[6] *= 0.5;
FFTOut[7] *= 0.5;
Run Code Online (Sandbox Code Playgroud)

对于实际测试,我使用1024长度的FFT,我总是提供所有样本,因此不需要0填充.

// Attenuate
var …
Run Code Online (Sandbox Code Playgroud)

filtering signal-processing fft dft

20
推荐指数
2
解决办法
2万
查看次数

标签 统计

dft ×1

fft ×1

filtering ×1

signal-processing ×1