让我们考虑以下代码
>> fs=100;
>> N=1000;
>> t=0:1/fs:N-1;
>> y=10*sin(2*pi*100*t)+0.5*randn(size(t));
>> plot(y)
>> plot(t,y)
>>
我已应用以下阈值方法 thr = 0.4;
%执行硬阈值处理。 ythard = wthresh(y,' h',thr);
但我无法看到任何差异,也有软阈值方法,代码就在那里
ythard = wthresh(y,'h',thr);
>> plot(ythard)
>> ytsoft = wthresh(y,'s',thr);
>> plot(ytsoft)
那有什么不对吗?我也没有计算小波系数的阈值时间时间域,它们是否相等?我的意思是如果我将生成小波系数和阈值这个系数,它们会给我相同的结果吗?谢谢预先
答案 0 :(得分:4)
wthresh函数会将低于阈值的所有值设置为零。看起来您的大部分信号都高于0.4,所以效果不大。这是(硬)阈值为1.3时的样子:
小波变换类似于窗口傅里叶变换。它将输入信号分成子信号,子信号基本上是原始信号的不同频率分量的表示。其优点是它可以保留基于时间的信息,并且可以自适应数据。然后可以对这些子信号进行阈值处理并将其重新组合在一起以获得原始频率的目标去噪(与基于幅度的阈值处理相反)。所以,回答你的问题,不,他们不会是一样的。
这是一个非常大的话题,它可能需要一些时间来包围它。我建议启动here以了解小波部分和here以获取Matlab中小波的入门。 Here是关于降噪的一个很好的记录,但我强烈建议首先在理论上获得良好的基础。
小波去噪可能非常挑剔,并且有许多参数可供试验。例如,使用哪种小波,使用哪种阈值策略,分解到多少级别等等。基本上你需要经常使用它。
快速实施它的最简单方法是使用wden
。这是一个从docs取消的例子:
% Set signal to noise ratio and set rand seed.
snr = 3; init = 2055615866;
% Generate original signal and a noisy version adding
% a standard Gaussian white noise.
[xref, x] = wnoise(3, 11, snr, init);
% De-noise noisy signal using soft heuristic SURE thresholding
% and scaled noise option, on detail coefficients obtained
% from the decomposition of x, at level 5 by sym8 wavelet.
lev = 5;
xd = wden(x, 'heursure', 's', 'one', lev, 'sym8');
% Plot signals.
subplot(611), plot(xref), axis([1 2048 -10 10]);
title('Original signal');
subplot(612), plot(x), axis([1 2048 -10 10]);
title(['Noisy signal - Signal to noise ratio = ',...
num2str(fix(snr))]);
subplot(613), plot(xd), axis([1 2048 -10 10]);
title('De-noised signal - heuristic SURE');
结果: