语音信号处理及MATLAB实现课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

语音信号处理及MATLA或现课程设计
13
目录
摘 要. ..................................................................
1. 设计原理 (1)
1.1 设计的目的及要求 (1)
1.2 课题的研究意义 (1)
2. 设计原理 (2)
2.1 采样频率 . (2)
2.2 采样位数 (2)
2.3 采样定理 (2)
2.4 时域信号的 FFT 分析 (2)
2.5 数字滤波器设计原理和方法 (3)
2.6 各种不同类型滤波器的性能比较 . ........................................
3. 设计内容 (4)
3.1 语音信号的录入与提取 (4)
3.2 加噪处理(高频噪音) (6)
3.3 设计窗函数带阻滤波器 (8)
3.4 滤波处理 (9)
3.5 加躁处理(低频噪音) (11)
3.6 设计椭圆函数高通滤波器滤波处理 . .....................................
总 结. (16)
致 谢. (17)
参考文献 (17)
附录 . (18)
摘要
语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。

通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。

Matlab 语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。

信号处理是Matlab 重要应用的领域之一。

本实验设计用电脑自带的录音机采集了一段语音,对其进行了时域分析,频谱分析, 分析语音信号的特性。

并应用matlab 平台对语音信号加入了不同的噪声,进一步用窗函数法,椭圆函数法分别设计了一个带阻滤波器和一个高通滤波器,然后对加噪的语音信号进行滤波处理。

最后对比滤波前后的语音信号的时域和频域特性,回放加噪语音信号和去噪语音信号。

对比研究处理前和处理后的声音的不同。

【关键词】语音信号;频域特性; 时域特性; 滤波器
1. 设计目的和要求
1.1 设计目的及要求
本次课程设计要求利用MATLAB对语音信号进行处理和分析,要求学生采集语音信号后,在MATLAB软件平台进行频谱分析,并对速配采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪音,恢复信号。

1.2 课题的研究意义
语言是我们人类所特有的功能,它是传承和记载人类几千年文明史,没有语言就没有我们今天人类的文明。

语音是语言最基本的表现形式,是相互传递信息最重要的手段,是人类最重要、最有效、最常用和最方便的交换信息的形式。

语音信号处理属于信息科学的一个重要分支,大规模集成技术的高度发展和计算机技术的飞速前进,推动了这一技术的发展;它是研究用数字信号处理技术对语音信号进行处理的一门新兴学科,同时又是综合性的多学科领域和涉及面很广的交叉学科,因此我们进行语言信号处理具有时代的意义。

2. 设计原理
2.1 采样频率
采样频率,也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。

采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔。

通俗的讲采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。

采样频率越高,即采样的间隔时间越短,则在单位时间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。

采样频率与声音频率之间有一定的关系,根据奎斯特理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原成为原来的声音。

这就是说采样频率是衡量声卡采集、记录和还原声音文件的质量标准。

2.2 采样位数
采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音
文件时所使用数字声音信号的二进制位数。

采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。

采样位数和采样率对于音频接口来说是最为重要的两个指标,也是选择音频接口的两个重要标准。

无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度范围。

2.3 采样定理
在进行模拟/ 数字信号的转换过程中,当采样频率最大值大于信号中最高频率fmax 的2.56 倍时,即:fs.max>=2.56fmax, 则采样之后的数字信号完整地保留了原始信号中的信息.
2.4 时域信号的FFT分析
FFT 即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

在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 进行处理。

2.5 数字滤波器的设计原理和方法
数字滤波是数字信号分析中最重要的组成部分之一,与模拟滤波相比,它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等优点。

在信号的过滤、检测和参数的估计等方面,经典数字滤波器是使用最广泛的一种线性系统。

数字滤波器的作用是利用离散时间系统的特性对输入信号波形(或频谱)进行加工处理,或者说利用数字方法按预定的要求对信号进行变换。

