http://www.chinavib.com/forum/thread-71992-1-41.html
处理之前的信号如下:
放大图
再放大图
中间的趋势项部分是想要的信号,只要有趋势项就行,不需要宽度。
考虑到信号特点,我采用低通滤波进行了一下处理,得到的
结果如下
:
放大图
程序如下:
复制内容到剪贴板 代码:clear;clc
load signal.mat
b = fir1(64,[1e-9 1e-1]);
freqz(b,1,512);
rI=filter(b,1,signal);
plot(rI)
附件
以前对信号处理没什么接触,也不知道有没有更合适的方法来解决这个问题,只是自己的一个尝试,所以如果各位有什么想法敬请直言——是不是参数设置不合理,或者就根本不应该用低通滤波,而应该用其他更合适的方法。
稍微补充一点,就是如下图中的红线就是想要的结果——那个是我用鼠标画上去的。
--------------------------------- 版主的问题不是很容易解决的,因为实际上并没有低频信号存在,所以不是能用低频滤波器能过滤出来的。版主所要的波形幅值在0.985~1.015之间,我把“粗线”中的一部分取出,并作了谱分析(版主没有给采样频率,我假设为1000Hz),从图中看出这“粗线”中的主要频率在250Hz(见下图)。
我在处理中对signal信号进行了截幅,只取幅值在0.985~1.015之间的波形(见图),并通过250Hz的带陷滤波器,滤波器的输出(见下图)比较接近版主的要求,我想再做些平滑处理就能达到要求了。
程序为:
load signal.mat;
fs=1000;
x=signal';
N=length(x);
for k=1 : N %截幅
if x(k)>1.015
x(k)=1.015;
elseif x(k)<0.985
x(k)=0.985;
end
end
x=x-mean(x);
plot(x);
t=(0:N-1)/fs;
%带陷滤波
x1=cos(2*pi*250*t/fs);
x2=sin(2*pi*250*t/fs);
u=0.05; w1=0.1; w2=0.1;
e=zeros(1, N);
for i=1: N
y(i)=w1 * x1(i)+ w2 * x2(i);
e(i) =x(i)-y(i);
w1=w1+u * e(i) * x1(i);
w2=w2+u * e(i) * x2(i);
end
figure
plot(y); ylim([-0.015 0.015]);
title('带陷滤波器输出(在范围-0.015~0.015之间)');
-------------------------------
我也有兴趣试试, 但signal.mat下了读不进matlab
我想或许是版本问题吧! 我的版本是v6.5, 可惜, 失去学习练功机会
-------------------------------
这一点是我考虑不周,现在上传一个txt格式的,多谢Chaching热心帮忙啊.
txt格式大小超限,就用分成了两个。
[ 本帖最后由 sogooda 于 2008-11-2 11:06 编辑 ]
附件
s1.txt (263.67 KB) s2.txt (263.67 KB) --------------------------------
多谢宋老师指教!看来我还得自己多花些时间学习一些信号处理的知识,因为自己感觉有很多东西都不懂啊(比如您说的平滑的方法,呵呵。。。)。
您给出的这个方法的确已经是取得了非常不错的结果,多谢!
哦对了,信号的采样频率就是1000Hz的。 ----------------------------------
引用:
原帖由 sogooda 于 2008-11-2 10:59 发表
多谢宋老师指教!看来我还得自己多花些时间学习一些信号处理的知识,因为自己感觉有很多东西都不懂啊(比如您说的平滑的方法,呵呵。。。)。
我把平滑部分补上。在平滑之前,我把y中的前500个数据去掉(这主要是滤波器从瞬态到稳态过渡过程所造成的,在起始部分有一个峰值),以一常数代替。平滑是用了一个平滑滤波器,程序也附下。
主程序中加:
z=[ones(1,500)*0.002 y(501:end)];
u = fresmooth(z,800);
平滑滤波器函数:
function [y] = fresmooth(x,FILT_ORDER)
if length(x) < FILT_ORDER+1,
y=x;
else
y=filtfilt(1/FILT_ORDER*ones(FILT_ORDER,1),1,x);
end
平滑后的结果如下,其中红色的是陷波器输出,黑色的平滑后的输出。
-----------------------------------
ChaChing:
看过了原始信号, 好像是重覆性的冲击信号(impulse)!
这信号不是应该是高频的部分较为重要吗? 怎会想到要求趋势线?
我想这趋势线不是应该算误差吗? 不好意思, 有点好奇是什工程应用?
宋老师的确是高人, 但带陷滤波那部分尚不了解! 带陷是band-stop filter? 对不起, 没什麽基础, 可否教教或文献? 先谢!
对了, 我试过用moving average(cftool/smooth)的方式, 虽得到趋势线, 但不知为什麽有一平移的现象(相对原信号)?
--------------------------------------
有关带陷滤波器(notch filter)的基础知识可看一下胡广书的“数字信号处理:理论、算法与实现(第一版)”中9.1.2节。
我在上的程序中是使用的自适应带陷滤波器,可参看一下沈福民的“自适应信号处理”(西安电子科技大学出版社)笫8.3节。
文章评论(0条评论)
登录后参与讨论