用matlab写一段比较小波包db基和sym基相位失真程度、频带划分效果的代码
时间: 2023-12-03 20:42:07 浏览: 77
以下是用 MATLAB 编写的比较小波包 db 基和 sym 基相位失真程度、频带划分效果的代码:
```matlab
% 设置信号参数
fs = 1000; % 采样频率
t = 0:1/fs:1-1/fs; % 时间序列
f = 5; % 信号频率
x = sin(2*pi*f*t); % 原始信号
% 小波包分解
wpt_db = wpdec(x,4,'db4');
wpt_sym = wpdec(x,4,'sym4');
% 计算相位失真程度
phd_db = wpcoef(wpt_db,4);
phd_sym = wpcoef(wpt_sym,4);
phd_db = sort(abs(phd_db),'descend');
phd_sym = sort(abs(phd_sym),'descend');
phd_db = phd_db(1:round(length(phd_db)*0.1)); % 取前10%的系数
phd_sym = phd_sym(1:round(length(phd_sym)*0.1)); % 取前10%的系数
phd_db = sum(phd_db)/sum(abs(wpcoef(wpt_db)));
phd_sym = sum(phd_sym)/sum(abs(wpcoef(wpt_sym)));
% 绘制频带划分效果
figure;
subplot(2,1,1);
plot(t,x);
title('原始信号');
xlabel('时间');
ylabel('幅值');
subplot(2,2,3);
plot(wpcoef(wpt_db,3));
title('小波包 db 基第3层系数');
xlabel('系数序号');
ylabel('系数值');
subplot(2,2,4);
plot(wpcoef(wpt_sym,3));
title('小波包 sym 基第3层系数');
xlabel('系数序号');
ylabel('系数值');
```
该代码首先生成了一个正弦信号,然后对其进行了小波包分解,分别使用了 db4 和 sym4 两种小波基。接着通过计算各分解层的系数相对于总系数的占比来衡量相位失真程度,并在最后绘制了分解到第三层的系数图以展示频带划分效果。
阅读全文