⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 program_04_01.m

📁 这是基于MATLAB系统上开发的,应用于小波分析方面,很有用的程序模块,书名为"MATLAB在小波分析中的应用"
💻 M
字号:
%%  本程序采用Mallat算法对信号进行小波分析
 
clc;clear;
 
%%  1.正弦波定义
f1=50;  %  频率1
f2=100; %  频率2
fs=2*(f1+f2);  %  采样频率
Ts=1/fs;  %  采样间隔
N=120;    %  采样点数
 
n=1:N;
y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts);  %  正弦波混合
 
figure(1)
subplot(2,1,1)
plot(y);
title('原始信号')
subplot(2,1,2)
stem(abs(fft(y)));
title('原始信号频谱')
 
%%  2.小波滤波器
h=wfilters('db30','l');  %  低通
g=wfilters('db30','h');  %  高通
 
h=[h,zeros(1,N-length(h))];  %  补零(圆周卷积,且增大分辨率变于观察)
g=[g,zeros(1,N-length(g))];  %  补零(圆周卷积,且增大分辨率变于观察)
 
figure(2);
subplot(2,1,1)
stem(abs(fft(h)));
title('分解低通滤波器频谱')
 
subplot(2,1,2)
stem(abs(fft(g)));
title('分解高通滤波器频谱')
 
%%  3.MALLET分解算法(圆周卷积的快速傅里叶变换实现)
sig1=ifft(fft(y).*fft(h));  %  低通(低频分量)
sig2=ifft(fft(y).*fft(g));  %  高通(高频分量)
 
figure(3);  %  信号图
subplot(2,2,1)
plot(real(sig1));
title('低频分量')
 
subplot(2,2,2)
plot(real(sig2));
title('高频分量')
 
subplot(2,2,3)
stem(abs(fft(sig1)));
title('低频分量频谱')
 
subplot(2,2,4)
stem(abs(fft(sig2)));
title('高频分量频谱')
 
%%  4.MALLET重构算法
sig1=dyaddown(sig1); %  2抽取
sig2=dyaddown(sig2); %  2抽取
 
sig1=dyadup(sig1);   %  2插值
sig2=dyadup(sig2);   %  2插值
 
sig1=sig1(1,[1:N]);  %  去掉最后一个零
sig2=sig2(1,[1:N]);  %  去掉最后一个零
 
hr=h(end:-1:1);         %  重构低通
gr=g(end:-1:1);         %  重构高通
hr=circshift(hr',1)';   %  位置调整圆周右移一位
gr=circshift(gr',1)';   %  位置调整圆周右移一位
 
sig1=ifft(fft(hr).*fft(sig1));  %  低频
sig2=ifft(fft(gr).*fft(sig2));  %  高频
sig=sig1+sig2; %  源信号
 
%%  5.比较
figure(4);
subplot(2,2,1)
plot(real(sig1));
title('重构低频信号');
subplot(2,2,2)
plot(real(sig2));
title('重构高频信号');
subplot(2,2,3)
stem(abs(fft(sig1)));
title('重构低频信号频谱');
subplot(2,2,4)
stem(abs(fft(sig2)));
title('重构高频信号频谱');
 
figure(5)
plot(real(sig),'r','linewidth',2);
hold on;
plot(y);
legend('重构信号','原始信号')
title('重构信号与原始信号比较')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -