1-D 信号的小波降噪函数 wden
1-D 信号的小波降噪函数 wden
XD = WDEN(X,TPTR,SORH,SCAL,N,WNAME) 返回输入信号 X 的降噪版本 XD,该版本通过对小波系数进行阈值处理获得。
TPTR 是阈值选择规则,以字符串形式指定。支持的 TPTR 选项包括:
'modwtsqtwolog'使用最大重叠离散小波变换 (MODWT) 对信号进行降噪,并使用 Donoho 和 Johnstone 的通用阈值和级别相关的阈值处理。- 其余的
TPTR选项使用临界采样 DWT 对信号进行降噪:'rigrsure'使用 Stein 的无偏风险原理。'heursure'是 Stein 的无偏风险的一种启发式变体。'sqtwolog'使用 Donoho 和 Johnstone 的通用阈值,并使用 DWT。'minimaxi'使用极小极大阈值处理。
SORH 指定软阈值或硬阈值,分别使用 's' 或 'h'。
SCAL 定义阈值重标定类型:
'one'不进行重标定。'sln'使用基于第一级系数的噪声估计进行重标定。'mln'使用级别相关的噪声估计进行重标定。'mln'是 MODWT 降噪唯一支持的选项。
N 是小波变换的级别,WNAME 是以字符串形式指定的小波。对于 MODWT 降噪,WNAME 必须对应于正交小波。
XD = wden(C,L,TPTR,SORH,SCAL,N,WNAME) 返回通过对 DWT 系数向量 C 和每个级别的 DWT 系数数量 L 进行操作获得的降噪信号。C 和 L 是 WAVEDEC 的输出。在 WAVEDEC 和 WDEN 中必须使用相同的小波。
XD = wden(W,'modwtsqtwolog',SORH,'mln',N,WNAME) 返回通过对 MODWT 变换矩阵 W 进行操作获得的降噪信号。W 是 MODWT 的输出。在 MODWT 和 WDEN 中必须使用相同的小波。
[XD,CXD] = WDEN(...) 返回降噪的小波系数。对于 DWT 降噪,CXD 是一个向量(参见 WAVEDEC)。对于 MODWT 降噪,CXD 是一个具有 N+1 行的矩阵(参见 MODWT)。列数等于输入信号 X 的长度。
[XD,CXD,LXD] = WDEN(...) 返回每个级别的系数数量,用于 DWT 降噪。有关详细信息,请参阅 WAVEDEC 的帮助文档。LXD 输出不支持 MODWT 降噪。
[XD,CXD,LXD,THR] = WDEN(...) 返回每个级别的降噪阈值,用于 DWT 降噪。
[XD,CXD,THR] = WDEN(...) 返回每个级别的降噪阈值,用于 MODWT 降噪,当您指定 'modwtsqtwolog' 时。
示例 1:
- 对包含 2 Hz 正弦波和在 0.3 秒和 0.72 秒处的瞬变的信号进行降噪。使用 Donoho 和 Johnstone 的通用阈值,并使用级别相关的噪声估计。使用 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 Denoising'); axis tight;
subplot(2,1,2)
plot(xdMODWT), title('MODWT Denoising'); axis tight;
示例 2:
- 使用 Haar 小波对块状信号进行降噪,使用 MODWT 和 DWT 降噪。比较原始信号与降噪版本之间的 L2 范数和 L-infty 范数。
[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('Original','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。
注意:
阈值函数在该函数内部实现,无法直接插入自己设定的阈值函数。如果需要使用自己设定的阈值函数,可以参考该函数的源代码,自行修改实现。thselect 函数是 Wavelet Toolbox 中的函数,可以在 MATLAB 命令窗口输入“help thselect”查看该函数的帮助文档。
原文地址: https://www.cveoy.top/t/topic/n9PR 著作权归作者所有。请勿转载和采集!