

對信號進行一層分解
clc;
clear;
% 獲取噪聲信號
load('matlab.mat');
sig = M(1,1:1400);
SignalLength = length(sig);
%使用db1分解1層
[cA1,cD1] = dwt(sig,'db1');
%從系數 cA1 和 cD1 中構建一層近似A1 和細節 D1
A1 = upcoef('a',cA1,'db1',1,SignalLength);
D1 = upcoef('d',cD1,'db1',1,SignalLength);
% %或
% A1 = idwt(cA1,[],'db1',l_s);
% D1 = idwt([],cD1,'db1',l_s);
%顯示近似和細節
subplot(1,2,1); plot(A1); title('Approximation A1')
subplot(1,2,2); plot(D1); title('Detail D1')
%使用逆小波變換恢復信號
A0 = idwt(cA1,cD1,'db1',SignalLength);
err = max(abs(sig-A0))
對信號進行三層分解
[C,L] = wavedec(sig,3,'db1');%函數返回 3 層分解的各組分系數C(連接在一個向量里) ,向量 L 里返回的是各組分的長度。
%抽取近似系數和細節系數
%從 C 中抽取 3 層近似系數
cA3 = appcoef(C,L,'db1',3);
%從 C 中抽取 3、2、1 層細節系數
[cD1,cD2,cD3] = detcoef(C,L,[1,2,3]);
%或者
%cD3 = detcoef(C,L,3);
%cD2 = detcoef(C,L,2);
%cD1 = detcoef(C,L,1);
%重建 3 層近似和 1、2、3 層細節
%從 C 中重建 3 層近似
A3 = wrcoef('a',C,L,'db1',3);
%從 C 中重建 1、2、3 層細節
D1 = wrcoef('d',C,L,'db1',1);
D2 = wrcoef('d',C,L,'db1',2);
D3 = wrcoef('d',C,L,'db1',3);
%顯示多層分解的結果
%顯示 3 層分解的結果
figure(2)
subplot(2,2,1); plot(A3);
title('Approximation A3')
subplot(2,2,2); plot(D1);
title('Detail D1')
subplot(2,2,3); plot(D2);
title('Detail D2')
subplot(2,2,4); plot(D3);
title('Detail D3')
%從 3 層分解中重建原始信號
A0 = waverec(C,L,'db1');
err = max(abs(sig-A0))
% 我們注意到連續的近似隨着越來越多的高頻信息從信號中濾除,
% 噪聲變得越
% 來越少。 3 層近似與原始信號對比會發現變得很干凈。對比近似和原始信號,如下
figure(3)
subplot(2,1,1);plot(sig);title('Original'); axis off
subplot(2,1,2);plot(A3);title('Level 3 Approximation');axis off
這篇博客是參考百度文檔上一位大佬寫的,這是數據和文章的鏈接
鏈接:https://pan.baidu.com/s/19_jazLnyBuperh7ME5NG8Q
提取碼:aonu
