声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2183|回复: 11

[滤波] 如何选择滤波范围

[复制链接]
发表于 2012-7-1 19:08 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 yizhendong 于 2012-7-1 19:15 编辑


大家好!左上图是试验中测得的时域数据,左下图是经过FFT变换得到的频域数据。
右上图是经过滤波之后频带范围在1.75-1.95Hz的时域数据,右下图是频带范围在1.6-2.0Hz的时域数据。而且两组时域数据相差很大,可以看到右下图波峰在6s的位置,但是右上图波峰在8s的位置。
PS:我想得到1.795Hz附近的信号,而且上面两组数据中频带范围在1.6-2.0Hz的时域信号更符合我的要求,理论上应该是1.75-1.95Hz。想问下这是为什么?
请求各位大师解决一下,谢谢!

无标题.png

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2012-7-2 11:51 | 显示全部楼层
回复 1 # yizhendong 的帖子

把滤波器设置的参数贴上来。
发表于 2012-7-2 11:52 | 显示全部楼层
回复 1 # yizhendong 的帖子

为什么1.6-2.0Hz时域信号更符合你的要求,你的要求是什么?
理论上的1.75-1.95Hz又是怎么得到的呢?讲清楚点,让大家更容易判断。
 楼主| 发表于 2012-7-2 22:12 | 显示全部楼层

因为1.6-2.0Hz的信号在6s时有个波峰,这正是我所想要的。
另外根据实测的信号可以知道信号频率集中在1.8Hz左右,那么1.75-1.95Hz在这个带宽明显更能体现1.8Hz左右。
所以,理论上1.75-1.95Hz是我所想要的,但是实际上得到1.6-2.0Hz是我所想要的。
 楼主| 发表于 2012-7-2 22:20 | 显示全部楼层
amateur 发表于 2012-7-2 11:51
回复 1 # yizhendong 的帖子

把滤波器设置的参数贴上来。

这是我的带通滤波程序
我是利用FFT变换把时域数据变到频域,然后截取所需频段的信号,再经过FFT反变换变到时域,得到滤波后的数据。
因此没有用到滤波器。
%带通滤波
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear
clc
close all hidden
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fni=input('频域带通滤波-输入数据文件名:','s');
fid=fopen(fni,'r');                 %fid用于存储文件句柄值
sf=fscanf(fid,'%f',1);              %读出文件中的采样频率的信息,读入的是一个1*1的矩阵
fmin=fscanf(fid,'%f',1);            %读出文件中的最小截止频率,读入的是一个1*1的矩阵
fmax=fscanf(fid,'%f',1);            %读出文件中的最大截止频率,读入的是一个1*1的矩阵
sx=fscanf(fid,'%s',1);              %读出文件中的横向坐标轴的标注,读入的是一个1*1的矩阵
sy=fscanf(fid,'%s',1);              %读出文件中的纵向坐标轴的标注,读入的是一个1*1的矩阵
fno=fscanf(fid,'%s',1);             %输出数据文件名,读入的是一个1*1的矩阵
x=fscanf(fid,'%f',[1 inf]);         %输入数据存成行向量
status=fclose(fid);
%取信号数据长度
n=length(x);
%建立离散时间列向量
t=(0:1/sf:(n-1)/sf)';
%取大于并最接近n的2的幂次方为FFT长度
nfft=2^nextpow2(n);
%四舍五入取整求最小截止频率对应数组元素的下标
ni=round(fmin*nfft/sf+1);
%四舍五入取整求最大截止频率对应数组元素的下标
na=round(fmax*nfft/sf+1);
%进行FFT变换,结果存于y
y=fft(x,nfft);
%建立一个长度为nfft元素全为0的向量
a=zeros(1,nfft);
%将y的正频率带通内的元素赋值给a
a(ni:na)=y(ni:na);
%将y的负频率带通内的元素赋值给a
a(nfft-na+1:nfft-ni+1)=y(nfft-na+1:nfft-ni+1);
%进行fft逆变换,结果存于y
y=ifft(a,nfft);
%取逆变换的实部n个元素为滤波结果列向量
y=(real(y(1:n)))';
%绘制滤波前的时程曲线图形
subplot(2,1,1);
plot(t,x);
%添加横向坐标轴的标注
xlabel(sx);
%添加纵向坐标轴的标注
ylabel(sy);
grid on;
%绘制滤波后的时程曲线图形
subplot(2,1,2);
plot(t,y);
%添加横向坐标轴的标注
xlabel(sx);
% %添加纵向坐标轴的标注
ylabel(sy);
grid on;
%打开文件输出滤波后的数据
fid=fopen(fno,'w');
for k=1:n
     fprintf(fid,'%f %f\n',t(k),y(k));
