声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3556|回复: 15

[FFT] 求教关于一个离散信号的滤波问题

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

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

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

x
求教关于一个离散信号的滤波问题。

离散信号数据保存在 data.txt文件中
数据的采样频率为50kHz

期望实现的滤波要求:
只保留信号中50Hz的部分,滤除所有其他频段信号,包括直流信号
输出50Hz信号的波形和幅值

编制的matlab程序如下:

clc;
clear;
load data.txt;
Ts = 2e-005; % 采样时间间隔
N = 0.02/Ts; % 取一个周期的采样点数
x = data(1:N,1);
y = data(1:N,2);

t = fft(y); % FFT运算
t(2:end-1) = 0; % 去掉不需要的谐波
y1 = ifft(t); % FFT逆运算
A = max(abs(y1)) % 求幅值

plot(x,y,'b'); % 绘原图
hold on;
grid on;
plot(x,y1,'r') % 绘滤波后的波形

我的问题是
1.这个程序似乎不可以滤除直流部分,请问该如何解决?
2.我使用这个程序对一个标准正弦信号滤波,居然滤波后波形幅值只有原波形的一半,程序有什么错误?
回复
分享到:

使用道具 举报

发表于 2007-6-18 15:08 | 显示全部楼层
发表于 2007-6-18 15:20 | 显示全部楼层
注意好对应的关系。第一根是对应直流,第二根和倒数第一根对应的才是你的第一谐次。
发表于 2007-6-18 15:22 | 显示全部楼层
另外,为什么还要做IFFT呢,由FFT的结果可以直接得到幅值,也可得到波形
 楼主| 发表于 2007-6-18 15:30 | 显示全部楼层

楼上的
不知道您是不是看清了我的问题情形。。。
我要求输出50Hz信号的波形和幅值
不是频谱

另外
我希望能帮忙找到我程序的错误

还是谢谢了。
发表于 2007-6-18 15:45 | 显示全部楼层
我三楼已经指出了你的错误。
我给你另外的建议是用FFT已经能得到了50Hz的幅值和相位,那波形也自然就得到了,不需要再进行IFFT,而且做IFFT我想效果不如我给你的建议
 楼主| 发表于 2007-6-18 16:30 | 显示全部楼层
不作ifft
怎么输出波形?

我是新手
不是很了解

楼上的再指导一下。
发表于 2007-6-18 16:40 | 显示全部楼层
做FFT后,幅值A=abs(t(2))/N*2;相位就是ph=phase(t(2));
那构造一个波形 x=A*cos(2*pi*50*tn+ph)就是了。(tn是时间序列)
 楼主| 发表于 2007-6-18 17:13 | 显示全部楼层

谢谢楼上的
ok袅~

再多问一点
fft仅仅对一个基波周期做分析
我现在的数据有很多很多
并且数据并不一定呈严格周期性变化
如果我想对n个基波周期进行滤波
要求输出得到50Hz正弦波

应该怎么做比较合适?
谢谢
发表于 2007-6-18 17:24 | 显示全部楼层
t(2:end-1) = 0; % 去掉不需要的谐波
-->改成 t(1)=0;t(3:end)=0;再plot(real(ifft(t)))试一试,千万不要用plot(abs(ifft(t)))
发表于 2007-6-18 17:25 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-6 14:49 编辑
原帖由 zsy1026 于 2007-6-18 14:53 发表
求教关于一个离散信号的滤波问题。

离散信号数据保存在 data.txt文件中
数据的采样频率为50kHz

期望实现的滤波要求:
只保留信号中50Hz的部分,
滤除所有其他频段信号,包括直流信号
输出50Hz信号的波形 ...

这似乎有问题,采样频率为50kHz,能采到信号最高是25Hz,采不到50Hz!!

发表于 2007-6-18 17:30 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-6 14:50 编辑
原帖由 songzy41 于 2007-6-18 17:25 发表

这似乎有问题,采样频率为50kHz,能采到信号最高是25Hz,采不到50Hz!!

我小说的说一句:50k哦:lol
这么高的采样率去采集50Hz的信号有些大材小用,而且给频谱分析以及滤波带来很多麻烦。
既然信号已经采集到了,需要分析50hz的线谱,只有先分级滤波降采样拉,才能有效滤除直流以及准确分析线谱能量。

[ 本帖最后由 w89986581 于 2007-6-18 17:36 编辑 ]
 楼主| 发表于 2007-6-18 17:40 | 显示全部楼层
50kHz还采样不了50Hz的波形?
汗ing。。。

现在工程上用的一般很少采样超过100kHz的仪器的说。。。
发表于 2007-6-18 17:44 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-6 14:50 编辑
原帖由 VibrationMaster 于 2007-6-18 17:24 发表
t(2:end-1) = 0; % 去掉不需要的谐波
-->改成 t(1)=0;t(3:end)=0;再plot(real(ifft(t)))试一试,千万不要用plot(abs(ifft(t)))

负频率不能去掉,t(end)得保留。
发表于 2007-6-18 17:51 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-6 14:50 编辑
原帖由 zsy1026 于 2007-6-18 17:13 发表

谢谢楼上的
ok袅~

再多问一点
fft仅仅对一个基波周期做分析
我现在的数据有很多很多
并且数据并不一定呈严格周期性变化
如果我想对n个基波周期进行滤波
要求输出得到50Hz正弦波

应该怎么做比较 ...

50KHz对50Hz采一两个周期的话,数据量还不算大,但如果采的周期过多的话,这个频率是高了些,建议用ZFFT。
当然把所有数据做FFT也是可以的。做法是一样,你把谱线和频率之间的对应关系弄清了就没问题了

补充一句,只采两个周期的话,如果能够保证整周期采样的话,而又没有非谐次成分存在的话是没问题的,但是要是不能保证这两点的话,那么加大采样长度是必要的

[ 本帖最后由 yangzj 于 2007-6-18 18:12 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-22 23:25 , Processed in 0.057390 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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