1-D 信号小波降噪函数 WDEN - Matlab 函数说明
1-D 信号小波降噪函数 WDEN
说明:
WDEN 函数用于执行一维信号的小波降噪。它通过对小波系数进行阈值处理来实现降噪。
语法:
[xd,cxd,lxd,thrs] = wden(in1,in2,in3,in4,in5,in6,in7)
参数:
in1: 输入信号或小波系数向量C或 MODWT 变换矩阵W。in2: 阈值选择规则,字符串类型,支持以下选项:- 'modwtsqtwolog': 使用最大重叠离散小波变换 (MODWT) 进行降噪,并使用 Donoho 和 Johnstone 的通用阈值和级别相关的阈值。
- 'rigrsure': 使用 Stein's 无偏风险原理。
- 'heursure': Stein's 无偏风险的启发式变体。
- 'sqtwolog': 使用 Donoho 和 Johnstone 的通用阈值和 DWT。
- 'minimaxi': 使用极小极大阈值。
in3: 阈值类型,字符串类型,'s' 代表软阈值,'h' 代表硬阈值。in4: 阈值重标度类型,字符串类型:- 'one': 不进行重标度。
- 'sln': 使用基于第一级系数的噪声估计进行重标度。
- 'mln': 使用级别相关的噪声估计进行重标度。
- 'mln' 是 MODWT 降噪唯一支持的选项。
in5: 小波变换的层数。in6: 小波名称,字符串类型,对于 MODWT 降噪,小波必须是正交小波。in7: 小波系数向量C的层数,仅用于 DWT 降噪。
输出:
xd: 降噪后的信号。cxd: 降噪后的 DWT 系数向量或 MODWT 变换矩阵。lxd: DWT 降噪的每层系数数量,仅用于 DWT 降噪。thrs: DWT 降噪的每层阈值。
示例:
% 例子 1: 使用 DWT 和 MODWT 对含有瞬态的正弦波信号进行降噪
N = 1000;
t = linspace(0,1,N);
x = 4*sin(4*pi*t);
x = x - sign(t - .3) - sign(.72 - t);
y = x+0.15*randn(size(t));
xdDWT = wden(y,'sqtwolog','s','mln',3,'db2');
xdMODWT = wden(y,'modwtsqtwolog','s','mln',3,'db2');
subplot(2,1,1)
plot(xdDWT), title('DWT 降噪'); axis tight;
subplot(2,1,2)
plot(xdMODWT), title('MODWT 降噪'); axis tight;
% 例子 2: 使用 Haar 小波对块状信号进行 DWT 和 MODWT 降噪
[x,xn] = wnoise('blocks',10,3);
xdMODWT = wden(xn,'modwtsqtwolog','s','mln',6,'haar');
xd = wden(xn,'sqtwolog','s','mln',6,'haar');
plot(x)
hold on
plot(xd,'r--')
plot(xdMODWT,'k-.')
legend('原始信号','DWT 降噪','MODWT 降噪')
hold off
norm(abs(x-xd),2), norm(abs(x-xd),Inf)
norm(abs(x-xdMODWT),2), norm(abs(x-xdMODWT),Inf)
阈值函数:
阈值函数在代码中体现为 thselect 函数,它根据给定的阈值选择不同的阈值规则。理论上可以加入自己的阈值函数,但需要注意与现有的阈值规则的兼容性和合理性。建议在参考现有阈值规则的基础上进行修改和扩展。
更多信息:
THSELECT函数MODWT函数WAVEDEC函数WDENCMP函数WFILTERS函数WTHRESH函数
原文地址: https://www.cveoy.top/t/topic/n9OH 著作权归作者所有。请勿转载和采集!