基于MATLAB的语音信号分析和处理.docx
- 文档编号:16690593
- 上传时间:2023-07-16
- 格式:DOCX
- 页数:36
- 大小:1.04MB
基于MATLAB的语音信号分析和处理.docx
《基于MATLAB的语音信号分析和处理.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的语音信号分析和处理.docx(36页珍藏版)》请在冰点文库上搜索。
基于MATLAB的语音信号分析和处理
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2013年春季学期
信号处理课程设计
题目:
基于MATLAB的语音信号的分析与处理
专业班级:
通信工程
(1)班
******
学号:
********
成绩:
摘要
语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。
通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。
Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。
信号处理是Matlab重要应用的领域之一。
本设计用微软录音机采集了一段语音,对其进行了时域分析,频谱分析,分析语音信号的特性。
并应用matlab平台对语音信号加入了不同的噪声,进一步用双线性变换法设计了一个的低通IIR滤波器和用窗函数法设计了FIR低通滤波器,然后对加噪的语音信号进行滤波处理。
最后对比滤波前后的语音信号的时域和频域特性,回放加噪语音信号和去噪语音信号,对比研究了低通IIR滤波器和低通FIR滤波器在信号处理尤其是信号滤波去噪方面的特性和应用。
设计从理论和实践上比较不同数字滤波器的滤波效果。
【关键词】语音信号;频域特性;时域特性;滤波器;Matlab;语音信号;傅里叶变换;
信号处理。
一、前言
1.1课题的研究意义
信号处理是一门比较实用的通信工程的专业课程,语音是人类获取信息的重要来源和利用信息的重要手段。
通过语言相互传递信息是人类最重要的基本功能之一。
语言是人类特有的功能,它是创造和记载几千年人类文明史的根本手段,没有语言就没有今天的人类文明。
语音是语言的声学表现,是相互传递信息的最重要的手段,是人类最重要、最有效、最常用和最方便的交换信息的形式。
信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科,它是一门新兴的学科,同时又是综合性的多学科领域和涉及面很广的交叉学科
1.2设计任务
本次设计主要是利用MATLAB对语音信号进行分析和处理。
具体来说,是在采集语音信号后,在MATLAB软件平台进行频谱分析,并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声(低通和窗口函数滤波器),恢复原信号。
把原始语音信号、加噪语音信号和滤波后的信号进行时域变换和频域变换,画出它们的时域波形和频域波形图,从视觉角度比较分析滤波的效果。
也可将这3类信号进行播放从听觉角度感受滤波的效果。
二、基本原理
2.1语音信号概述
语言在人类的的智能组成中充当着很重要的角色,人与人之间的交流和沟通大部分是通过语言的方式有效的完成。
人类用语言交流的过程可以看成是一个复杂的通信过程,为了获取便于分析和处理的语音信源,必须将在空气中传播的声波转变为包含语音信息并且记载着声波物理性质的模拟(或数字)电信号,即语音信号,因此语音信号就成为语音的表现形式或载体。
语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科。
语音信号处理是建立在语音学和数字信号处理基础之上的,对语音信号模型进行分析、存储、传输、识别和合成等方面的一门综合性学科,它综合了声学、语言学、语音学、生理科学、数字信号处理、通信理论、电子技术、计算机科学、模式识别和人工智能等众多学科。
也是人机交互最重要的一步。
2.2数字滤波器原理
滤波器可广义地理解为一个信号选择系统。
它让某些信号成分通过又阻止或衰减另一些成分。
在更多地情况下,被窄义地理解为选频系统,如低通、高通、带通、带阻。
频域与时域均衡器也是一种滤波器,通信系统的传输媒介如明线、电缆等从特性看也是滤波器。
滤波器如系统一样可分为三类:
模拟滤波器、采样滤波器和数字滤波器.模拟滤波器(AF)可以是由RLC构成的无源滤波器,也可以是加上运放的有源滤波器,它们是连续时间系统。
采样滤波器(SF)由电阻、电容、电荷转移器件、运放等组成,属于离散时间系统,其幅度是连续的。
开关电容滤波器、电荷耦合滤波器军属这类滤波器。
数字滤波器(DF)由加法器、乘法器、存储延迟单元、时钟脉冲滤波器及逻辑单元等数字电路构成。
它精度高,稳定性好,不存在阻抗匹配问题,可以时分复用,能够完成一些模拟滤波器完成不了的滤波任务。
其缺点是需要抽样、量化、编码,以及手时钟频率所限,所能处理的信号最高频率还不够高。
另外,由于有限字长效应会造成域设计值的频率偏差、量化和运算噪声及极限环振荡。
数字滤波器根据不同的分类标准可以将滤波器分成不同的类别。
(1)根据单位冲激响应h(n)的时间特性分类
无限冲激响应(IIR)数字滤波器
有限冲激响应(FIR)数字滤波器
(2)根据实现方法和形式分类
递归型数字滤波器
非递归型数字滤波器
快速卷积型
(3)根据频率特性分类
低通数字滤波器、高通数字滤波器、带通数字波器、带阻数字滤波器
IIR(InfiniteImpulseResponse)数字滤波器,又名“无限脉冲响应数字滤波器”,或“递归滤波器”。
递归滤波器,也就是IIR数字滤波器,顾名思义,具有反馈,一般认为具有无限的脉冲响应。
IIR滤波器有以下几个特点:
(1)封闭函数:
IIR数字滤波器的系统函数可以写成封闭函数的形式。
(2)IIR数字滤波器采用递归型结构:
IIR数字滤波器采用递归型结构,即结构上带有反馈环路。
IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反
13馈回路。
由于运算中的舍入处理,使误差不断累积,有时会产生微弱的寄生振荡。
(3)借助成熟的模拟滤波器的成果:
IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,其设计工作量比较小,对计算工具的要求不高。
在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,再通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
(4)需加相位校准网络:
IIR数字滤波器的相位特性不好控制,对相位要求较高时,需加相位校准网络。
FIR数字滤波器(finiteimpulseresponsefilter)又名“有限脉冲响应数字滤波器”,这类滤波器对于脉冲输入信号的响应最终趋向于0,因此而得名。
有限脉冲响应滤波器(FIRfilter)的优点:
(1)脉冲响应(impulseresponse)为有限长:
造成当输入数位讯号为有限长的时候,输出数位讯号也为有限长。
(2)比无限脉冲响应滤波器(IIRfilter)较容易最佳化(optimize)。
(3)线性相位(linearphase):
造成h(n),是偶对称(even)或奇对称(odd)且有限长。
(4)一定是稳定的(stable):
因为Z转换(Ztransform)后所有的极点(pole)都在单位圆内。
三、总体设计思想
3.1语音信号的采集
在Matlab环境中,主要可以通过以下几种方法驱动声卡,采集语音信号:
1.将声卡作为对象处理采集语音信号Matlab将声卡作为对象处理,其后的一切操作都不与硬件直接相关,而是通过对该对象的操作来作用于硬件设备(声卡)。
操作时首先要对声卡产生一个模拟输入对象(ai),给ai对象添加一个通道设置采样频率后,就可以启动设备对象,开始采集数据,采集完成后停止对象并删除对象。
2.调用wavrecord功能函数采集语音信号。
wavrecord功能函数只适用于windows95/98/N平台,它使用windows声音输入设备录制声音。
函数调用方式:
wavrecord(N,fs,ch,nbits);N:
采集的样本数据量;fs:
样本采集频率,为8000Hz、11025Hz、22050Hz和44100Hz之一,默认值为11025Hz;ch:
样本采集通道,1为单声道,2为双声道,默认值为1(单声道);nbits:
每个样本的位数(或称解析度),‘double’、‘single’或‘int16’为16位,‘uint8’为8位;3.运用audiorecorder对象采集语音信号audiorecorder(fs,nbits,ch)可以创设一个audiorecorder对象。
fs:
样本采集频率,为8000Hz、11025Hz、22050Hz和44100Hz之一,默认值为8000Hz;nbits:
每个样本的位数,8位或16位,默认值为8位;ch:
样本采集通道,1为单声道,2为双声道,默认值为1(单声道);audiorecorder对象创设后,就可以进行相应的录音、暂停、停止、播放以及数据读取等操作。
本设计用是调用wavrecord功能函数采集语音信号,保存起来以备处理。
3.2语音信号处理工具的选择
语音信号的进一步处理分析工作选用了matlab平台。
MATLAB是一种科学计算软件,专门以矩阵的形式处理数据。
MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,不断完善MATLAB产品以提高产品自身的竞争能力Matlab的数据分析和处理功能十分强大,运用它来进行语音信号的分析、处理和可视化相当便捷。
在编程效率、程序可读性、可移植性和可扩充性上matlab远远优于其它的高级编程语言,而且编程易学、直观,代码非常符合人们的思维习惯。
另外matlab为用户提供了丰富的windows图形界面设计方法,使用户能够在利用其强大的数值计算功能的同时可设计出友好的图形界面,它受到了越来越多的用户的欢迎
Matlab几乎可以在各种机型和操作系统上运行,所以在可移植性和可扩充性上,matlab远优越于其他的高级编程语言。
Matlab语言具有强大的数值计算能力和视图能力,其偏微分方程工具箱提供了有限元求解的一个强大而灵活的环境,并且有限元网格可做精细划分以满足要求。
但是,和其他的高级语言相比,matlab程序的执行速度较慢。
在目前电脑处理速度不断提升的情况下,如果实时性要求不是非常高的情况下,使用matlab开发就不存在此类问题了。
3.3数字滤波器的设计
本设计在matlab平台上,设计了IIR和FIR滤波器各种类型的滤波器。
用以对语音原始信号及加噪的语音信号进行滤波,重点对加噪信号进行了滤波。
对于IIR滤波器,它的极点可以在单位圆内的任何位置,实现IIR滤波器的阶次可以较低,所用的存储单元较少,效率高,又由于IIR数字滤波器能够保留一些模拟滤波器的优良特性,因此应用很广。
设计IIR数字滤波器的常用方法是从模拟滤波器来设计数字IIR滤波器。
模拟滤波器设计已经有了一套相当成熟的方法,它不但有完整的设计公式,而且还有较为完整的图表供查询,因此充分利用这些已有的资源将会给数字滤波器的设计带来很大的方便。
再将模拟滤波器转换为数字滤波器,其转换方法有冲激响应不变法和双线性Z变换法。
一般,当着眼于滤波器的时域瞬态响应时,采用脉冲响应不变法较好,而其它情况下,对于IIR的设计,大多采用双线性变换法。
对于FIR滤波器,它有精确、严格的线性相位特性,并且可以做成既是因果的又是稳定的系统。
所以FIR滤波器的应用越来越广泛。
IIR与FIR滤波器的性能比较如下图3.1所示。
表3.1IIR滤波器与FIR滤波器的性能比较
IIRDF
FIRDF
(1)相位一般是非线性的
(1)相位可以做到严格线性
(2)不一定稳定
(2)一定是稳定的
(3)不能用FFT作快速卷积
(3)信号通过系统可采用快速卷积
(4)一定是递归结构
(4)主要是非递归结构,也可含递归环节
(5)对频率分量的选择性好(零极点可同时起作用)
(5)选择性差
(6)相同性能下阶次较低
(6)相同性能下阶次高
(7)有噪声反馈,噪声大
(7)噪声小
(8)运算误差大,有可能出现极限环振荡
(8)运算误差小,不会出现极限环振荡
(9)H(z)设计有封闭形式的公式,一次完成
(9)没有封闭形式的设计公式,须靠经验与反复调试
(10)对计算手段的要求较低
(10)一般需用计算机计算
(11)主要用于设计分段常数的标准低通、高通、带通、带阻和全通滤波器
(11)还可设计正交变换器、微分器、线性预测器、回波抵消器、均衡器、线性调频器等各种网络,适用范围广
从上面的简单比较我们可以看到IIR与FIR滤波器各有所长,所以在实际应用时应该从多方面考虑来加以选择。
例如,从使用要求上来看,在对相位要求不敏感的场合,如语言通讯等,选用IIR较为合适,这样可以充分发挥其经济高效的特点,而对于图像信号处理,数据传输等以波形携带信息的系统,则对线性相位要求较高,如果有条件,采用FIR滤波器较好,当然,在实际应用中应考虑经济上的要求以及计算工具的条件等多方面的因素。
整体来看,IIR滤波器达到同样效果阶数少,延迟小,但是有稳定性问题,非线性相位;FIR滤波器没有稳定性问题,线性相位,但阶数多,延迟大。
而不论是IIR滤波器还是FIR滤波器的设计都包括三个步骤:
(1)按照实际任务的要求,确定滤波器的性能指标。
(2)用一个因果、稳定的离散线性时不变系统的系统函数逼近性能要求。
根据系统的不同的要求可以考虑用IIR系统函数或FIR系统函数去逼近。
(3)利用有限精度算法实现系统函数,包括结构选择、字长选择等。
但IIR滤波器和FIR滤波器的设计方法完全不同。
IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计进行的。
其设计步骤是:
先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。
FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。
对于线性相位滤波器,经常采用FIR滤波器。
四、语音信号分析和滤波处理
4.1语音信号的采集
把语音信号并保存为.wav文件,长度小于50秒,并对语言信号进行采样;录制的软件可以使用Windows自带的录音机,或者也可以使用其它专业的录音软件,录制时需要配备录音硬件(如麦克风),为了方便比较,需要在安静、无噪音、干扰小的环境下录。
4.2语音信号的读入与打开
在MATLAB中,[y,fs,bits]=wavread('Blip',[N1N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。
[N1N2]表示读取的值从N1点到N2点的值。
sound(y);用于对声音的回放。
向量y则就代表了一个信号,也即一个复杂的“函数表达式”,也可以说像处理一个信号的表达式一样处理这个声音信号。
下面是语音信号在MATLAB中的语言程序,它实现了语音的读入与打开,并绘出了语音信号的波形频谱图。
function[output_args]=yuying(input_args)
%UNTITLEDSummaryofthisfunctiongoeshere
%Detailedexplanationgoeshere
[x,fs,bits]=wavread('C:
\Users\Administrator\Desktop\wzf.wav');
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('原始信号相位');
end
图4-1语音信号的读入与打开
4.3语言信号处理
用MATLAB绘制出语音信号的时域波形图和原始语音信号的频率响应图和原始语音信号的FFT频谱图。
程序设计如下:
function[output_args]=xinhao(input_args)
%UNTITLEDSummaryofthisfunctiongoeshere
%Detailedexplanationgoeshere
fs=22050;%语音信号采样频率为22050
[x,fs,bits]=wavread('C:
\Users\Administrator\Desktop\wzf.wav');%播放语音信号
y1=fft(x,4096);%对信号做4096点FFT变换
f=fs*(0:
511)/1024;
figure
(1)
plot(x)%做原始语音信号的时域波形图
title('原始语音信号时域图');
xlabel('timen');
ylabel('fuzhin');
figure
(2)
freqz(x)%绘制原始语音信号的频率响应图
title('原始语音信号频率响应图')
figure(3)
plot(f,abs(y1(1:
512)));
title('原始语音信号频谱图')
xlabel('Hz');
ylabel('fudu');
end
图4-2语言信号分析
在MATLAB软件平台下,给原始的语音信号叠加上噪声,噪声类型分为如下几种:
(1)单频噪色(正弦干扰);
(2)高斯随机噪声。
绘出加噪声后的语音信号时域和频谱图,在视觉上与原始语音信号图形对比,也可通过Windows播放软件从听觉上进行对比,分析并体会含噪语音信号频谱和时域波形的改变。
程序代码如下:
function[output_args]=jiazao(input_args)
%UNTITLEDSummaryofthisfunctiongoeshere
%Detailedexplanationgoeshere
fs=22050;%语音信号采样频率为22050
[x,fs,bits]=wavread('C:
\Users\Administrator\Desktop\wzf.wav');
t=0:
1/22050:
(size(x)-1)/22050;
y1=fft(x,4096);%对信号做4096点FFT变换
f=fs*(0:
511)/1024;
noise_mu=0;
noise_var=0.05;
x0=randn(size(x)).*sqrt(noise_var)+noise_mu;
x1=x+x0;
ts=1/fs;%绘制在原始信号上加随机噪声的信号图
ta=(length(x)-1)/fs;
t=0:
ts:
ta;
figure
(1);
subplot(2,1,1);
plot(x);%做原始语音信号的时域图形
title('原语音信号时域图')
xlabel('t');
ylabel('x');
subplot(2,1,2);
plot(x1);
title('加随机噪声后语音信号时域图');
xlabel('t');
ylabel('x1');
gridon;
y2=fft(x1,1024);%对信号做1024点FFT变换
f=fs*(0:
511)/1024;
figure
(2)
subplot(2,1,1);
plot(abs(y1));
title('原始语音信号频谱');
xlabel('Hz');
ylabel('fudu');
Subplot(2,1,2);%绘制原始语音信号的频率响应图
plot(f,abs(y2(1:
512)));
title('加随机噪声后的语音信号频谱图')
xlabel('Hz');
ylabel('fudu');
gridon;
t=0:
(size(x)-1);%加入正弦噪音
Au=0.3;
d=[Au*sin(6*pi*5000*t)]';
x2=x+d;
figure(3)
subplot(2,1,1);
plot(x);%做原始语音信号的时域图形
title('原语音信号时域图')
xlabel('timen');
ylabel('fudu');
subplot(2,1,2);
plot(x2);%做原始语音信号的时域图形
axis([01200000-11]);
title('加高斯噪声后语音信号时域图');
xlabel('timen');
ylabel('fudu');
y2=fft(x2,4096);
figure(4)
subplot(2,1,1);
plot(abs(y1));
title('原始语音信号频谱');
xlabel('Hz');
ylabel('fudu');
subplot(2,1,2);
plot(abs(y2));
title('加高斯噪声语音信号频谱图');
xlabel('Hz');
ylabel('fudu');
end
图4-4高斯随机噪声
图4-5正弦sin噪声的加噪语音信号
4.4滤波器的设计
对加入高斯随机噪声和正弦噪声的语音信号进行滤波。
用双线性变换法设计了巴特沃斯数字低通IIR滤波器对两加噪语音信号进行滤波,并绘制了巴特沃斯低通滤波器的幅度图和两加噪语音信号滤波前后的时域图和频谱图。
程序设计如下:
function[output_args]=ditong(input_args)
%UNTITLEDSummaryofthisfunctiongoeshere
%Detailedexplanationgoeshere
[x,fs,bits]=wavread('C:
\Users\Administrator\Desktop\wzf.wav');
noise_mu=0;
noise_var=0.05;
x0=randn(size(x)).*sqrt(noise_var)+noise_mu;
x1=x+x0;
ts=1/fs;
ta=(length(x)-1)/fs;
t=0:
ts:
ta;
t=0:
(size(x)-1);
Au=0.3;
d=[Au*sin(6*pi*5000*t)]';
y=x+d;
wp=0.12*pi;
ws=0.4*pi;
Rp=1;
Rs=15;
Fs=22050;
Ts=1/Fs;
wp1=2/Ts*tan(wp/2);%将模拟指标转换成数字指标
ws1=2/Ts*tan(ws/2);
[N,Wn]=buttord(wp1,ws1,Rp,Rs,'s');%选择滤波器的最小阶数
[Z,P,K]=buttap(N);%创建butterworth模拟滤波器
[Bap,Aap]=zp2tf(Z,P,K);
[b,a]=lp2lp(Bap,Aap,Wn);
[bz,az]=bilinear(b,a,Fs);%用双线性变换法实现模拟滤波器到数字滤波器的转换
[H,W]=freqz(bz,az);%绘制频率响应曲线
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 语音 信号 分析 处理