mafan88的个人空间 https://blog.eetop.cn/162539 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

运用FFT进行简单滤波

已有 235 次阅读| 2011-12-15 18:26 |个人分类:数字信号处理

说明:以下资源来源于《数字信号处理的MATLAB实现》万永革主编

问题的提出:能否通过将频率域中的某些频率成分幅值置零然后运用IFFT变换到时间域而达到滤波的效果呢?
例:x=0.5*sin(2*pi*f1*t)+cos(2*pi*f2*t); f1=3,f2=10,数据点数为512,进行滤波,将频率为8~15Hz的波滤掉。采样间隔T=0.02.

dt=0.02;N=512;
n=0:N-1; t=n*T; f=n/(N*dt);   %时间序列及频率序列
f1=3; f2=10;   %信号的频率成分
x=.5*sin(2*pi*f1*t)+cos(2*pi*f2*t);
subplot(2,2,1), plot(t,x);    %绘制原来的信号
title('原始信号的时间域');xlabel('时间/s');
y=fft(x);      %对原信号作FFT变换
subplot(2,2,2), plot(f, abs(y)*2/N)   %绘制原信号的振幅谱
xlabel('频率/Hz'), ylabel('振幅')
xlim([0 50]);title('原始振幅谱')
f1=8;f2=15;    %要滤去频率的上限和下限
yy=zeros(1,length(y)); %设置与y相同元素的数组
for m=0:N-1   %将频率落在该频率范围及其大于Nyquist频率的波滤去
if(m/(N*dt)>f1&m/(N*dt)<f2)...   %小于Nyquist频率的滤波范围
|(m/(N*dt)>(1/dt-f2)&m/(N*dt)<(1/dt-f1)) %大于Nyquist频率的滤波范围
%1/dt为一个频率周期
yy(m+1)=0.;       %置在此频率范围内的振动振幅为零
else
yy(m+1)=y(m+1);     %其余频率范围的振动振幅不变
end
end
subplot(2,2,4),plot(f,abs(yy)*2/N)    %绘制滤波后的振幅谱
xlim([0 50]);xlabel('频率/Hz');ylabel('振幅')
gstext=sprintf('自 %4.1f -%4.1f Hz 的频率被滤除',f1,f2); %将滤波范围显示作为标题
title(gstext)
subplot(2,2,3),plot(t,real(ifft(yy)))   %绘制滤波后的数据运用ifft变换回时间域并绘图。
title('通过IFFT回到时间域');
xlabel('时间/s');



这是最彻底最干净的滤波,这种滤波的缺点是由于使用FFT,相比于后面所讲的滤波技术,这种技术运算相对较慢。

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 6

    粉丝
  • 0

    好友
  • 15

    获赞
  • 6

    评论
  • 105786

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-23 17:40 , Processed in 0.028740 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部