【滤波器】基于matlab时变维纳滤波器设计【含Matlab源码 1870期】

一、语音处理简介

语言是人们获得各类有效信息的主要途径, 而语音是语言的表现形式。语音在一定程度上可影响人们的生活, 因此, 语音信号的研究对科学领域和人们日常生活具有一定的研究价值和意义。噪声广泛存在于生活, 信号在传输过程中不可避免会受到各类噪声的干扰, 降低了信号的可读性, 因此对携带噪声的信号进行去噪处理十分必要。语音信号是一种特殊的信号, 其在传输过程中, 由于外界环境和设备的影响不可避免会被噪声干扰, 一定程度上影响了人们所接收信息的准确性。人们提出了各种语音去噪方法, 其中, 常用的有滤波器去噪法、小波分析去噪法以及小波包分析去噪法。

MATLAB是一种功能强大, 具有很好的交互性的数值计算和可视化计算高级语言, 其强大的矩阵运算, 数值分析以及信号处理功能使其广泛应用于众多科学领域中。因此作者使用MATLAB作为设计工具软件来进行语音信号去噪处理。

作者在MATLAB环境下应用滤波器去噪方法对加噪声的语音信号进行时域、频域的分析和滤波。通过MATLAB编程对语音信号被噪声污染进行仿真处理, 并对加噪声前后的频谱图进行对比;然后根据语音信号特点设计各类滤波器;最后将所设计的滤波器分别应用于含噪声的语音信号, 并对其频谱图进行对比分析, 确定最优化方法。

1 总体设计
利用MATLAB作为平台实现滤波和频谱分析, 主要分为语音信号采集、语音信号分析、语音信号加噪、滤波分析以及GUI设计五个模块, 系统框图如图1所示。
在这里插入图片描述
首先对采集的语音信号进行频谱分析, 然后对其进行加噪并对加噪后的信号进行频谱分析。而滤除噪声的方法选择了噪性能较好的滤波器方法, 即通过设计无限脉冲相应IIR滤波器来完成, 并利用这两种方法对加噪后的语音信号进行去噪处理, 然后从频域角度对结果进行了对比分析。最后为了加强程序的友好性和可视性, 采用GUI编程的方法来设计语音信号去噪系统用户界面。

2 语音信号采集和加噪
2.1 语音信号采集

文章利用PC机声卡对语音信号进行采集。PC机的声卡采样率一般在64 KHz以上, 即一秒钟可以采集64 000个声音样本。而人们正常的语音信号一般在300 Hz至34 000 Hz之间, 根据奈奎斯特采样定理, 一般的正常的语音信号均可以利用声卡采集并且保证其不失真。在安静环境下的正常交流可以近似为纯语音信号, 声音信号的长度最好控制在10 s内以便后期分析处理。

2.2 语音信号加噪
对已经获得的纯语音信号进行加噪处理来模拟在实际生活中语音信号被噪声污染的情况。利用MATLAB中的audioread函数把语音信号转换成序列, 得到信号信息;sound函数可以将采样序列通过声卡转换成声音, 可直观听出加噪前后的区别。高斯白噪声可用具体的数学表达式表示, 且可以贴近反映实际信道中的加性噪声的情况。

文章选择对语音信号加入高斯白噪声来模拟声音被污染的情况。利用MATLAB中的随机函数 (rand或randn) 产生符合高斯分布序列的噪声序列并将其加到语音信号中, 用来模拟语音信号被污染。通过对其频谱分析, 声音的回放可以很清楚的听出加噪前后的区别。也可以通过sound函数便可以听到加噪后的语音信号, 与原始语音信号相比, 声音刺耳根本不能分辨出原始语音信号。

3 语音信号去噪方法
对于语音去噪现在已经有一些比较成熟的方法, 如小波变换法, 小波包变换法, 以及滤波器法。利用小波的方法去噪设计过程相对繁琐, 因此, 选用滤波器方法来实现去噪功能。

3.1 IIR滤波器语音去噪
IIR滤波器一般有三种设计方法, 分别为:零极点位置累试法、利用模拟滤波器设计数字滤波器和最优化设计法。本文选用滤波器方法, 在设计IIR滤波器的时候可以借鉴经典的成熟的模拟滤波器, 如巴特沃斯滤波器、切比雪夫滤波器和椭圆滤波器等。文章将使用巴特沃斯低通滤波器来设计数字滤波器。

由原始语音信号及其加噪前后的频谱分析可知, 所设计滤波器应该要实现的功能是滤除掉出语音信号之外的噪声部分的频率, 根据要求给出技术指标如下:
低通滤波器的性能指标:fp=1 000 Hz, fs=1200 Hz, αs=50 db, αp=1 d B
高通滤波器的性能指标:fp=3 500 Hz, fs=4000 Hz, αs=50 d B, αp=1 d B
带通滤波器的性能指标:fp1=1 200 Hz, fp2=3 000 HZ, fs1=1 000 Hz, fs2=3 200 Hz, αs=100d B, αp=1 d B
其中fp表示通带截止频率;fs为阻带截止频率;αp表示最大通带衰减;αs表示最小阻带衰减。

当得出相关的技术指标后便可以利用经典滤波器来设计低通滤波器, 这里采用巴特沃斯滤波器来设计模拟低通滤波器, 并得到低通滤波器的系统函数, 即H (s) 。得到一个可以实现相关功能的模拟低通滤波器后将会采用频率变换的方法通过低通滤波器的系统函数变换出相关的高通、带通或带阻滤波器的系统函数。

二、部分源代码

% 时变维纳滤波器函数示例
%需要谱图matlab函数!
clear all
clc
close all
% 合成信号
% 采样频率 1 kHz
% 啁啾:从 50 Hz 开始,并在 10 秒时穿过 450 Hz,具有强 Gussian 背景噪声 (SNR -18 dB)

fs = 1000;
T = 10;
t=0:1/fs:T;
r=chirp(t,50,T,450);
L = length(r);
wnoise = 6 .* randn(size(r));
x = wnoise + r;

figure
spectrogram(r,256,250,256,1E3);
view(-45,65)
colormap bone
title('参考信号')


figure
subplot(1,2,1)
spectrogram(x,256,250,256,1E3);
view(-45,65)
colormap bone
title('噪声信号')

Lw = 256;
[xest,B,Nblocks] = ADwienerFilt(x,r,Lw);

subplot(1,2,2)
spectrogram(xest,256,250,256,1E3);
view(-45,65)
colormap bone
title('估计信号')

三、运行结果

【滤波器】基于matlab时变维纳滤波器设计【含Matlab源码 1870期】_第1张图片
【滤波器】基于matlab时变维纳滤波器设计【含Matlab源码 1870期】_第2张图片

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
[3]宋云飞,姜占才,魏中华.基于MATLAB GUI的语音处理界面设计[J].科技信息. 2013,(02)
[4]韩长军.基于MATLAB的语音信号去噪方法应用[J].辽东学院学报(自然科学版). 2017,24(01)

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

你可能感兴趣的:(Matlab完整代码,Matlab信号处理,代码事宜私信博主,matlab,语音识别,开发语言)