MATLAB小波阈值去噪与获取函数介绍

MATLAB中实现了信号的阈值去噪,主要包括阈值去噪和阈值获取两方面。

1.阈值获取
MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpenwwdcbm,下面对它们的用法进行简单的说明。

ddencmp的调用格式有以下三种:
(1)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)
(2)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,‘wp’,X)
(3)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,‘wv’,X)
函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。
输入参数X为一维或二维信号;
IN1取值为’den’或’cmp’,'den’表示进行去噪,‘cmp’表示进行压缩;
IN2取值为’wv’或’wp’,wv表示选择小波,wp表示选择小波包。
返回值THR是返回的阈值;
SORH是软阈值或硬阈值选择参数;
KEEPAPP表示保存低频信号;
CRIT是熵名(只在选择小波包时使用)。

函数thselect的调用格式如下:
THR=thselect(X,TPTR);
THR=thselect(X,TPTR)根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。
自适应阈值的选择规则包括以下四种:
*TPTR=‘rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。
*TPTR=‘heursure’,使用启发式阈值选择。
TPTR=‘sqtwolog’,阈值等于sqrt(2log(length(X))).
*TPTR=‘minimaxi’,用极大极小原理选择阈值。
阈值选择规则基于模型 y = f(t) + e,e是高斯白噪声N(0,1)。

函数wbmpen的调用格式如下:
THR=wbmpen(C,L,SIGMA,ALPHA);
THR=wbmpen(C,L,SIGMA,ALPHA)返回去噪的全局阈值THR。
THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。{C,L]是进行去噪的信号或图像的小波分解结构;
SIGMA是零均值的高斯白噪声的标准偏差;
ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般取ALPHA=2。
设t使crit(t)=-sum(c(k)^2,k<=t) + 2 * SIGMA^2 * t(ALPHA+log(n/t))的最小值,其中c(k)是按绝对值从大到小排列的小波包系数,n是系数的个数,则THR=|c(t*)|。
wbmpen(C,L,SIGMA,ALPHA,ARG)计算阈值并画出三条曲线。
2 * SIGMA^2 * t*(ALPHA+log(n/t))
sum(c(k)^2, k<=t)
crit(t)

wdcbm的调用格式有以下两种:
(1)[THR,NKEEP]=wdcbm(C,L,ALPHA);
(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M);
函数wdcbm是使用Birge-Massart算法获取一维小波变换的阈值。
返回值THR是与尺度无关的阈值,NKEEP是系数的个数。[C,L]是要进行压缩或消噪的信号在j=length(L)-2层的分解结构;
LAPHA和M必须是大于1的实数;
THR是关于j的向量,THR(i)是第i层的阈值;
NKEEP也是关于j的向量,NKEEP(i)是第i层的系数个数。
一般压缩时ALPHA取1.5,去噪时ALPHA取3.

2.信号的阈值去噪
MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。

函数wden的调用格式有以下两种:
(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,‘wname’)
(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,‘wname’)
函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。
THR为阈值选择规则:
*TPTR=‘rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。
*TPTR=‘heursure’,使用启发式阈值选择。
TPTR=‘sqtwolog’,阈值等于sqrt(2log(length(X))).
*TPTR=‘minimaxi’,用极大极小原理选择阈值。
SORH是软阈值或硬阈值的选择(分别对应’s’和’h’)。
SCAL指所使用的阈值是否需要重新调整,包含下面三种:
*SCAL=‘one’ 不调整;
*SCAL=‘sln’ 根据第一层的系数进行噪声层的估计来调整阈值。
*SCAL=‘mln’ 根据不同的噪声估计来调整阈值。
XD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。

函数wdencmp的调用格式有以下三种:
(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘gbl’,X,‘wname’,N,THTR,SORH,KEEPAPP);
(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,X,‘wname’,N,THTR,SORH);
(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,C,L,‘wname’,N,THTR,SORH);
函数wdencmp用于一维或二维信号的消噪或压缩。
wname是所用的小波函数,gbl(global的缩写)表示每一层都采用同一个阈值进行处理,lvd表示每层采用不同的阈值进行处理,N表示小波分解的层数,THR为阈值向量,对于格式(2)和(3)每层都要求有一个阈值,因此阈值向量THR的长度为N,SORH表示选择软阈值或硬阈值(分别取值为’s’和’h’),参数KEEPAPP取值为1时,则低频系数不进行阈值量化,反之,低频系数要进行阈值量化。XC是要进行消噪或压缩的信号,[CXC,LXC]是XC的小波分解结构,PERF0和PERFL2是恢复或压缩L2的范数百分比。如果[C,L]是X的小波分解结构,则PERFL2=100*(CXC向量的范数/C向量的范数)2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100||XC||2/||X||2。

