matlab 小波的分解与重构
小波的分解和重构在很多领域都有运用。第一: matlab中相关小波函数1、wavedec: Multilevel 1-D wavelet decomposition小波分解[C,L] =wavedec(X,N,'wname')[C,L] =wavedec(X,N,Lo_D,Hi_D)...
小波的分解和重构在很多领域都有运用。
第一: matlab中相关小波函数
1、 wavedec: Multilevel 1-D wavelet decomposition 小波分解
[C,L] = wavedec(X,N,'wname'
)
[C,L] = wavedec(X,N,Lo_D,Hi_D)
-
Lo_D
, the decomposition low-pass filter -
Hi_D
, the decomposition high-pass filter -
X is signal,N is layer,C 是小波系数 ,L是小波.
2、 detcoef: Multilevel 1-D wavelet detail coefficients 小波细节系数,目的是获取上图种的cDx
D = detcoef(C,L,N)
D = detcoef(C,L)
3、appcoef :1-D approximation coefficients 小波近似系数, 目的是获取cA
A = appcoef(C,L,'wname
',N)
A = appcoef(C,L,'wname'
)
A = appcoef(C,L,Lo_R,Hi_R)
A = appcoef(C,L,Lo_R,Hi_R,N)
4、 waverec : Multilevel 1-D wavelet reconstruction 小波重构
X = waverec(C,L,Lo_R,Hi_R)
X = waverec(C,L,'wname'
)
X = appcoef(C,L,'wname'
,0)
第二: 案例
用小波分解重构函数后,用MSE 来进行比较分析
eg1: 小波信号分解到a1 ,和b1 然后重构信号。
eg2: 小波分解到第三层重构信号
eg3: 小波分解到第三层,但是通过第二层的a2,d2,d1,最后重构部分要加上length(ecg)
eg4: idwt 重构函数:
完整代码:
clc,clear all;close all;
fs=180;
N=2000;
t=(1:N-1)/fs;
s=1.2*sin(2*pi*t*20)+0.5*cos(2*pi*t*60);%%% 滤掉60Hz的信号
% level=8; wavename='bior2.6';
figure;
subplot(211); plot(t,s); title('原始信号') ; grid on
[f, spectrum ] = gan_fft(s,fs,N);
subplot(212);plot(f,spectrum); title('原始信号pinpu'); grid on
[C,L]=wavedec(s,2,'db6');
X = waverec(C,L,'db6');
figure;
subplot(211);plot(t,X); title('原始信号分解后又重构的信号') ; grid on
[f, spectrum ] = gan_fft(X,fs,N);
subplot(212);plot(f,spectrum); title('原始信号分解后又重构pinpu'); grid on
%%%% 均方误差
MSE=sum((X-s).^2)/length(s);
function [f, spectrum ] = gan_fft(s,Fs,L)
%GAN_FFT 此处显示有关此函数的摘要
% 此处显示详细说明
y=fft(s);
p2=abs(y/L);
p1=p2(1:L/2+1);
p1(2:end-1)=2*p1(2:end-1);
f = Fs*(0:(L/2))/L;
spectrum=p1;
end
例子2:
clc,clear all;close all;
fs=180;
N=2000;
t=(1:N-1)/fs;
s=1.2*sin(2*pi*t*20)+0.5*cos(2*pi*t*60);%%% 滤掉60Hz的信号
% level=8; wavename='bior2.6';
figure;
subplot(211); plot(t,s); title('原始信号') ; grid on
[f, spectrum ] = gan_fft(s,fs,N);
subplot(212);plot(f,spectrum); title('原始信号pinpu'); grid on
[C,L]=wavedec(s,3,'db6');
X = waverec(C,L,'db6');
[A1]=appcoef(C,L,'db6',1);
[A2]=appcoef(C,L,'db6',2);
[A3]=appcoef(C,L,'db6',3);
[D1,D2,D3]=detcoef(C,L,[1 2 3]);
C1=[A3,D3,D2,D1];%%% z注意此处是逗号还是分号
%[length(A3);length(D3);length(D2);length(D1);length(s)]
x2=waverec(C1,L,'db6');
MSE=sum((x2-s).^2)/length(s)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)