声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 18702|回复: 32

[滤波] FFT滤波的物理意义

[复制链接]
发表于 2007-7-15 14:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
在matlab版区我回复过别人一个关于fft和ifft滤波的问题,下边是我的程序
clear;
w=100*pi;
t=0:0.0001:0.04;
y=sin(w*t)+sin(2*w*t)+sin(3*w*t);%定义原始信号
F=fft(y);
F(find(F>5))=0;%滤除高频分量
y1=ifft(F);
figure
subplot(121),plot(t,y);title('原信号')
subplot(122),plot(t,y1);title('滤波后')
原信号包含100HZ和150HZ的谐波,滤除后只有50HZ的正弦波。后来他们问F(find(F>5))=0的物理含义的时候我也范迷糊了,因为当时写的时候没考虑太多,而且确实也可以滤除。。所以请教一下高人,程序的结果只是巧合么?如果是,那么正确的应该怎么写?如果不是物理意义怎么解释?
回复
分享到:

使用道具 举报

发表于 2007-7-15 14:58 | 显示全部楼层

回复 #1 花如月 的帖子

确实如此,find(F>5)相对于find(real(F)>5).如果楼主构造信号时增加一个相位,滤波以后就不是这个结果了,呵呵.
 楼主| 发表于 2007-7-15 15:31 | 显示全部楼层

回复 #2 w89986581 的帖子

也就是说完全是巧合了,real(F)>5没有任何意义么?
给个带相位滤波的正确例子吧,也好让初学者有个参考
可不能误导了版友:@L ,我让他们关注这个帖子了。
能滤除高频的分量就行,谢谢了!
发表于 2007-7-15 15:35 | 显示全部楼层

回复 #2 w89986581 的帖子

我也觉得是real(F)>5,图形几乎和不加这句没什么差别
发表于 2007-7-15 15:47 | 显示全部楼层

回复 #3 花如月 的帖子

clear;
w=100*pi;
t=0:0.0001:0.04;
y=sin(w*t)+sin(2*w*t)+sin(3*w*t);%定义原始信号
F=fft(y);
F(4:end-3) = 0;%滤除高频分量
y1=real(ifft(F));
figure
subplot(121),plot(t,y);title('原信号')
subplot(122),plot(t,y1);title('滤波后')

但是不建议直接从频域上直接滤波,这样信号畸变很大.对于你这个问题,采样率高,虑除频率低,直接设计低通滤波器需要的阶数高.因此建议先降采样,再进行低通滤波,前提时信号采集长度足够长.所以,在信号采集时,关心的频率越低,采集时时间应该越长.

[ 本帖最后由 zhlong 于 2007-7-15 19:40 编辑 ]

点评

赞成: 5.0
赞成: 5
  发表于 2017-6-11 11:14

评分

1

查看全部评分

 楼主| 发表于 2007-7-15 15:49 | 显示全部楼层

回复 #4 zhangnan3509 的帖子

real(F)>5和F>5结果是一样的,主要是程序这样滤波好像是完全巧合。没有任何物理意义。高手们给一个正确的程序吧,还是那个信号(加上不同的相位差),要滤掉100和150HZ的
发表于 2007-7-15 15:50 | 显示全部楼层

回复 #4 zhangnan3509 的帖子

呵呵find(F>5)就等于find(real(5)),替换以后当然没有变化拉,哈哈.如果构造信号时,认为增加相位,find(F>5)返回的值就不同拉,因此不能实现指定频带滤波的设计任务.
 楼主| 发表于 2007-7-15 15:54 | 显示全部楼层

回复 #5 w89986581 的帖子

谢谢你的意见,F(6:end-5) = 0;%滤除高频分量。这句的物理意义可否解释一下呢。不好意思,基础理论相当欠缺:@L
发表于 2007-7-15 16:00 | 显示全部楼层
楼主的设置是一种巧合。通过以下程序看一下楼主提供的程序在频率维上的情况:
w=100*pi;
t=0:0.0001:0.04;
y=sin(w*t)+sin(2*w*t)+sin(3*w*t);%定义原始信号
F=fft(y);
subplot(221); stem(real(F));title('F实部');
axis([0 20 0 10]);
subplot(222); stem(imag(F));title('F虚部');
axis([0 20 -200 10]);
F1=F;
F1(find(F1>5))=0;%滤除高频分量
y1=ifft(F1);
fs=10000;
N=length(t);
n2=1:N/2;
ff=fs*(n2-1)/N;
subplot(223),stem(ff,abs(F(n2)));title('原信号频谱');
axis([0 500 0 220]);
subplot(224),stem(ff,abs(F1(n2)));title('滤波后频谱')
axis([0 500 0 220]);
图如下,可看到50是笫3根谱线,100是笫5根谱线,150是笫7根谱线。在F的实部中50对应为3,100和150对应的都大于5。所以在F(find(F>5))=0中把100和150处的值都设为0。若要从频率维上滤波,可有
w=100*pi;
t=0:0.0001:0.04;
y=sin(w*t)+sin(2*w*t)+sin(3*w*t);%定义原始信号
F=fft(y);
F1=[F(1:3) zeros(1,length(t)-5) F(end-1:end)];
y1=ifft(F1);
subplot(121),plot(t,y);title('原信号')
subplot(122),plot(t,y1);title('滤波后')

[ 本帖最后由 songzy41 于 2007-7-15 16:02 编辑 ]
hua2a.jpg

评分

1

查看全部评分

 楼主| 发表于 2007-7-15 16:01 | 显示全部楼层

回复 #5 w89986581 的帖子

刚试了你的程序,没有滤波效果呀。
2个图是一样的
发表于 2007-7-15 16:05 | 显示全部楼层
原帖由 w89986581 于 2007-7-15 15:47 发表
clear;
w=100*pi;
t=0:0.0001:0.04;
y=sin(w*t)+sin(2*w*t)+sin(3*w*t);%定义原始信号
F=fft(y);
F(6:end-5) = 0;%滤除高频分量
y1=real(ifft(F));
figure
subplot(121),plot(t,y);title('原信号')
su ...

应该为
F(4:end-3) = 0;
发表于 2007-7-15 16:06 | 显示全部楼层

回复 #10 花如月 的帖子

F(4:end-2) = 0;%滤除高频分量
fft变换以后得到的就是频率域谱,你把不想要的频率都设为零,因此可以实现频率滤波.但是这种滤波器硬件实现起来很痛苦.

[ 本帖最后由 w89986581 于 2007-7-15 16:13 编辑 ]
 楼主| 发表于 2007-7-15 16:14 | 显示全部楼层
谢谢songzy41 w89986581的大力帮忙,我回头再消化一下 :@L
对于“F(4:end-3) = 0;%滤除高频分量”这句的原理还是不太明白
发表于 2007-7-15 16:16 | 显示全部楼层

回复 #11 songzy41 的帖子

呵呵,是的.老婆的计算机上不让我安装matlab:@(
发表于 2007-7-15 17:00 | 显示全部楼层

回复 #13 花如月 的帖子

从第四根谱线到倒数第四根谱线,值都设为0,也就是频率滤波
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-19 03:29 , Processed in 0.068358 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表