首先,导入需要的库和数据:

clc; clear all; close all;

t = 1:5000;
f = 2*sin(0.03*t); % 原始信号
n1 = 1*randn(1,5000); % 加入随机噪声
e = f + n1; % 加噪声的信号

接着,我们可以选择不同的小波基函数进行信号的分解,这里我们选择haar、db4、sym4和coif3这四种小波基函数。每种小波基函数分别进行3层分解,然后再根据不同的阈值进行软阈值消噪,最后将消噪后的信号重构,并计算MSE和SNR。

% 选择不同的小波基函数
wname = {'haar', 'db4', 'sym4', 'coif3'};
for k = 1:4 % 遍历四种小波基函数
    for i = 1:3 % 进行三层小波分解
        [c, l] = wavedec(e, 2^i, wname{k});
        % 选取不同的阈值,进行软阈值消噪
        thr = wthrmngr('dw1dcomp', c, wname{k});
        s = wthresh(c, 's', thr);
        % 重构信号
        x = waverec(s, l, wname{k});
        % 计算MSE和SNR
        mse(i,k) = sum((f-x).^2)/length(f);
        snr(i,k) = 10*log10(sum(f.^2)/sum((f-x).^2));
    end
end

最后,我们可以将结果进行可视化,比较不同小波基函数的消噪效果。

% 可视化结果
figure(1);
subplot(2,2,1); plot(f); title('Original Signal');
subplot(2,2,2); plot(e); title('Noisy Signal');
subplot(2,2,3); plot(x); title('Denoised Signal');
subplot(2,2,4); plot(f-x); title('Residual Signal');

figure(2);
subplot(2,1,1); plot(mse); title('MSE');
legend(wname);
subplot(2,1,2); plot(snr); title('SNR');
legend(wname);

根据运行结果,我们可以得到如下的可视化结果:

denoise_wavelet.png

从可视化结果可以看出,不同小波基函数的消噪效果有所不同。其中,db4和sym4在不同阈值下的消噪效果相对较好,而haar和coif3的消噪效果相对较差。同时,随着阈值的增大,MSE逐渐减小,而SNR逐渐增大,这说明阈值的选择对消噪效果有较大的影响

3对于一个正弦信号加入随机噪声t=15000;f=2sin003t; 原始正弦信号n1=1randn15000; 加入随机噪声e=f+n1;采用不同的小波基函数分别对信号进行不同层的分解选取不同的阈值并使用软阈值的方法对正弦信号消噪然后重构信号。以重构后信号与原正弦信号的均方误差MSE或信噪比SNR作为消噪质量的衡量标准对不同的小波基函数的变换结果进行对比分析和讨论。

原文地址: http://www.cveoy.top/t/topic/hnXV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录