• 【语音增强】基于matlab多维谱自适应小波语音信号去噪【含Matlab源码 1972期】


    一、自适应小波语音信号去噪

    1 引言
    语音信号在传输过程中,容易受到环境噪声和其他语音的干扰,降低了语音通信质量,影响了语音处理系统工作。所以,语音的净化处理技术,在现代语音通信和数字音频广播系统中起到愈来愈重要的作用。小波变换具有良好的时频局部化分析特性,是处理语音这种非平稳时变信号的有效方法。但随着尺度的增大,正交小波基函数的空间分辨率愈高,其频率分辨率愈低。小波包具有随尺度增大而变宽的频谱窗口进一步分割变细的特性,能克服正交小波变换的不足,可对信号进一步分解,提高频率分辨率,是一种比多分辨分析更加精细的分解方法,具有更好的时频特性。因此,利用小波包变换去除信号中的噪声,实现更好的语音净化效果。

    2 小波包变换理论
    小波包变换在小波变换基础上进一步提出,可将小波变换没有细分的高频部分进一步分解,为信号提供了更精细的分析方法。对于有丰富高频分量的语音信号来说,小波包变换是理想的分析工具,克服了正交小波基的一个主要缺陷,即随着尺度的增大,相应的正交小波基函数的时间分辨率愈高,而其频率分辨率愈低。通过空间小波包分解,其实质是让信号通过高、低通滤波器,进行隔点采样,把信号逐层分解到不同频段。

    小波包分解公式为
    在这里插入图片描述
    小波包重构公式为
    在这里插入图片描述
    3 自适应阈值法去噪
    3.1 阈值法小波去噪

    首先对被噪声污染的语音信号f(t)进行离散序列小波变换,得到带有噪声的小波系数w(j,k),其中,j=0,1,2,…,N;k=0,1,2,…,N;然后用设定的阈值λ作为门限对小波系数进行处理,对低于λ的小波系数作为由噪声引起的,仅让超过λ的那些显著的小波系数来重构原始纯净语音信号s(t)。阈值法小波去噪处理框图如图1所示。
    在这里插入图片描述
    图1 阈值法小波去噪处理框图
    阈值法小波去噪因容易实现、计算量小,所以得到了广泛应用。Donoho和Johnstone提出的硬阈值和软阈值方法是目前最普遍的方法。硬阈值法采用式(3)的硬阈值函数进行阈值处理,软阈值法采用式(4)的软阈值函数进行阈值处理。
    在这里插入图片描述
    3.2 自适应阈值法
    Donoho的软阈值法虽然取得了不错的效果,但其基于正交小波基。笔者采用小波包分析的方法,并对其阈值选取进行了进一步研究。由信号的奇异性理论,白噪声具有负的奇异性,其幅度和稠密度随尺度的增大而减小,而信号则相反。因此阈值的选取不能单一,应能根据噪声情况自动调节阈值大小。笔者采用自适应阈值法来克服这种缺点,即下一时刻的阈值λ(k+1)等于现在时刻的阈值λ(k)减去一个扰动项,该扰动项正比于均方误差函数的梯度值Δλ,即
    在这里插入图片描述
    式中,α为步长,可根据精度选择。

    算法的关键时求出Δλ(k),可设一个关于观测值Y的函数
    在这里插入图片描述
    在这里插入图片描述
    由式(10)可看出,如采用常用的硬阈值或软阈值函数,由于导数不连续甚至没有导数,无法进行自适应迭代,当然也无法得到最佳阈值。为获得最佳阈值,实现更好的去噪效果,应采用具有连续导数的阈值函数。阈值函数,即
    在这里插入图片描述
    这种阈值函数的好处是:当|x|非常接近阈值λ时,不会直接将小于阈值的小波系数置零,而是渐近为零;在|x|≥λ内,该函数对小波系数采取的是缓变地压缩,这样做符合对大于阈值的小波系数的处理,能较好地处理有用信号中存在的噪声分量。

    二、部分源代码

    clear all; close all; clc;
    
    % Audio acquisition
    [file,path] = uigetfile('./Databases/*.wav', 'Select the speech files', 'MultiSelect', 'on'); 
    [audio_signal,fs] = audioread([path,file]);
    Fs = fs; N = 1024; seqAxis = 0:1:N-1; step = 0;
    
    audio_signal = audio_signal.'/max(abs(audio_signal));
    audio_signal = cat(2,zeros(1,N),audio_signal);
    
    % Additive noise + filtering @8KHz
    noise = randn(1,length(audio_signal));
    nsVar = 0.05;
    noise = nsVar * noise/max(abs(noise));
    
    Hd = mylowpass;
    audio_noisy = audio_signal + noise;
    audio_noisy = filter(Hd,audio_noisy);
    
    % SNR values 
    Pa = bandpower(audio_signal);
    Ps = bandpower(audio_noisy);
    Pn = bandpower(noise);
    SNR = 10*log10(Pa/Pn);
    
    % Window choice and preparation
    h = hann(N); % Hanning
    %h = hamming(N); % Hamming
    h = h'; weight = sum(abs(h.^2));
    
    % Wiener Filter parameters
    umax = 10; u0 = (1+4*umax/5); z = 25/(umax-1);
    
    %% MTS: Sine Tapers + Noise estimation
    
    m = 0:N-1; L = 5; l = 1:L;
    a = sqrt(2/(N+1)).*sin((pi * l' * (m+1))/(N+1));
    
    figure(1); clf
    set(gcf,'Name','Sine tapers')
    S_k_n = 0.0;
    
    for currentTaper = 1:L
        S_k_n = S_k_n + abs(fft(a(currentTaper,:) .* audio_noisy(1:N))).^2;
        plot(a(currentTaper,:));
        hold on
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    三、运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1]张飞.基于小波包变换的自适应阈值语音去噪净化[J].电声技术. 2009,33(10)

    3 备注
    简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 相关阅读:
    二、鼎捷T100总账管理之核算项管理篇
    VAE原理及代码实现
    SpringBoot+Vue+Element-UI实现家具商城系统
    8、Linux 网络编程
    如何创建Maven项目
    推荐5款各种原因导致很少人知道的小软件
    智能晾衣架丨以科技解放双手
    Jmeter组件作用域及执行顺序
    Redis客户端Lettuce深度分析介绍
    292.Nim游戏 | 877.石子游戏 | 319.灯泡开关
  • 原文地址:https://blog.csdn.net/TIQCmatlab/article/details/125811602