matlab实现简单的离散小波变换
聊仙森
2021年05月14日 22:44
收录于文集
共3篇

离散小波的三级分解算法

采样频率为480Hz时三级分解的各级频带

结果如图所示:

定子电枢Pha1电流频谱图

应用db5母小波计算DWT系数(A3、D3、D2、D1)

应用db5母小波各频段能量占比(A3、D3、D2、D1)

参考代码:

fs_1 = 1e4;

fs_2 = 480;

time = resample(time,fs_2,fs_1); %降采样处理,从fs_1降低到fs_2

cur_phA = resample(cur_phA,fs_2,fs_1); %降采样处理

plot(time,cur_phA);

N=length(time);

x=cur_phA-mean(cur_phA);

y=fft(x,N);

y1=abs(y);

ayy=y1/(N/2);

ayy(1)=ayy(1)/2;

f=([1:N]-1)*fs_2/N;

figure(1)

plot(f(1:N/2),ayy(1:N/2));%FFT分析

hold on

set(gca,'fontsize&#​39;,16);

grid on

xlabel('频率(Hz)&#​39;,'fontsize&#​39;,16);

ylabel('幅值(r/min)&#​39;,'fontsize&#​39;,16);

%%

%%%%%%小波分解

[c,l] = wavedec(x,3,'db5&#​39;);

%%

%重构1~3层细节函数

a3 = wrcoef('a&#​39;,c,l,'db5&#​39;,3);

d3 = wrcoef('d&#​39;,c,l,'db5&#​39;,3);

d2 = wrcoef('d&#​39;,c,l,'db5&#​39;,2);

d1 = wrcoef('d&#​39;,c,l,'db5&#​39;,1);%fs_2Hz - fs_2Hz

figure

subplot(4,1,1);

plot(a3)

subplot(4,1,2);

plot(d3)

subplot(4,1,3);

plot(d2)

subplot(4,1,4);

plot(d1)

%%

E_cfs3_1 = norm(a3,2)^2;

E_cfs3_2 = norm(d3,2)^2;

E_cfs3_3 = norm(d2,2)^2;

E_cfs3_4 = norm(d1,2)^2;

E_total = E_cfs3_1+E_cfs3_2+E_cfs3_3+E_cfs3_4;

p_node(1)= 100*E_cfs3_1/E_total;           % 求得每个节点的占比

p_node(2)= 100*E_cfs3_2/E_total;           % 求得每个节点的占比

p_node(3)= 100*E_cfs3_3/E_total;           % 求得每个节点的占比

p_node(4)= 100*E_cfs3_4/E_total;           % 求得每个节点的占比

bar([1:4],p_node);

title('各个频段能量所占的比例&#​39;);

多多少少有点用吧……