2.6 各种滤波器的性能比较
IIR 滤波器与FIR 滤波器的性能比较
FIR:Finite Impulse response ,有限冲击响应
IIR:Infinite Impulse response ,无限冲击响应
从性能上来说,IIR 滤波器传输函数的极点可位于单位圆内的任何地方,因此可用较低的阶数获得高的选择性,所用的存贮单元少,所以经济而效率高。

但是这个高效率是以相位的非线性为代价的。

选择性越好,则相位非线性越严重。

相反,FIR 滤波器却可以得到严格的线性相位,然而由于FIR 滤波器传输函数的极点固定在原点,所以只能用较高的阶数达到高的选择性;对于同样的滤波器设计指标,FIR 滤波器所要求的阶数可以比IIR 滤波器高5~10 倍,结果,成本较高,信号延时也较大;如果按相同的选择性和相同的线性要求来说,则IIR 滤波器就必须加全通网络进行相位较正,同样要大增加滤波器的节数和复杂性。

整体来看,IIR 滤波器达到同样效果阶数少,延迟小,但是有稳定性问题,非线性相位;FIR滤波器没有稳定性问题,线性相位,但阶数多,延迟大
3. 设计内容
3.1 语音信号的录入与提取
用电脑所带的录音工具录制一段录音,时间约为1s,并将声音保存成扩展名为(.wav) 格式,并且应注意,录取的声音应为单声道的,否则图形会出不来。

对采集的信号进行FFT分析,并且画出源信号的时域波形图形和频域图形。

fs=16000;
x0=wavread('E:\xinhao1');
t=(0:length(x0)-1)/16000;
f=fs*(0:10239)/20480;
y1=fft(x0,20480);
%画语音信号时域图
figure(1) subplot(1,1,1);
plot(t,x0)
grid on;
axis tight;
title(' 原始语音信号时域'); xlabel('time(s)');
ylabel(' 幅度');
% 画语音信号频域图
figure(2) subplot(1,1,1);
plot(f,abs(y1(1:10240))); grid on;
axis([0,8000,0,20]);
title(' 原始语音信号频谱'); xlabel('Hz');
ylabel(' 幅度');
程序运行结果如下:
3.2 加噪处理,对信号加高频噪音
在MATLAB软件平台下,给原始的语音信号叠加上噪声,绘出加噪声后的语音信号时域和频谱图,在视觉上与原始语音信号图形对比,也可通过Windows播放软件从听觉上进行对比,分析并体会含噪语音信号频谱和时域波形的改变。

程序代码如下:
%加噪后语音信号变化
d=[0.15*cos(2*pi*4000*t)]'; % 加噪
x1=x0+d;
y2=fft(x1,20480);
%加噪后语音信号的时域图
figure(3)
subplot(1,1,1);
plot(t,x0)
grid on;
axis tight;
title(' 加噪后的信号时域');
xlabel('time(s)');
ylabel(' 幅度');
% 加噪后语音信号的频域图
figure(4)
subplot(1,1,1);
plot(f,abs(y2(1:10240)));
grid on;
axis([0,8000,0,20]);
title(' 加噪语音信号频谱');
xlabel('Hz');
ylabel(' 幅度');
程序运行结果如下:
加噪声后,听起来明显感觉嘈杂。

通过图形比较也可以看出,时域波形图的变化不大,但频
谱图的变化明显,显示出加了干扰。

3.3 设计窗函数带阻滤波器要对加入噪声的语音信号进行滤波,需设计合适的滤波器。

由图形可看出,用窗函数法设计带阻滤波器可对对加噪语音信号进行滤波。

设计带阻滤波器,并绘制滤波器的图形。