函数wthresh的调用格式如下:
Y=wthresh(X,SORH,T)
Y=wthresh(X,SORH,T) 返回输入向量或矩阵X经过软阈值(如果SORH=‘s’)或硬阈值(如果SORH=‘h’)处理后的信号。T是阈值。
Y=wthresh(X,‘s’,T)返回的是Y=SIG(X)(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。
Y=wthresh(X,‘h’,T)返回的是Y=X
1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。

函数wthcoef的调用格式下面四种:
(1)NC=wthcoef(‘d’,C,L,N,P)
(2)NC=wthcoef(‘d’,C,L,N)
(3)NC=wthcoef(‘a’,C,L)
(4)NC=wthcoef(‘t’,C,L,N,T,SORH)
函数wthcoef用于一维信号小波系数的阈值处理。
格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。
格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。
格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。
格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=’s‘,则为软阈值;如果SORH='h’则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。

函数wpdencmp的调用格式有以下两种:
(1)[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,‘wname’,CRIT,THR,KEEPAPP)
(2)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,THR,KEEPAPP)
函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。
格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参数TREED是XD的最佳小波包分解树;PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||2/||X||^2。SORH的取值为’s’或’h’,表示的是软阈值或硬阈值。
输入参数N是小波包的分解层数,wname是包含小波名的字符串。函数使用由字符串CRIT定义的熵和阈值参数THR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。
格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩

转载链接: https://blog.csdn.net/weixin_43118131/article/details/89945747.

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是一个基于 MATLAB 的自适应小阈值的代码示例: ```matlab function [denoised_signal] = denoise_signal(signal, level) % signal: 待去的信号 % level: 小分解的层数 % 小分解 [c, l] = wavedec(signal, level, 'db4'); % 计算声标准差 sigma = median(abs(c)) / 0.6745; % 计算阈值 threshold = sigma * sqrt(2 * log(length(signal))); % 软阈值 for i = 1:level start_index = l(i) + 1; end_index = l(i + 1); c(start_index:end_index) = wthresh(c(start_index:end_index), 's', threshold); end % 小重构 denoised_signal = waverec(c, l, 'db4'); end ``` 这个函数接受一个待去的信号和小分解的层数作为输入,返回一个去后的信号。它使用了小分解和软阈值的方法,其中阈值是根据声标准差自适应计算的。 ### 回答2: matlab自适应小阈值是一种常用的信号处理技术,它能够有效地降低信号中的声。下面是一个示例代码: 1. 导入信号数据 ```matlab load noisySignal.mat % 假设导入的信号数据保存在noisySignal.mat文件中 signal = noisySignal; % 将信号数据保存在signal变量中 ``` 2. 对信号进行小分解 ```matlab level = 4; % 指定小分解的层数 [C, L] = wavedec(signal, level, 'db4'); % 使用db4小进行分解 ``` 3. 通过计算小系数的标准差估计声水平,并计算阈值 ```matlab sigma = median(abs(C))/0.6745; % 估计声的标准差 threshold = wthrmngr('dw1ddenoLVL', 'penalhi', sigma, level); % 根据声水平和小分解层数计算阈值 ``` 4. 对小系数进行软阈值 ```matlab denoisedC = wthresh(C, 's', threshold); % 对小系数进行软阈值 ``` 5. 重构信号 ```matlab denoisedSignal = waverec(denoisedC, L, 'db4'); % 使用db4小进行重构 ``` 6. 可选步骤:显示处理前后的信号图像 ```matlab subplot(2,1,1) plot(signal) title('原始信号') subplot(2,1,2) plot(denoisedSignal) title('去后的信号') ``` 这是一个简单的matlab自适应小阈值的代码示例。根据你的实际需求,你可能需要根据自己的信号数据自定义参数和调整代码。希望对你有帮助! ### 回答3: 自适应小阈值(Adaptive Wavelet Threshold Denoising)是一种常用于信号和图像处理的方法,用于去除声并恢复信号的原始特征。下面是一个简单的MATLAB代码示例,用于实现自适应小阈值: ```matlab % 1. 加载图像并添加声 originalImage = imread('input_image.jpg'); % 加载原始图像 noisyImage = imnoise(originalImage, 'gaussian', 0, 0.05); % 添加高斯声 % 2. 自适应小阈值 denoisedImage = zeros(size(noisyImage)); % 创建一个空数组,用于存储去结果 for i = 1:size(noisyImage, 3) % 对于彩色图像的每个通道 noisyChannel = noisyImage(:, :, i); % 获取当前通道的图像 [thr, sorh, keepapp] = ddencmp('den', 'wv', noisyChannel); % 通过Denoising Data Compression GUI获取阈值 denoisedChannel = wdencmp('gbl', noisyChannel, 'db4', 4, thr, sorh, keepapp); % 使用小函数进行去 denoisedImage(:, :, i) = denoisedChannel; % 将去结果存储到相应通道 end % 3. 显示结果 subplot(1, 2, 1); imshow(noisyImage); title('添加声的图像'); subplot(1, 2, 2); imshow(denoisedImage); title('去后的图像'); ``` 在上述代码中,首先加载原始图像并添加高斯声。然后,通过`ddencmp`函数获取中使用的阈值,并使用`wdencmp`函数对每个通道进行去。最后,使用`imshow`函数显示添加声的图像和去后的图像。 请注意,这仅仅是一个简单的示例代码,你可能需要根据你的实际情况进行调整和改进。同时,为了更好地使用自适应小阈值,你可能需要深入了解其原理以及其他相关参数的设置方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值