matlab小波包 信号去噪 完整代码
时间: 2025-05-24 12:12:18 浏览: 22
### MATLAB 中使用小波包变换进行信号去噪的完整代码
以下是基于小波包变换(Wavelet Packet Transform, WPT)在 MATLAB 中实现信号去噪的完整代码示例:
```matlab
% 清空工作区
clear;
clc;
% 生成测试信号并添加噪声
fs = 1000; % 采样率
t = (1:1000)/fs; % 时间向量
originalSignal = sin(2*pi*50*t) + sin(2*pi*120*t); % 原始信号
noisySignal = originalSignal + 0.7*randn(size(t)); % 添加高斯白噪声后的信号
% 显示原始信号和带噪信号
figure;
subplot(3,1,1);
plot(originalSignal, 'b');
title('Original Signal');
subplot(3,1,2);
plot(noisySignal, 'r');
title('Noisy Signal');
% 小波包分解
level = 3; % 分解层数
waveletName = 'sym5'; % 小波基函数名称
wpt = wpdec(noisySignal, level, waveletName); % 对信号进行小波包分解[^2]
% 计算最佳树结构(基于香农熵)
bestTree = besttree(wpt); % 寻找最优小波包分解树[^2]
plot(bestTree); % 绘制最佳树结构
% 应用阈值去噪
thrMethod = 'sqrtbal_sn'; % 阈值规则选择
keepApp = 0; % 是否保留近似系数(0表示不保留)
denoisedCoefficients = wdencmp('gbl', wpt, waveletName, thrMethod, [], keepApp); % 阈值去噪[^3]
% 重构信号
denoisedSignal = waverec(denoisedCoefficients, bestTree); % 根据最佳树重构信号[^2]
% 显示去噪后的信号
subplot(3,1,3);
plot(denoisedSignal, 'g');
title('Denoised Signal');
```
#### 关键说明
- **`wpdec` 函数**:用于执行小波包分解,输入参数包括待分解信号、分解层数以及所选用的小波基函数名[^2]。
- **最佳树寻找**:通过 `besttree` 函数自动计算适合当前信号的最佳小波包分解树结构,从而提升后续处理效率和精度。
- **阈值去噪**:利用 `wdencmp` 函数完成全局阈值设定下的信号去噪操作。其中,`'gbl'` 表明采用统一阈值应用于所有节点;而 `'sqrtbal_sn'` 则是一种推荐的阈值选取策略[^3]。
- **信号重构**:借助 `waverec` 函数依据已修改的小波包系数及对应的最佳树重新构建干净版本的目标信号[^2]。
---
###
阅读全文
相关推荐



















