花如月 发表于 2007-7-29 15:49

数据分析的一个综合例子,新手请进

例子原型来自《matlab7.0从入门到精通》 求是科技编著。对其例子略作删改,正弦信号中高斯白噪声的滤除、信号直流成分和线性成分的去除(使用detrend函数,记得论坛上有去均值和趋势项的程序。二者十分相似)。拿来和大家分享:@) ,同时希望大家都能把自己感觉不多的例子和笔记拿出来分享。共同学习,一起进步!
clear
b=ones(1,5)./5;%均值模板
t=0:0.1:10;
x=40*sin(t)+6*randn(size(t));%正弦加高斯白噪声
y=2*t+0.5*randn(size(t));%带线性成分的随机信号
z=3+0.5*randn(size(t));%带直流成分的随机信号
X=filter(b,1,x);
X1=medfilt1(x,10);
Y=detrend(y);%去除线性成分
Z=detrend(z,'constant');%去除直流成分
a=get(0);
figure('position',a.ScreenSize);%figure('position',a.MonitorPositions);
%最大化窗口,便于显示
hold on;
subplot(311),plot(t,x,t,X,'r.',t,X1,'g*')
axis();
legend('原始数据','均值滤波','一维中值滤波','Location','best');
title('高斯噪声的滤除效果');
subplot(312),plot(t,y,t,Y,'r.');
legend('原始数据','去除线性成分后','Location','best');
title('使用detrend去除线性成分')
subplot(313),plot(t,z,t,Z,'k-');
legend('原始数据','去除直流成分后','Location','best');
title('使用detrend去除直流成分')

zhangnan3509 发表于 2007-7-29 15:56

回复 #1 花如月 的帖子

有没有滤波器的,能不能整几个例子

wanyeqing2003 发表于 2007-7-29 16:00

挺好的例子。

花如月 发表于 2007-7-29 16:03

谢谢版主鼓励,最近在补信号处理的基础。所以会做不少例题,同时也会遇到不少问题。问的问题要是太没水准你可不许笑话我。再整理出好的例子还会在这个帖子下跟的

花如月 发表于 2007-7-29 16:05

回复 #2 zhangnan3509 的帖子

正在整理,准备和二维的放到一起。我补一维信号处理是为了,理解二维图像的一些滤波处理。基础不好,可是闹了不少笑话

zhangnan3509 发表于 2007-7-29 16:16

回复 #5 花如月 的帖子

我对很多内容也不清楚!滤波器这块基本是空白,所以有点私心了,以后多发点,我们共同学习啊

花如月 发表于 2007-7-29 18:14

问一些基本的问题:在对序列做fft的时候,fft的点数和序列长度有关系么?变换后的序列是复数,在频域滤波里似乎都是利用fft结果幅值信息,相位信息有什么用处?

另外eight提到过使用EMD和小波可以消除正弦波中的白噪声,哪位高人有没有例程呢?很想知道消噪的效果,毕竟平均值和中值滤波效果都不怎么好

[ 本帖最后由 花如月 于 2007-7-29 18:48 编辑 ]

zhangnan3509 发表于 2007-7-29 19:11

回复 #7 花如月 的帖子

eight做过一个消噪的例子,但不是消除正弦中白噪声,至于程序 你得问他了,而且很多论文上都有关于小波消噪的,可以找找看!
我觉得为什么fft之后,往往做幅频谱,其目的应该是为了使谱图更加直观简单,虽然做双边复数谱物理意义比较突出。

对于仿真信号,习惯上取点都是2^n倍,至于fft取点,你用的应该是fft(x,N),点之间的关系在help里有解释
Y = fft(X,n) returns the n-point DFT. If the length of X is less than n, X is padded with trailing zeros to length n. If the length of X is greater than n, the sequence X is truncated. When X is a matrix, the length of the columns are adjusted in the same manner.

zhangnan3509 发表于 2007-7-29 19:36

回复 #7 花如月 的帖子

同时我不看好 EMD的消噪,起码我没有得到好的例子

hector1982 发表于 2007-7-30 08:50

123小波消澡试了些,但不是很明白.消噪的效果也不是很好.我这有用polyfit函数消噪的图,效果很好,和你的差不多.1

hector1982 发表于 2007-7-30 08:52


哈哈,格式搞错了 
s2=z;
s1=z;
a1=polyfit(t,s2,1);
s2=s2-polyval(a1,t);
plot(t,s1,t,s2,'r');
legend('原始数据','去除高斯白噪声','Location','best');
其它的程序跟花如月的一样了

小波的消噪程序
=ddencmp('den','wp',b);
%use all threshold choose wdencmp noise dispose\
=wpdencmp(b,sorh,3,'db2',crit,thr,keepapp);
figure;
plot(t,s1,t,c,'r');
legend('原始数据','去除高斯白噪声','Location','best');
不太会用,所以效果不是很好.

[ 本帖最后由 hector1982 于 2007-7-30 09:07 编辑 ]

zhangnan3509 发表于 2007-7-30 08:57

回复 #11 hector1982 的帖子

把程序贴上吧!图限制在400K,应该没问题啊
页: [1]
查看完整版本: 数据分析的一个综合例子,新手请进