matlab学习之降噪平滑算法
平滑降噪测试,代码如下
% 平滑降噪 % FFT变换和小波变换 clc clf clear length_of_sig=128; x=linspace(0,2*pi,length_of_sig); % signal=5*sin(x)+2*sin(5*x)+randn(x);书上的这个是错的,随机数里的参数要求是整数 raw=5*sin(x)+2*sin(5*x); signal=5*sin(x)+2*sin(5*x)+randn(1,length_of_sig); jiequ=16; transf=fft(signal); filter_transf(1:jiequ)=transf(1:jiequ); filter_transf(length_of_sig-jiequ:length_of_sig)=transf(length_of_sig-jiequ:length_of_sig); filter_signal=ifft(filter_transf); % before_hist=real(transf); % after_hist=hist(before_hist); % after_hist=histogram(before_hist); [xd1,cxd1,lxd1] = wden(signal,\'sqtwolog\',\'h\',\'sln\',3,\'db3\'); [xd2,cxd2,lxd2] = wden(signal,\'sqtwolog\',\'s\',\'one\',2,\'db3\'); plot(x,signal,\'k--\') hold on; % plot(x,raw,\'r\')\'无噪声信号\', plot(x,filter_signal,\'b\') plot(x,xd1); plot(x,xd2); legend(\'无噪声信号+噪声\',\'FFT恢复信号\',... \'小波1恢复信号\',\'小波2恢复信号\') % 从结果看来小波2和FFT效果都不错。
参考:
1、matlab教程,例1.6 傅里叶变换与信号分析,之后发现改教程是基于matlab5.2的。
2、七中滤波方法测试matlab实现(转)