频域和时域滤波

信息处理 fft 离散信号 过滤
2022-02-17 07:23:11

我正在尝试过滤正弦曲线(),我需要去除所有高于 10 Hz 的频率,接受的过渡区域为 2 Hz(阻带频率 = 12 Hz) fsample=50Hz

问题是为什么在过滤这个信号后,20 Hz 仍然出现在 FFT 中?有什么不对 ?我知道频域和时域滤波的结果应该相同,但乘法中的第一个和卷积中的第二个。

这是代码:

 t=[0:1/50:1];  
 y=cos(2*pi*20*t)+0.5*sin(2*pi*5*t);  
 fsamp=50;      
 frange=[10 12];    
 mag=[1 0];  
 devs=[0.02 0.02];  
 frange=[10 12];  
 [n,fo,ao,w] = firpmord(frange,mag,devs,fsamp);  
 n = n + rem(n,2);  
 b=firpm(n,fo,ao,w,'hilbert');  
 %%% filter in time domain
 final1=filter(b,1,y);  
 finalfft=abs(fft(final1));
 t=[0:1/50:(length(finalfft)-1)/50];  
 f=[(t/t(end))*50];  
 figure(1);plot(f,abs(fft(y)));   
 figure(2);plot(f,finalfft);    

 %%% filter in freq domain 
 paddedfft=fft(y);  
 bfft=fft(b,length(y));  
 finalfft=paddedfft.*bfft;  
 final1=ifft(finalfft);  
 t=[0:1/50:(length(finalfft)-1)/50];  
 f=[(t/t(end))*50];  
 t=[0:1/50:(length(final1)-1)/50];  
 figure(3);plot(f,abs(fft(final1))); 

输入信号 信号 fft
滤波后信号的 fft ,, 在时域中滤波 滤波后信号的 fft ,, 在频域中滤波

2个回答

前段时间我写了一些代码只是为了测试一些滤波器方法,我可以看到如何使某些频率完全消失,有些方法会导致信号中的纹波效应,当你对滤波后的信号应用 FFT 以查看频率响应时,你注意到你想要消除的频率仍然存在,衰减了,但你仍然可以看到!

让我们开始吧,以 250 赫兹、400 赫兹和 900 赫兹在 8000 赫兹采样的三 (3) 个正弦波串联,我将尝试从原始信号中消除 900 赫兹!

我的第一个测试,AKA 一个非常简单的频域均衡器,计算 dB 衰减10.^(dB/20)并乘以要消除的 FFT bin,对于 dB 衰减 -24dB,我的结果是:

在此处输入图像描述

Robert Bristow-Johnson(时域)的我的第二次测试EQ 双二阶滤波器,对于 dB 衰减 -24dB,我的结果是:

在此处输入图像描述

Robert Bristow-Johnson(时域)的我的第三次测试双二阶 LPF ,我的结果是:

在此处输入图像描述

而我最后一次使用Sinc Filter (Frequency Domain)的测试,我的结果是:

在此处输入图像描述

简而言之,一切都取决于您真正需要什么!

您的通带纹波值非常错误。它只是0.3dB(=0.02),这是对过滤器的非常严格的要求。如果您使用类似3dB. 您还可以进一步降低阻带衰减6dB(现在位于34dB)。通带纹波为 3dB,阻带衰减为 40dB,滤波器将设计为:

fsamp=50;      
frange=[10 12];    
mag=[1 0];  
devs=[0.170997357 0.01];  
frange=[10 12];  
[n,fo,ao,w] = firpmord(frange,mag,devs,fsamp);  
n = n + rem(n,2);  
b=firpm(n,fo,ao,w,'hilbert');  <br>

注意“devs”值的变化。过滤器现在可以正常工作了。