end
status=fclose(fid);
发表于 2012-7-2 22:47 | 显示全部楼层
我感觉可能是这两个原因引起的:
1、加窗处理了;
2、滤波器斜率过大。

楼主似乎下面话题中提过类似问题:
http://forum.vibunion.com/forum- ... -extra--page-1.html
 楼主| 发表于 2012-7-3 10:06 | 显示全部楼层
wanyeqing2003 发表于 2012-7-2 22:47
我感觉可能是这两个原因引起的:
1、加窗处理了;
2、滤波器斜率过大。

谢谢您的回答,您很乐于帮助人,
另外我的这个滤波程序中没有加窗函数,也没有设置滤波器过渡带的斜率。我是利用FFT变换把时域数据变到频域,然后截取所需频段的信号,再经过FFT反变换变到时域,得到滤波后的数据。
因此没有用到matlab提供的诸如巴特沃斯等滤波器。

点评

你可以用butterworth试试,当你参数调的适合你的信号时,会有很好的效果!  发表于 2012-7-3 16:10
发表于 2012-7-3 10:48 | 显示全部楼层
yizhendong 发表于 2012-7-3 10:06
谢谢您的回答,您很乐于帮助人,。
另外我的这个滤波程序中没有加窗函数,也没有设置滤波器过渡 ...

我在用巴特沃斯滤波器时,用一阶和二阶滤波好一些,如果用到五阶以上效果就差一些。

点评

当阶次越高,他的过渡带就越小,所以效果就差一些了!  发表于 2012-7-3 16:11

评分

1

查看全部评分

 楼主| 发表于 2012-7-3 19:37 | 显示全部楼层
wanyeqing2003 发表于 2012-7-3 10:48
我在用巴特沃斯滤波器时,用一阶和二阶滤波好一些,如果用到五阶以上效果就差一些。

我今天用切比雪夫滤波器试了一下我的测量数据。
选定相同的带通,分别用FFT滤波和切比雪夫滤波器,最后得到的滤波信号为什么差别很大。难道不同的滤波方法得到的最终信号还不同。
我很郁闷。。。。。。
发表于 2012-7-4 09:03 | 显示全部楼层
yizhendong 发表于 2012-7-3 19:37
我今天用切比雪夫滤波器试了一下我的测量数据。
选定相同的带通,分别用FFT滤波和切比雪夫滤波器,最后得 ...

是这样的。
不同滤波器,选取不同的参数,得到的结果是会有差别的!
 楼主| 发表于 2012-7-4 10:40 | 显示全部楼层
wanyeqing2003 发表于 2012-7-4 09:03
是这样的。
不同滤波器,选取不同的参数,得到的结果是会有差别的!

那有没有衡量的标准说明何种滤波方法是有效的,我就一直处于没有目标的摸索之中,,求大师指点。
发表于 2012-7-4 11:22 | 显示全部楼层
yizhendong 发表于 2012-7-4 10:40
那有没有衡量的标准说明何种滤波方法是有效的,我就一直处于没有目标的摸索之中,,求大师指点。

关于这方面分析,我目前还没有见到。可能是没刻意去寻找。
你可以自己先分析一下。

我感觉,技术和研究到达一定深度后,能找到帮忙的人或者有用资料,就越来越少了。
有时需要自己去发现。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-26 08:50 , Processed in 0.067171 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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