程序设计如下:%设计带阻滤波器
wlp=2850*pi*2/fs;wls=3400*pi*2/fs; wup=4900*pi*2/fs;wus=4600*pi*2/fs;
B=(wus-wls);
M=ceil(12*pi/B)-1; wp=[(wls+wlp)/2/pi,(wus+wup)/2/pi];
[bz,az]=fir1(M,wp,'stop',blackman(M+2)); hn=fir1(M,wp,'stop',blackman(M+2));
%带阻滤波器窗函数图像figure(5) subplot(1,1,1);
freqz(hn);
grid on;
axis tight;
title(' 窗函数图像');
xlabel('Hz');
ylabel(' 幅度');
程序运行结果如下:
3.4 对信号进行滤波处理
对加入噪声的语音信号进行滤波。

用加窗函数的方法设计了巴带阻滤波器对加噪语音信号进行滤波,并绘制了加噪语音信号滤波后的时域图和频谱图。

程序设计如下:
%画滤波后的图
figure(6)
freqz(bz,az);
grid on; axis tight;
y3=filter(bz,az,x1);
X=fft(y3,20480);
%滤波后时域图
subplot(2,1,1);
plot(y3);
grid on;
ylim([-0.03 ,0.03]);
title(' 滤波后信号时域波形');
xlabel('time(s)');
ylabel(' 幅度');
% 滤波后频谱
subplot(2,1,2); plot(abs(X(1:10240)));
title(' 滤波后信号频谱');
grid on;
ylim([0,20]);
xlabel('Hz');
ylabel(' 幅度');
程序运行结果如下;
经过滤波后得出的语音信号相比较,低通滤波后,声音稍微有些发闷,但是很接近原来的声音。

3.5 对信号加低频噪音
程序如下:
%加低频噪音
d1=[0.5*cos(2*pi*200*t)]'; % 加噪
x4=x0+d1;
y4=fft(x4,20480);
%加噪后语音信号的时域图
figure(7)
subplot(1,1,1);
plot(t,x4)
grid on;
axis tight;
title(' 加噪后的信号时域');
xlabel('time(s)');
ylabel(' 幅度');
% 加噪后语音信号的频域图figure(8) subplot(1,1,1);
plot(f,abs(y4(1:10240)));
grid on;
axis([0,8000,0,20]);
title(' 加噪语音信号频谱');
xlabel('Hz');
ylabel(' 幅度');
运行结果:
3.6 对加高频噪音的程序进行滤波处理用椭圆滤波器对信号的高频噪音进行滤波,程序如下:% 加高通滤波
wp1=100*pi*2/fs;
ws1=60*pi*2/fs;
Rp1=1;
As1=100;
[N1,wso]=ellipord(wp1,ws1,Rp1,As1);
[B1,A1]=ellip(N1,Rp1,As1,wso,'high');
figure(9)
freqz(B1,A1);
grid on;
ylim([0,1]);
y4=filter(B1,A1,x4);
X1=fft(y4,20480);
%滤波后时域图subplot(2,1,1);
plot(y4);
grid on;
%axis tight;
ylim([-0.03,0.03]);
title(' 滤波后信号时域波形'); xlabel('time(s)'); ylabel(' 幅度');
% 滤波后频谱subplot(2,1,2);
plot(abs(X1(1:10240))); title(' 滤波后信号频谱'); grid on; %ylim([0,20]);
axis tight;
xlabel('Hz');
ylabel(' 幅度'); 程序运行结果:
椭圆高通滤波器图像
%滤波器图像
figure(10)
hn1=ellip(N1,Rp1,As1,wso,'high'); subplot(1,1,1);
freqz(hn1);
grid on;
xlim([0,0.2]);
%axis tight;
title(' 椭圆函数图像');
xlabel('Hz');
ylabel(' 幅度');
运行结果:

17页
总结
本文对语音信号处理系统的设计作了详细的介绍,采用一系列图像分析和处理技
术,实现了语音信号的基本处理的功能,经过测试运行,基本达到预期目的。

完成了对 语音信号的读取与打开;较好的完成了对语音信号的频谱分析,通过 fft 变换,得出了 语音信号的频谱图; 在滤波
这一块,基本实现了滤波,完成了各种滤波器的滤波效果比较,与课题的要求十分相符。

