資源簡介
用小波去噪,不同尺度下的閥值去噪,去噪效果的對比
代碼片段和文件信息
%書本實例《實用小波分析入門》P114
%
clcclear;
%第三種信號源
f1?=?100;?
f2?=?500;?
f3?=?400;
Fs?=?2000;
N?=?1000;
t?=?(0:N-1)/Fs;
s?=?0.3*sin(2*pi*f1*t)?+?0.5*sin(2*pi*f2*t)?+?0.2*sin(2*pi*f3*t)?+?0.1*randn(1N);
subplot(221)plot(s)title(‘原始信號‘);
%?2.?利用coif3小波對信號進行多尺度分解
%定義小波的名稱和分解尺度
w?=?‘db8‘;maxlev?=?4;
[c?l]?=?wavedec(s?maxlev?w);
newc?=?c;
subplot(222)plot(c);%axis([0?1000?-5?5])title(‘原始信號在4個尺度上細節分量‘);
%?3.?將個尺度上的細節分量進行修改
%(1)將尺度3和尺度4上的分量變為零,對小波分解后的數據進行后續處理
newc?=?wthcoef(‘d‘?c?l?[34]);
%(2)將尺度1上的部分細節分量變為零。確定尺度1上的細節分量的位置。
k?=?maxlev?+?1;
first?=?sum(l(1:k-1))?+1;?last?=?first?+?l(k)?-1;
indd1?=?first:last;
%將尺度1上的其他分量變為原來的1/3
newc(indd1)?=?c(indd1)/3;
%確定尺度1上細節分量在時間段[400:600]的細節分量
%必須注意的是,尺度k上的細節分量的時間t的氣勢點
%與原始信號的時間t的對應關系為t/2^k這里k?=?1;
indd1?=?first?+?400/2:first?+?600/2;
%(3)將尺度1在[400:600]時間段上的細節分量變為零。利用matlab上的zeros命令將小波分解后的尺度為1上的數據中時間段為[400:600]的細節分量變為零。
newc(indd1)?=?zeros(size(indd1));
%(4)將尺度2在原始信號上的時間t?=?500處的上的細節分量變為4.利用比例關系找到時間?t?=?500的數據在頻率域中的相應位置。
k?=?maxlev;first?=?sum(l(1:k-1))+1;
newc(first?+?500/2^2)?=?4;
subplot(224)plot(newc(1:1000))axis([0?1000?-5?5])title(‘修改4個尺度上的細節分量‘);
%?4.?重構修改后的信號
synth?=?waverec(newc?l?w);
subplot(223);plot(synth(1:1000))title(‘更新后的信號‘);
%我的測試分析
figure(2)
subplot(211)plot(c)axis([0?1000?-5?5])title(‘原始信號在4個尺度上細節分量‘);
subplot(212)plot(l)title(‘原始信號在4個尺度上近似分量‘);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1748??2013-04-10?22:07??小波去噪.m
-----------?---------??----------?-----??----
?????????????????1748????????????????????1
評論
共有 條評論