1-D 小波降噪函数 WDEN:自动降噪和阈值选择
1-D 小波降噪函数 WDEN:自动降噪和阈值选择
function [xd,cxd,lxd,thrs] = wden(in1,in2,in3,in4,in5,in6,in7)
功能: 该函数使用小波变换进行一维信号的自动降噪,支持多种阈值选择规则和阈值估计方法,并提供 MODWT 和 DWT 两种降噪方式。
输入参数:
in1: 输入信号x或 DWT 系数c。in2: 阈值选择规则tptr,支持的选项有:- 'modwtsqtwolog': 使用最大重叠离散小波变换 (MODWT) 进行降噪,并使用 Donoho 和 Johnstone 的通用阈值和层级依赖阈值。
- 'rigrsure': 使用 Stein 的无偏风险原理。
- 'heursure': Stein 的无偏风险的启发式变体。
- 'sqtwolog': 使用 Donoho 和 Johnstone 的通用阈值,并使用 DWT。
- 'minimaxi': 使用极小极大阈值。
in3: 阈值处理类型sorh,可取值为 's' 或 'h'。in4: 阈值估计方法scal,可取值为:- 'one': 不进行重缩放。
- 'sln': 使用基于第一层系数的噪声估计进行重缩放。
- 'mln': 使用层级依赖的噪声估计进行重缩放。
- 'mln' 是 MODWT 降噪的唯一支持选项。
in5: 小波变换的层数n。in6: 小波函数名称w,对于 MODWT 降噪,w必须对应正交小波。in7: 仅当in1为x且tptr为 'modwtsqtwolog' 时需要输入,表示 MODWT 的变换矩阵W。
输出参数:
xd: 去噪后的信号。cxd: 去噪后的 DWT 或 MODWT 系数。lxd: 仅在使用 DWT 时返回,表示每一层的系数个数。thrs: 各层的阈值。
代码详解:
- 判断输入参数并进行错误检查。
- 如果
tptr为 'modwtsqtwolog',则调用modwtdenoise1D函数进行 MODWT 去噪,并直接返回结果。 - 对于 DWT 去噪,先进行小波分解,得到
c和l。 - 根据阈值估计方法,计算阈值的缩放系数
s。 - 对每一层的系数进行阈值处理,得到
cxd和thrs。 - 进行小波重构,得到去噪后的信号
xd,并返回结果。
示例:
% 示例 1:使用 DWT 和 MODWT 降噪一个包含 2 Hz 正弦波和瞬变的信号
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 小波和 MODWT 和 DWT 降噪一个块状信号
[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: 阈值选择函数。MODWT: 最大重叠离散小波变换。WAVEDEC: 小波分解函数。WDENCMP: 降噪性能比较函数。WFILTERS: 小波滤波器函数。WTHRESH: 阈值处理函数。
原文地址: https://www.cveoy.top/t/topic/nSCO 著作权归作者所有。请勿转载和采集!