本实验设计采用了高效快捷的开发工具——MATLA,B 实现了语音信号的采集,对语音信号
加噪声及设计滤波器滤除噪声的一系列工作。

论文初步完成了设计任务,由于本人能力有限,还存在许多不足的地方,比如滤波器的设计种类还比较单一,没有做更多的滤波效果比较等。

在以后的工作和学习中会更加努力来完善设计任务。

本设计圆满的完成了对语音信号的读取与打开,与课题的要求十分相符;本设计也较好的完成了对语音信号的频谱分析,通过fft 变换,得出了语音信号的频谱图;也从一方面基本实现了滤波,得到与原信号相差不是很大的信号。

语音信号处理是语音学与数字信号处理技术相结合的交叉学科,课题在这里不讨论语音学,而是将语音当做一种特殊的信号,即一种“复杂向量”来看待。

也就是说,课题更多的还是体现了数字信号处理技术。

从课题的中心来看,课题是希望将数字信号处理技术应用于某一实际领域,这里就是指对语音的处理。

作为存储于计算机中的语音信号,其本身就是离散化了的向量,我们只需将这些离散的量提取出来,就可以对其进行处理了。

在这里,用到了处理数字信号的强有力工具MATLA,B 通过MATLAB里几个命令函数的调用,很轻易的在实际化语音与数字信号的理论之间搭了一座桥。

课题的特色在于它将语音看作了一个向量,于是语音数字化了,则可以完全利用数字信号处理的知识来解决。

我们可以像给一般信号做频谱分析一样,来给语音信号做频谱分析,也可以较容易的用数字滤波器来对语音进行滤波处理。

但由于知识能力有限,当中也存在相当的不足,特别体现在滤波与界面设计这一块。

对滤波的研究,本文只是举出了很小的一个方面,还有许多精髓都未能一一列举。

当然,这些问题与不足
在今后的进一步学习中,我会一步一步的去进行解决。

致谢
经过努力和完善,系统终于可以正常的运行。

在这里首先感谢老师,在这段时间认真负责的监督我们的进度,耐心的指导我们使我们能够按时的完成任务。

还有感谢学校为我们提供的良好实验环境以及充足的实验设备,为我们的设计和调试提供了很大的方便。

还要感谢在实验过程中帮助我的同学,感谢他们热心的帮助,耐心的讲解和示范。

在这段时间学到了很多,虽然由于自身的不足没有能够为系统提出更好的解决方案。

但这对我来说绝对是一个非常宝贵的历练。

从中我切身体会到了理论和现实的差距,只有真正动手去做才能发现问题。

最后,感谢所有对我提供过帮助的
人。

谢谢。

参考文献
[1] 高西全、丁玉美编著,数字信号处理。

西安:西安电子科技大学出版社,2008.
[2] 丁玉美、高西全编著,数字信号处理学习指导。

西安:西安电子科技大学出版社,2001.
[3] 郑君里等编,信号与系统。

北京:高等教育出版社,2000.
[4] 刘树棠译,数字信号处理——使用MATLA。

B西安:西安交通大学出版社,2002.
[5] 导向科技编著,MATLAB程序设计与实例应用。

北京:中国铁道出版社,2001.
[6] 罗军辉等编著,MATLAB7.0在数字信号处理中的应用。

北京:机械工程出版社,2005.
[7] 陈怀琛等编著,MATLAB及在电子信息课中的应用。

北京:电子工业出版社,2002.
[8] 胡广书编组,数字信号处理——理论、算法与实 现。

北京:清华大学出版社, 2002.
[9] 梁虹等编, 信号与线性系统分析——机遇 MATLAB 的方法与实现。

北京:高等教育出版社, 2006. [10] 刘卫国主编,MATLAB 程序设计与应用 (第二版)。

