【语音去噪】基于matlab小波硬阈值语音降噪【含Matlab源码 532期】

一、简介

通常情况下, 我们在从设备上采集到的信号都是具有一定的噪声的,大多数情况下,可认为这种噪声为高斯白噪声。被噪声污染的信号=干净的信号+噪声。

为什么要使用阈值:由于信号在空间上(或者时间域)是有一定连续性的,因此在小波域,有效信号所产生的小波系数其模值往往较大;而高斯白噪声在空间上(或者时间域)是没有连续性的,因此噪声经过小波变换,在小波阈仍然表现为很强的随机性,通常仍认为是高斯白噪的。那么就得到这样一个结论:在小波域,有效信号对应的系数很大,而噪声对应的系数很小。 刚刚已经说了,噪声在小波域对应的系数仍满足高斯白噪分布。如果在小波域,噪声的小波系数对应的方差为 sigma,那么根据高斯分布的特性,绝大部分(99.99%)噪声系数都位于[-3sigma,3sigma]区间内(切比雪夫不等式, 3sigma准则)。因此,只要将区间[-3sigma,3sigma]内的系数置零(这就是常用的硬阈值函数的作用),就能最大程度抑制噪声的,同时只是稍微损伤有效信号。将经过阈值处理后的小波系数重构,就可以得到去噪后的信号。 常用的软阈值函数,是为了解决硬阈值函数 “一刀切” 导致的影响(模小于3sigma的小波系数全部切除,大于3sigma全部保留,势必会在小波域产生突变,导致去噪后结果产生局部的抖动,类似于傅立叶变换中频域的阶跃会在时域产生拖尾)。软阈值函数将模小于 3sigma 的小波系数全部置零,而将模大于 3sigma 的做一个比较特殊的处理,大于 3sigma 的小波系数统一减去 3sigma,小于 -3sigma 的小波系数统一加 3sigma。经过软阈值函数的作用,小波系数在小波域就比较光滑了,因此用软阈值去噪得到的图象看起来很平滑,类似于冬天通过窗户看外面一样,像有层雾罩在图像上似的。

比较硬阈值函数去噪和软阈值函数去噪:硬阈值函数去噪所得到的峰值信噪比(PSNR)较高,但是有局部抖动的现象;软阈值函数去噪所得到的 PSNR 不如硬阈值函数去噪,但是结果看起来很平滑,原因就是软阈值函数对小波系数进行了较大的 “社会主义改造”,小波系数改变很大。因此各种各样的阈值函数就出现了,其目的我认为就是要使大的系数保留,小的系数被剔出,而且在小波域系数过渡要平滑。
如何估计小波域噪声方差 sigma 的估计,这个很简单:把信号做小波变换,在每一个子带利用 robust estimator 估计就可以(可能高频带和低频带的方差不同)。 robust estimator 就是将子带内的小波系数模按大小排列,然后取最中间那个,然后把最中间这个除以0.6745 就得到噪声在某个子带内的方差 sigma。利用这个 sigma,然后选种阈值函数,就可以去去噪了,在 matlab 有实现 api 可使用。
在这里插入图片描述
在小波分析中经常用到近似和细节,近似表示信号的高尺度,即低频信息;细节表示信号的低尺度,即高频信息。对含有噪声的信号,噪声分量的主要能量集中在小波解的细节分量中。
在以上过程中,小波基和分解层数的选择,阈值的选取规则,和阈值函数的设计,都是影响最终去噪效果的关键因素。
确定了高斯白噪声在小波系数(域)的阈值门限之后,就需要有个阈值函数对这个含有噪声系数的小波系数进行过滤,去除高斯噪声系数,常用的阈值函数有软阈值和硬阈值方法,很多文献论文中也有在阈值函数进行一些大量的改进和优化。
在这里插入图片描述

二、源代码

clear all; clc; close all;

[xx, fs] = wavread('C5_4_y.wav');           % 读入数据文件
xx=xx-mean(xx);                         % 消除直流分量
x=xx/max(abs(xx));                      % 幅值归一化
N=length(x);
%-------------------------加入指定强度的噪声---------------------------------
SNR=5;
s=awgn(x,SNR,'measured','db');               % 叠加噪声
wname='db7';

jN=6;  %分解的层数
snrs=20*log10(norm(x)/norm(s-x));
signal=Wavelet_Hard(s,jN,wname);
signal=signal/max(abs(signal));
snr1=SNR_Calc(x,s);            % 计算初始信噪比
snr2=SNR_Calc(x,signal);            % 计算降噪后的信噪比
snr=snr2-snr1;
fprintf('snr1=%5.4f   snr2=%5.4f   snr=%5.4f\n',snr1,snr2,snr);
% 作图
time=(0:N-1)/fs;                        % 设置时间
subplot 311; plot(time,x,'k'); grid; axis tight;
title('纯语音波形'); ylabel('幅值')
subplot 312; plot(time,s,'k'); grid; axis tight;
%小波硬阈值函数
function signal=Wavelet_Hard(s,jN,wname)
[c,l]=wavedec(s,jN,wname);
%高频分量的索引
first = cumsum(l)+1;
first1=first;
first = first(end-2:-1:1);
ld   = l(end-1:-1:2);
last = first+ld-1;
%--------------------------------------------------------------------------
%硬阈值
cxdhard=c;
for j=1:jN                                      %j是分解尺度
    flk = first(j):last(j);                      %flk是di在c中的索引
    thr(j)=sqrt(2*log((j+1)/j))*median(c(flk))/0.6745;
    for k=0:(length(flk)-1)                 %k是位移尺度
        djk2=c(first(j)+k);
        absdjk=abs(djk2);
        thr1=thr(j);
        %阈值处理
       if absdjk<thr1
           djk2=0;
       end 

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ 1564658423
往期回顾>>>>>>
【特征提取】基于matlab小波变换的音频水印嵌入提取【含Matlab源码 053期】
【语音处理】基于matlab GUI语音信号处理【含Matlab源码 290期】
【语音采集】基于matlab GUI语音信号采集【含Matlab源码 291期】
【语音调制】基于matlab GUI语音幅度调制【含Matlab源码 292期】
【语音合成】基于matlab GUI语音合成【含Matlab源码 293期】
【语音加密】基于matlab GUI语音信号加密解密【含Matlab源码 295期】
【语音增强】基于matlab小波变换的语音增强【含Matlab源码 296期】
【语音识别】基于matlab GUI语音基频识别【含Matlab源码 294期】
【语音增强】基于matlab GUI维纳滤波之语音增强【含Matlab源码 298期】
【语音处理】基于matlab GUI语音信号处理【含Matlab源码 299期】
【信号处理】基于matlab的语音信号频谱分析仪【含Matlab源码 325期】
【调制信号】基于matlab GUI数字调制信号仿真【含Matlab源码 336期】
【情感识别】基于matlab BP神经网络的语音情感识别【含Matlab源码 349期】
【语音隐写】基于matlab小波变换的量化音频数字水印【含Matlab源码 351期】
【特征提取】基于matlab音频水印嵌入与提取【含Matlab源码 350期】
【语音去噪】基于matlab低通和自适应滤波去噪【含Matlab源码 352期】
【情感识别】基于matlab GUI语音情感分类识别【含Matlab源码 354期】
【基础处理】基于matlab语音信号的预处理【含Matlab源码 364期】
【语音识别】基于matlab 傅立叶变换0-9的数字语音识别【含Matlab源码 384期】
【语音识别】基于matlab GUI DTW的0-9数字语音识别【含Matlab源码 385期】
【语音播放】基于matlab GUI MP3设计【含Matlab源码 425期】
【语音处理】基于人耳掩蔽效应的语音增强算法信噪比计算【含Matlab源码 428期】
【语音去噪】基于matlab谱减法去噪【含Matlab源码 429期】
【语音识别】基于matlab带动量项的BP神经网络语音识别【含Matlab源码 430期】
【语音隐写】基于matlab LSB语音隐藏【含Matlab源码 431期】
【语音识别】基于matlab男女声识别【含Matlab源码 452期】
【语音处理】基于matlab语音加噪和降噪处理【含Matlab源码 473期】
【语音去噪】基于matlab最小二乘法(LMS)自适应滤波器【含Matlab源码 481期】
【语音增强】基于matlab谱减法、最小均方和维纳滤波语音增强【含Matlab源码 482期】
【通信】基于matlab GUI数字频带(ASK、PSK、QAM)调制仿真 【含Matlab源码 483期】
【信号处理】基于matlab心电信号ECG滤波处理【含Matlab源码 484期】
【语音播报】基于matlab语音播报【含Matlab源码 507期】
【信号处理】基于matlab小波变换脑电信号特征提取【含Matlab源码 511期】
【语音处理】基于matlab GUI双音多频(DTMF)信号检测【含Matlab源码 512期】
【语音隐写】基于matlab LSB实现语音信号的数字水印【含Matlab源码 513期】
【语音增强】基于matlab匹配滤波器的语音识别【含Matlab源码 514期】
【语音处理】基于matlab GUI语音时域频域频谱图分析【含Matlab源码 527期】
【语音去噪】基于matlab LMS、RLS算法语音去噪【含Matlab源码 528期】
【语音去噪】基于matlab LMS谱减法语音去噪【含Matlab源码 529期】
【语音去噪】基于matlab 软阈值、硬阈值、折中阈值语音去噪【含Matlab源码 530期】
【语音识别】基于matlab特定人的语音识别分辨【含Matlab源码 534期】
【语音去噪】基于matlab小波软阈值语音降噪【含Matlab源码 531期】

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/114876490