声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3330|回复: 22

[滤波] 为什么带通滤波得到的信号如此奇怪?

[复制链接]
发表于 2012-6-20 16:09 | 显示全部楼层 |阅读模式

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

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

x
大家好,由于想得到测试对象的某个频段内的信号,因此决定对信号进行滤波,但是滤波之后的信号感觉有些不对劲,请各位大神解答一下,谢谢。
首先对测试对象的时域信号进行FFT变换,得到对象的频谱图如下。
untitled.jpg
于是取共振峰附近的有效频率3.1Hz~3.4Hz进行滤波,得到滤波前后的对比图如下, untitled1.jpg
滤波之前,波形在4s之前为零;但是滤波之后,波形在4s之前还有数值,这是不是说明滤波信号有误。请求支援,谢谢!


回复
分享到:

使用道具 举报

发表于 2012-6-20 20:49 | 显示全部楼层
你是如何滤波的,能否将原始数据文件发给我看看?
 楼主| 发表于 2012-6-21 09:09 | 显示全部楼层
回复 2 # wanyeqing2003 的帖子

这是我的带通滤波程序
%带通滤波
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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-6-21 09:10 | 显示全部楼层
回复 2 # wanyeqing2003 的帖子

这是我的数据文件 input2.txt (16.36 KB, 下载次数: 7)
发表于 2012-6-21 14:38 | 显示全部楼层
回复 1 # yizhendong 的帖子

我认为结果并不奇怪,很正常.
你可以逐渐加宽滤波频带,看波形是怎样变化的.

点评

赞成: 5.0
赞成: 5
  发表于 2012-6-24 01:33
赞成: 5
带宽太窄。  发表于 2012-6-21 14:51
发表于 2012-6-21 23:07 | 显示全部楼层
发表于 2012-6-22 14:58 | 显示全部楼层
本帖最后由 wanyeqing2003 于 2012-6-22 15:09 编辑

我用巴特沃斯滤波器试了一下。
采样点数        nt=        1708
通道号        chi=        1
采样频率        fs=        100
高通频率        fpH=        1
低通频率        fpL=        10
滤波器阶        npj=        1

频谱.jpg
滤波前后时域.jpg
发表于 2012-6-22 15:10 | 显示全部楼层
我试的结果是,当滤波阶数提高,就会出现楼主的现象。
我想可能是由于信号截断误差所致,可以用窗函数修正一下,应该能够改进。
发表于 2012-6-22 19:15 | 显示全部楼层
本帖最后由 wanyeqing2003 于 2012-6-22 19:17 编辑

我试过了。如果从4s开始分析,就不能用窗函数了。
用窗函数会使信号变形。
下图是加窗后的图形。

加窗后.jpg
发表于 2012-6-23 11:30 | 显示全部楼层
请教为何对4s后数据加窗会出现时域变形?
发表于 2012-6-23 13:50 | 显示全部楼层
renforever 发表于 2012-6-23 11:30
请教为何对4s后数据加窗会出现时域变形?

按理说,这段信号是非平稳随机过程,不具备统计特征。
加窗处理是出于在宏观上的统计分析的方法,实质上加窗是将信号的两端做了修改,强制使得信号形成封闭的循环。
可见,加窗处理不适合这种场合。
 楼主| 发表于 2012-6-25 14:38 | 显示全部楼层
回复 6 # wanyeqing2003 的帖子

采样频率100Hz
 楼主| 发表于 2012-6-25 14:52 | 显示全部楼层
回复 11 # wanyeqing2003 的帖子

针对大家的讨论,我有3点疑问:
1.这是非平稳随机信号吗?在3.8s左右的时间给梁一个激励,梁在有阻尼状态下自由衰减。最后测得的信号就是我在帖子中给出的信号。应该属于周期信号。
2.另外如果不是周期信号,像我的滤波程序(用FFT变换到频域,然后截取给定频率段,最后再利用反FFT变换到时域)是不是不适合。
3.滤波阶数指的是什么?我的滤波程序好像没有用到。
发表于 2012-6-25 19:28 | 显示全部楼层
yizhendong 发表于 2012-6-25 14:38
回复 6 # wanyeqing2003 的帖子

采样频率100Hz

谢谢。我已经查到了。
发表于 2012-6-25 19:37 | 显示全部楼层
回复 13 # yizhendong 的帖子

我的看法是:
1、这段信号既不是平稳随机过程,也不是周期信号。根据你的描述,应该属于瞬态激励下的系统衰减振动。
2、对于这样的信号,虽然不具有统计的特征,但可以用fft变化后分析系统的频率特性。
3、我用的是巴特沃斯滤波器,自己编程,可以处理1~8阶滤波。阶数与滤波特性有关,阶数越高,滤波斜率越大。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-25 14:29 , Processed in 0.102552 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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