北京:高等教育出版社, 2006.
f=fs*(0:10239)/20480; plot(t,x0)
附录:实验所有程序:
fs=16000;
x0=wavread('E:\xinhao1 );
y1=fft(x0,20480); %画语音信号时域图 figure(1)
t=(0:length(x0)-1)/16000; subplot(1,1,1);
grid on;
axis tight;
title(' 原始语音信号时
域');
xlabel('time(s)');
ylabel(' 幅度');
%画语音信号频域图figure(2) subplot(1,1,1);
plot(f,abs(y1(1:10240))); grid on;
axis([0,8000,0,20]); title(' 原始语音信号频谱'); xlabel('Hz');
ylabel(' 幅度');
% 加噪后语音信号变化
d=[0.15*cos(2*pi*4000*t )]'; % 加噪
x1=x0+d;
y2=fft(x1,20480);
% 加噪后语音信号的时
域图
figure(3)
subplot(1,1,1);
plot(t,x0)
grid on;
ylim([-0.03,0.03]);
axis tight;
title(' 加噪后的信号时
域');
xlabel('time(s)');
ylabel(' 幅度');
% 加噪后语音信号的频域图
figure(4) subplot(1,1,1);
plot(f,abs(y2(1:10240))); grid on;
axis([0,8000,0,20]);
title(' 加噪语音信号频
谱');
xlabel('Hz');
ylabel(' 幅度');
%设计带阻滤波器
wlp=2850*pi*2/fs;wls=34 00*pi*2/fs;
wup=4900*pi*2/fs;wus= 4600*pi*2/fs; B=(wus-wls); M=ceil(12*pi/B)-1;
wp=[(wls+wlp)/2/pi,(wus +wup)/2/pi];
[bz,az]=fir1(M,wp,'stop', blackman(M+2));
hn=fir1(M,wp,'stop',blac kman(M+2));
% 带阻滤波器窗函数图像figure(5) subplot(1,1,1); freqz(hn);
grid on; axis tight; title(' 窗函数图像'); xlabel('Hz'); ylabel(' 幅度');
% 画滤波后的图figure(6) freqz(bz,az);
grid on; axis tight;
y3=filter(bz,az,x1);
X=fft(y3,20480); %滤波后时域图subplot(2,1,1); plot(y3); grid on;
ylim([-0.03 ,0.03]); title(' 滤波后信号时域波形'); xlabel('time(s)');
ylabel(' 幅度');
%滤波后频谱
subplot(2,1,2);
plot(abs(X(1:10240))); title(' 滤波后信号频谱'); grid on;
ylim([0,20]); xlabel('Hz');
ylabel(' 幅度');
d1=[0.5*cos(2*pi*200*t)] '; % 加噪
x4=x0+d1;
y4=fft(x4,20480);
% 加噪后语音信号的时域图
figure(7) subplot(1,1,1); plot(t,x4)
grid on;
axis tight;
title(' 加噪后的信号时
域');
xlabel('time(s)');
ylabel(' 幅度');
% 加噪后语音信号的频域图
figure(8) subplot(1,1,1); plot(f,abs(y4(1:10240))); grid on;
axis([0,8000,0,20]); title(' 加噪语音信号频谱');
xlabel('Hz');
ylabel(' 幅度');
%加高通滤波
wp1=100*pi*2/fs;
ws1=60*pi*2/fs;
Rp1=1;
As1=100;
[N1,wso]=ellipord(wp1,w s1,Rp1,As1);
[B1,A1]=ellip(N1,Rp1,As 1,wso,'high');
figure(9)
freqz(B1,A1);
grid on;
ylim([0,1]);
y4=filter(B1,A1,x4);
X1=fft(y4,20480); %滤波后时域图subplot(2,1,1); plot(y4);
grid on;
%axis tight; ylim([-
0.03,0.03]); title(' 滤波后信号时域波形');
xlabel('time(s)');
ylabel(' 幅度');
%滤波后频谱
subplot(2,1,2);
plot(abs(X1(1:10240))); title(' 滤波后信号频谱'); grid on;
%ylim([0,20]);
axis tight;
xlabel('Hz');
ylabel(' 幅度');。

相关文档
最新文档