【语音增强】多维谱自适应小波语音信号去噪【含Matlab源码 1972期】
创始人
2024-04-13 02:58:26
0

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

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


## ⛄三、运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/13ebf78b8bfa4f27ab0b8aada51d7225.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/98382c457d5b4f6992c8d157cef4ac10.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b579cc444a0041a99fc0e611a40d20ff.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/57b7a4e0eaa5484293ce6808ccdebda3.jpeg#pic_center)## ⛄四、matlab版本及参考文献
**1 matlab版本**
2014a**2 参考文献**
[1]张飞.基于小波包变换的自适应阈值语音去噪净化[J].电声技术. 2009,33(10)**3 备注**
简介此部分摘自互联网,仅供参考,若侵权,联系删除

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...