• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-04-20
  • 语言: Matlab
  • 标签: 小波  小波去噪  

资源简介

用小波去噪,不同尺度下的阀值去噪,去噪效果的对比

资源截图

代码片段和文件信息

%书本实例《实用小波分析入门》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


评论

共有 条评论