有的时候并不希望将某些频率分量衰减到0,而是希望将它们进行一定程度的衰减,比如衰减XX分贝,这时只需将FFT后的该频率分量的实部和虚部同时按比例衰减即能保证相位不变。
FFT滤波方便之处在于可以任意设定滤波器的幅频响应并保持相位不变,下面是用FFT实现任意幅频响应的C程序,
void FFTArbitrayFiltering(double * xr, double * xi, long FFTSize, double * Gain)
{
long i,k;
k=FFTSize/2;
Nto2NFFT(xr,xi,FFTSize,0);
xr[0]*=pow(10.0,Gain[0]/20);
xi[0]*=pow(10.0,Gain[0]/20);
for(i=1;i<k;i++)
{
xr[i]*=pow(10.0,Gain[i]/20);xr[FFTSize-i]*=pow(10.0,Gain[i]/20);
xi[i]*=pow(10.0,Gain[i]/20);xi[FFTSize-i]*=pow(10.0,Gain[i]/20);
}
xr[k]*=pow(10.0,Gain[k]/20);
xi[k]*=pow(10.0,Gain[k]/20);
FFT(xr,xi,FFTSize,1);
}
|