基于matlab的语音信号滤波去噪.docx
- 文档编号:6480526
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:18
- 大小:75.19KB
基于matlab的语音信号滤波去噪.docx
《基于matlab的语音信号滤波去噪.docx》由会员分享,可在线阅读,更多相关《基于matlab的语音信号滤波去噪.docx(18页珍藏版)》请在冰豆网上搜索。
基于matlab的语音信号滤波去噪
2013届本科生毕业设计
题目:
基于matlab声音信号的滤波去噪处理
作者姓名:
柯运生
学号:
**********
院(系):
机械与电子工程学院
专业:
电子信息工程
指导教师:
邵毅蒋明曦
指导教师职称:
讲师工程师
2013年4月8日
SuZhouCollege
Year2013BachelorGraduationDesign
Title:
BasedonMatlabVoiceSignalFilteringDenoisingProcessing
Author:
KeYunsheng
StudentID:
2009080313
Department:
CollageofMechanicalandElectronicEngineering
Major:
ElectronicandInformationEngineering
Instructor:
ShaoYiJiangMingxi
ProfessionalTitle:
LectureEngineer
April8th,2013
摘要
在数字信号处理中,滤波器的设计占有极其重要的地位。
而其中,FIR数字滤波器和IIR数字滤波器是重要组成部分。
Matlab具有功能强大、简单易学、编程效率高等特点,深受广大科技工作者的喜爱。
特别是Matlab中还具有信号分析工具箱,所以对于使用者,不需要具备很强的编程能力,就可以方便地进行信号分析、处理和设计。
利用Matlab中的信号处理工具箱,可以快速有效的设计各种数字滤波器。
本论文基于Matlab语音信号处理的设计与实现,综合运用数字信号处理的相关理论知识,对加噪声语音信号进行时域、频域分析并滤波。
而后通过理论推导得出相应结论,再利用Matlab作为编程工具进行计算机实现工作。
在设计实现的过程之中,使用巴特沃斯、切比雪夫和双线性变法设计IIR数字滤波器,使用窗函数法来设计FIR数字滤波器,并利用Matlab作为辅助工具,完成设计中的计算与图形的绘制。
通过对所设计滤波器的仿真和频率特性的分析可知,利用Matlab信号处理工具箱,可以快捷有效地设计FIR和IIR数字滤波器,过程简单、方便,结果的各项性能指标也均达到指定要求。
关键字:
Matlab;滤波器;IIR;FIR
ABSTRACT
Indigitalsignalprocessing,filterdesignoccupiesanextremelyimportantposition.Andamongthem,theFIRdigitalfilterandIIRdigitalfilterisanimportantpart.Matlabhaspowerfulfunction,easytolearn,programmingefficiencyhighercharacteristic,andwasdeeplylovedbythemassesofscientificandtechnicalworkers.EspeciallyalsohassignalanalysistoolboxinMatlab,soforusers,don'tneedtohavestrongprogrammingability,canbeeasilysignalanalysis,processinganddesign.SignalprocessingtoolboxofMatlab,canbeusedtoquicklyandefficientlydesignallkindsofdigitalfilter.InthispaperthedesignandimplementationofspeechsignalprocessingbasedonMatlab,theintegrateduseoftherelevanttheoreticalknowledgeofdigitalsignalprocessing,toaddnoisespeechsignalintimedomain,frequencydomainanalysisandfiltering.Andthencorrespondingconclusionthroughtheoreticalderivation,usingMatlabasaprogrammingtoolforcomputerimplementationwork.Implementationinthedesignprocess,usingbutterworth,chebyshevandbilinearreformIIRdigitalfilterdesign,windowfunctionmethodusedtodesignFIRdigitalfilter,andbyusingtheMatlabasanauxiliarytool,tocompletethedesignofcomputingandgraphicsdrawing.ThroughasimulationofthedesignedfilterandfrequencycharacteristicanalysisshowsthatusingtheMatlabsignalprocessingtoolbox,canquicklyandeffectivelytodesignFIRandIIRdigitalfilter,theprocessissimple,convenient,andtheresultsofvariousperformanceindicatorsmeetthespecifiedrequirements.
Keywords:
Matlab;Filter;IIR;FIR
绪论
语音信号的采集与分析技术的应用和发展与语音学、声音测量学、电子测量技术以及数字信号处理等学科紧密联系,同时也是一门涉及面很广的交叉学科。
语音是人类获取信息的重要来源,是利用信息的重要手段。
由于实验条件或各种其他主、客观条件的限制,在信号的传输过程中,语音处理系统都不可避免地要会受到各种噪声的干扰。
噪声不仅降低了语音的可懂度,破坏了语音质量,而且还将会导致系统性能的急剧恶化,严重时会使整个系统无法正常工作。
Matlab是由美国Mathworks公司发布的一款软件,该软件主要面对的是科学计算、可视化以及交互式程序设计的高科技计算环境。
它具有数值分析、矩阵计算、非线性动态系统的建模和仿真以及科学数据可视化等功能。
它被集成在一个易于使用的视窗环境下,为工程设计、科学研究以及其它一些必须进行有效数值计算的众多科学领域提供了一种全面有效的解决方案。
它在很大程度上摆脱了传统的其它编程语言的限制,如C语言、Fortran语言的编辑模式,代表了当今国际科学计算软件的先进水平。
其强大的数据处理能力可以极大程度上削弱噪声影响,其还原出的真实的语音信号相符度一般都在90%以上。
数字滤波器和快速傅立叶变换(FFT)等是语音信号数字处理的理论和技术基础,是20世纪60年代形成的一系列数字信号处理的理论和算法。
随着信息科学技术的快速发展,语音信号处理技术也相应取得了重大的进展:
进入70年代之后,出现了很多新兴技术,其中语音信号的信息压缩和特征提取的线性预测技术(LPC)作用日益突出,逐渐在数字信号处理领域占据统治地位,并广泛应用于语音信号的分析、合成及其他各个应用领域。
进入80年代后,一种新的技术:
基于聚类分析的高效数据压缩技术—矢量量化(VQ),被应用到语音信号处理领域之中;而随着隐马尔可夫模型(HMM)描述语音信号过程的产生,80年代语音信号处理技术也随之发生了重大的发展。
目前,HMM已构成了现代语音识别研究的重要基石。
进入21世纪之后,人工神经网络,也即是人们所称的ANN的研究,取得了快速发展,语音信号处理的各项研究的发展是促进其进步的重要源泉之一,他的各项成果也体现在语音信号处理的各项技术之中。
本论文主要介绍的是语音信号的简单处理。
由于语音信号的处理有很多种类,本论文仅针对滤波处理去噪这一范围,运用数字信号处理所学基本原理,以实现语音信号的处理,在Matlab7.0环境下综合运用信号提取,幅频变换以及傅里叶变换、滤波等技术来进行语音信号滤波去噪。
我所做的工作就是运用Matlab软件,在其上编写几个处理语音信号的程序,能对语音信号进行采集,并对其进行各种处理,达到简单的语音信号处理的目的。
硬件环境:
(1)处理器:
InterPentiumB950
(2)内存:
2G(3)硬盘空间:
460G
(4)显卡:
NVIDIAGeForceGT520
开发环境:
(1)操作系统:
Windows7(64位旗舰版)
(2)开发环境:
Matlab7.0
基本方法步骤:
(1)语音信号的录制。
(2)在Matlab平台上读入语音信号。
(3)绘制频谱图并回放原始语音信号。
(4)利用Matlab编程加入一段正弦波噪音,设计滤波器去噪。
(5)利用Matlab编程加入一段随机噪音信号,设计FIR和IIR滤波器去噪,并分别绘制频谱图、回放语音信号。
(6)通过仿真后的图像以及对语音信号的回放,对比两种去噪方式的优缺点。
具体流程图如下所示:
图1论文设计流程
1语音信号处理的基本知识
1.1语音的录入和打开
在Matlab中,[y,fs,bits]=wavread('Blip',[N1N2]),用于读取语音信号,采样值放在向量y中。
fs表示采样频率(Hz),bits表示采样位数。
[N1N2]表示读取从N1点到N2点的值。
若只有一个N的点,则表示读取前N点的采样值。
sound(x,fs,bits)该函数的作用是用于对声音进行回放。
向量x是一个复杂的“函数表达式”,代表了一个信号,可以像处理一个信号表达式一样处理这个声音信号。
1.2采样位数和采样频率
所谓采样位数,也即是采样值或取样值,一般是用来衡量声音波动变化的参数。
指的是声卡在采集和播放声音文件时,所使用的数字声音信号的二进制位数。
采样频率,则是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高,则声音的还原就越真实,越自然。
对于音频接口来说,采样位数和采样率是最为重要的两个指标,也是选择音频接口的两个重要标准。
单从理论上来说,无论采样频率如何,采样的位数决定了音频数据最大的力度范围。
每增加一个采样位数,则相当于力度范围增加了6dB。
采样位数越多,则捕捉到的信号就会越精确。
对于采样率来说,你可以想象它类似于一个照相机,40kHz则意味着当音频流进入计算机时,计算机每秒会对其拍照达40000次。
显然采样率越高,计算机摄取的图片会越多,对于原始音频的还原也将会更加精确。
1.3时域信号FFT分析
FFT,即快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换DFT的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进而后获得的。
在Matlab的信号处理工具箱中,函数FFT和IFFT用于快速傅立叶变换及其逆变换。
函数FFT用于序列快速傅立叶变换,其调用格式为:
y=fft(x)。
其中x是序列,y是相应序列的FFT。
x可以为一向量,也可以是矩阵。
若x为一向量,y则是x的FFT,且和x相同长度;若x为矩阵,y则是对矩阵的每一列向量进行FFT。
若x长度是2的幂次方,函数fft将执行高速基-2FFT算法,否则fft执行的是一种混合基的离散傅立叶变换算法,计算速度相对较慢。
函数FFT的另一种调用格式为:
y=fft(x,N),该式中,x,y意义同前,N为正整数。
函数执行N点FFT,若x为向量且长度小于N,则函数将将使x补零至长度N。
若向量x的长度大于N,则函数会截短x使之长度为N。
若x为矩阵,则按相同方法对x进行处理。
1.4数字滤波器设计原理
数字滤波器的作用是利用离散时间系统的特性,对输入信号波形(或频谱)进行加工与处理,或者说利用数字方法,按预定的要求对信号进行变换。
可以将数字滤波器理解为一个算法或者程序,将代表输入信号的数字时间序列,转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。
数字滤波器有多种,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,一种是无限长冲激响应(IIR)滤波器,另外一种则是有限长冲激响应(FIR)滤波器。
从性能上说,IIR滤波器传输函数的极点可位于单位圆内的任何地方,因此可用于较低的阶数,以获得高的选择性,所用的存贮单元少,所以经济且效率较高。
但是这个高效率是以牺牲相位的非线性为代价的。
若选择性越好,则相位非线性失真会越严重。
相反,FIR滤波器却可以得到严格的线性相位输出,但由于FIR滤波器传输函数的极点固定在原点,因而只能用较高的阶数以达到高的选择性;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可以比IIR滤波器高5~10倍,但是成本较高,信号延时也较大;所以如若按相同的选择性和相同的线性要求来说的话,则IIR滤波器就必须加全通网络以进行相位较正,同时要增加滤波器的节数和复杂性。
整体来看,IIR与FIR各有优缺点。
IIR滤波器能达到同样效果,且阶数少,延迟也较低,但是会有稳定性和非线性相位问题;FIR滤波器虽然没有稳定性问题,且线性相位,但阶数多,延迟大。
2Matlab相关函数
2.1wavread函数
选取一段声音信号,而后利用该函数,在Matlab软件平台下对语音信号进行采样处理,同时记住采样频率与采样点数。
通过使用wavread函数,加深理解采样频率、采样位数等概念。
wavread函数调用格式一般有以下几种:
y=wavread(file),该式读取file所规定的wav文件,返回的采样值放在向量y中。
[y,fs,nbits]=wavread(file),所得采样值放在向量y中,fs表示采样频率(Hz),nbits表示采样位数。
y=wavread(file,N),读取前N点的采样值并放在向量y中。
y=wavread(file,[1N,2N]),读入从1N到2N点的采样值并放在向量y中。
2.2其他相关函数
(1)函数fftfilt
函数fftfilt的调用格式为:
y=fftfilt(b,x)。
该格式是利用基于FFT的重叠相加法对数据进行滤波处理,但这种频域滤波技术只对FIR滤波器有效。
该函数是通过向量b描述的滤波器对x数据进行滤波。
(2)函数sound
函数sound可以对声音进行回放。
其调用格式为:
sound(x,fs,bits)。
(3)函数filter
函数filter的调用格式为:
y=filter(b,a,x)。
该格式采用的是用数字滤波器对数据进行滤波,既可以用于IIR滤波器,同样,也可以用于FIR滤波器。
其中,向量b和a分别表示的是系统函数的分子、分母多项式的系数。
若a=1,则表示的是FIR滤波器,否则就是IIR滤波器。
该函数是利用给出的向量b和a,对x中的数据进行滤波,结果放入向量y。
(4)函数randn
Randn函数产生的是[0,1]上的均匀分布的随机序列,randn产生均值为0,方差为1的高斯随机序列,也就是白噪声序列。
也就是说,可以直接使用下面两个函数对原始信号添加噪声。
调用格式为:
y=x+rand(length(x),1),或者y=x+randn(length(x),1)。
(5)函数FFT
在Matlab的信号处理工具箱功能中,函数FFT用于序列快速傅立叶变换。
FFT函数的一种调用格式为:
y=fft(x)
其中,x是序列,y是序列的FFT,x可以为一向量或矩阵。
若x为一向量,y是x的FFT。
且和x相同长度。
FFT函数的另一种调用格式为:
y=fft(x,N)
式中,x,y意义同前,N为正整数。
3去噪和仿真的研究
3.1语音文件在Matlab平台上的录入与打开
单击自己的电脑开始菜单,选择所有程序,接着选择附件,再选择娱乐,最后选择录音。
自己录入“毕业设计声音文件”语音信号,然后保存在MATLAB的work文件夹里面,命名为“chushi.wav”。
利用Matlab中的wavread命令,读入(采集)本段语音信号,将它赋值给某一向量。
3.2原始语音信号频谱分析及仿真
在Matlab中使用wavread函数,可得出一个采样频率为22500HZ,并且声音是单声道的信号。
利用Sound函数,我们可以清晰的听到“毕业设计声音文件”的语音。
采集数据并画出波形图。
在Matlab的信号处理工具箱中,函数FFT和IFFT分别用于快速傅立叶变换和逆变换。
前面已简单介绍过,这里详细介绍下这些函数。
函数fft用于序列快速傅立叶变换,是常用的信号处理函数。
函数的一种调用格式:
y=fft(x)。
其中,x是序列,y是序列的快速傅里叶变换FFT,x可以为一向量,也可以为一矩阵。
若x为一向量,则y是x的fft,且和x为相同长度。
若x为一矩阵,y则是对矩阵的每一列向量进行的fft。
若序列x的长度是2的幂次方,则函数fft执行高速基-2fft算法;否则fft将执行一种混合基的离散傅立叶变换算法,计算速度会较慢。
函数fft的另一种调用格式为y=fft(x,N)。
该式中,x,y的意义同前,N为正整数。
函数执行序列x的N点快速傅里叶变换(fft)。
若x为向量,且长度小于N,则函数会将x补零至长度N。
若向量x的长度大于N,则函数将截短x,使之长度为N。
若x为矩阵,则按相同方法对x进行相应处理。
由于经函数fft所求得的序列y一般是复序列,所以通常要求其幅值和相位。
Matlab提供求复数的幅值和相位函数:
abs,angle,这些函数一般和fft同时使用。
函数abs(x)用于计算复向量x的幅值,而函数angle(x)则用于计算复向量的相角,用弧度表示。
用Matlab工具箱函数fft进行频谱分析时,需注意:
(1)函数fft返回值y的数据结构对称性
一般的,对于N点的x(n)序列的fft是N点的复数序列,其点n=N/2+1所对应的是奈奎斯特频率,作频谱分析时仅取序列X(k)的前一半,即前N/2点即可。
由于X(k)的后一半序列和前一半序列是对称的,所以不必再求。
(2)频率计算
若N点序列x(n)(n=0,1,…,N-1)是在采样频率下获得的,则它的FFT也是N点序列,即X(k)(k=0,1,2,…,N-1),其第k点所对应实际频率值为f=k*f/N.
下面的一段程序是语音信号在Matlab中的简单体现。
通过运行该段程序,我们实现了语音信号的读入与打开,并绘出了语音信号的波形频谱图。
[x,fs,bits]=wavread('chushi.wav’);
sound(x,fs,bits);
X=fft(x,4096);
magX=abs(X);
angX=angle(X);
subplot(221);plot(x);title('原始信号波形');
subplot(222);plot(X);title('原始语音信号采样后的频谱图’)
subplot(223);plot(magX);title('原始信号幅值');
subplot(224);plot(angX);title('原始信号相位');
程序运行时可以听到声音,而后得到的图形如图2所示:
图2初始信号波形
3.3加噪语音信号频谱分析及仿真
下面将介绍在Matlab平台上如何实现在一段原始语音信号加入一个随机噪声信号。
函数randn:
产生正态分布的随机数或者矩阵的函数。
产生的均值为0,方差σ^2=1,标准差σ=1的正态分布的随机数或矩阵的函数。
用法:
Y=randn(n),返回一个n*n的随机项矩阵。
如果n不是个数量,则将返回错误信息。
Y=randn(m,n)或Y=randn([mn]),返回一个m*n的随机项矩阵。
Y=randn(size(A)),返回一个和A有同样维数大小的随机数组。
randn返回一个每次都变化的数量。
利用下面的一段程序,将实现用randn函数把一段随机噪音信号加入原始语音信号的信号处理功能:
[y,fs,bits]=wavread('chushi.wav');
sound(y,fs)
n=length(y)
y_p=fft(y,n);
f=fs*(0:
n/2-1)/n;
figure
(1)
subplot(2,1,1);
plot(y);
title('原始语音信号采样后的时域波形');
xlabel('时间轴')
ylabel('幅值A')
subplot(2,1,2);
plot(f,abs(y_p(1:
n/2)));
title('原始语音信号采样后的频谱图');
xlabel('频率Hz');
ylabel('频率幅值');
L=length(y)
noise=0.1*randn(L,2);
y_z=y+noise;
sound(y_z,fs)
n=length(y);
y_zp=fft(y_z,n);
f=fs*(0:
n/2-1)/n;
figure
(2)
subplot(2,1,1);
plot(y_z);
title('加噪语音信号时域波形');
xlabel('时间轴')
ylabel('幅值A')
subplot(2,1,2);
plot(f,abs(y_zp(1:
n/2)));
title('加噪语音信号频谱图');
xlabel('频率Hz');
ylabel('频率幅值');
初始信号的时域波形、频谱图与加噪后语音信号的时域波形、频谱图分别如下图所示。
图3原始信号时域波形和频谱
图4加噪信号时域波形和频谱
再通过对原始语音信号的回放效果与加噪后的语音信号回放的效果的对比,人耳可以明显辨别出两种语音信号不一样了,加噪后的语音信号在听觉上比原始语音信号要浑浊很多,而且还有吱吱嘎嘎的混杂音。
3.4去噪及仿真
(1)FIR滤波器法去噪
通过对上一节中加噪语音信号和原始语音信号频谱图对比可以知道,噪音大部分是Hz大于5000的部分,故设计低通滤波器进行滤波处理。
接下来我们要用设计的FIR低通滤波器对上一节中加噪语音信号进行滤波处理。
用自己设计的FIR数字低通滤波器对加噪的语音信号进行滤波时,在Matlab中,FIR滤波器利用函数fft对信号进行滤波。
函数fft用的是重叠相加法实现线性卷积的计算。
调用格式为:
y=fft(h,x,M)。
其中,h是系统单位冲击响应向量;x是输入序列向量;y是系统的输出序列向量,M是有用户选择的输入序列的分段长度,缺省时,默认的输入向量的重长度M=512。
用设计好的FIR数字低通滤波器对加噪语音信号的滤波程序:
[y,fs,bits]=wavread('chushi.wav');
sound(y,fs)
n=length(y)
y_p=fft(y,n);
f=fs*(0:
n/2-1)/n;figure
(1)
subplot(2,1,1);
plot(y);
title('原
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 matlab 语音 信号 滤波