平滑降噪測試,代碼如下
% 平滑降噪
% 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實現(轉)
