irpas技术客

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

网络投稿 6682

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

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 三、运行结果

四、matlab版本及参考文献

1 matlab版本 2014a

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

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


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #语音信号增强matlab