基于MATLAB的语音信号采集与处理课程设计
成绩
课程设计报告
题 目:基于MATLAB的语音信号采集与处理
学生姓名:
学生学号:
系 别: 电气信息工程学院
专 业: 电子信息工程
届 别: 2013
指导教师:
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告
基于MATLAB的语音信号采集与处理
学生:
指导教师:
电气信息工程学院电子与通信工程系
1 课程设计的任务与要求
1.1 课程设计的任务
利用MATLAB对语音信号进行
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。语音信号的“ 短时谱”对于非平稳信号, 它是非周期的, 频谱随时间连续变化, 因此由傅里叶变换得到的频谱无法获知其在各个时刻的频谱特性。如果利用加窗的方法从语音流中取出其中一个短断, 再进行傅里叶变换, 就可以得到该语音的短时谱。
1.2 课程设计的要求
本次课程设计的课题为《基于MATLAB的语音信号采集与处理》,学会运用MATLAB的信号处理功能,采集语音信号,并对语音信号进行滤波及变换处理,观察其时域和频域特性,加深对信号处理理论的理解,并为今后熟练使用MATLAB进行系统的分析仿真和设计奠定基础。
此次实习课程主要是为了进一步熟悉对matlab软件的使用,以及学会利用matlab对声音信号这种实际问题进行处理,将理论应用于实际,加深对它的理解。
1.3 课程设计的研究基础
信号与系统、Matlab程序设计及应用
2基于MATLAB的语音信号采集与处理方案的制定
(1). 语音信号的采集及分析
基于声卡进行数字信号的采集。将话筒插入计算机的语音输入插口上,启动录音机。按下录音按钮,对话筒说话,说完后停止录音。要保存文件时,利用了计算机上的A/D转换器,把模拟的声音信号变成了离散的量化了的数字信号,放音时,它又通过D/A转换器,把保存的数字数据恢复为原来的模拟的声音信号。在 Matlab软件平台下可以利用函数wavread对语音信号进行采样,得到了声音数据变量x1,同时把x1的采样频率fs=22050Hz和数据位Nbits=16Bit放进了MATALB的工作空间。图figure 1
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告 为原始语音信号的时域图形。从图中可以看出在时域环境下,信号呈现出6不规则的信号峰值。通过freqz函数绘制原始语音信号的频率响应图figure 2 。然后对语音信号进行频谱分析,在Matlab中可以利用函数fft对信号行快速傅里叶变换,得到信号的频谱图figure 3,从图中可以看出对各个频点上的随机信号在频域进行抽样 ,抽样频率为 22050Hz。
(2). 给原始信号加上一个高频噪声
在Matlab中人为设计一个固定频率5500Hz的噪声干扰信号。噪声信号通常为随机序列,在本设计中用正弦序列代替,干扰信号构建命令函数为d=[Au*sin(2*pi*5500*t)]',给出的干扰信号为一个正弦信号,针对上面的语音信号 ,采集了其中一段。再对噪音信号进行频谱变换得到其频谱图,从图中可以看出干扰信号,在4000Hz和 6000Hz频点处有一高峰 ,其中 5500Hz 正是本设计所要利用的。 (3). 设计一个滤波器,滤除高频噪声
由模拟滤波器变换为数字滤波器时,采用的是双线性变换法, 它保留的是从模拟到数字域的系统函数表示。在滤波器的选取时, 由于设计方法的侧重点不同, 作出比较是困难的。如果FIR滤波器情况下,最优的设计将是椭圆滤波器。本设计是用双线性变换法设计BW带阻型滤波器的。在 MATLAB中 ,可以利用函数 butterworth,设计FIR滤波器,利用 MATLAB 中的函数freqz 画出各滤波器的频率响应。用设计好的带阻滤波器对含噪语音信号进行滤波,在Matlab中 FIR滤波器利用函数fftfilt对信号进行滤波,FIR滤波器利用函数filter对信号进行滤波。在一个窗口同时画出滤波前后的波形及频谱。从图中可以看出 ,5500Hz看到的高峰消失了 ,语音信号与开始的一样 ,滤波器成功的滤除了干扰信号。利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。
3 基于MATLAB的语音信号采集与处理方案的设计
设计步骤:
1)打开Matlab软件;
2)点击File新建M文件;
3)在编辑框内写入系统Matlab程序;
4)点击保存并运行程序,显示仿真图形。
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告 4 基于MATLAB的语音信号采集与处理的仿真与调试
4.1 仿真软件介绍
Matlab是一种交互式的、以矩阵为基础的软件开发环境,它用于科学和工程的计算与可视化。Matlab的编程功能简单,并且很容易扩展和创造新的命令与函数。应用Matlab可方便地解决复杂数值计算问题。Matlab具有强大的Simulink动态仿真环境,可以实现可视化建模和多工作环境间文件互用和数据交换。Simulink支持连续、离散及两者混合的线性和非线性系统,也支持多种采样速率的多速率系统;Simulink为用户提供了用方框图进行建模的图形接口,它与传统的仿真软件包用差分方程和微分方程建模相比,更直观、方便和灵活。用户可以在Matlab和Simulink两种环境下对自己的模型进行仿真、分析和修改。用于实现通信仿真的通信工具包(Communication
toolbox,也叫Commlib,通信工具箱)是Matlab语言中的一个科学性工具包,提供通信领域中计算、研究模拟发展、系统设计和分析的功能,可以在Matlab环境下独立使用,也可以配合Simulink使用。另外,Matlab的图形界面功能GUI(Graphical User
Interface)能为仿真系统生成一个人机交互界面,便于仿真系统的操作。因此,Matlab在通信系统仿真中得到了广泛应用,本文也选用该工具对数字调制系统进行仿真。
4.2 系统仿真实现
1(用MATLAB对原始语音信号进行分析,画出它的时域波形和频谱 程序:
fs=22050; %语音信号采样频率为22050 x1=readwav('c.wav'); %读取语音信号的数据,赋给变量x1,
sound(x1,22050); %播放语音信号
y1=fft(x1,1024); %对信号做1024点FFT变换
f=fs*(0:511)/1024; %将0到511,步长为1的序列的值与fs相乘并除以
1024的值,赋值给f
figure(1) %创建图形窗1
plot(x1) %做原始语音信号的时域图形
title('原始语音信号');
xlabel('time n'); %x轴的名字是“time n”
ylabel('fuzhi n'); %y轴的名字是“fuzhi n”
figure(2)
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告 freqz(x1) %绘制原始语音信号的频率响应图 title('频率响应图')
figure(3)
两行一列绘图区间的第1个绘图区间 subplot(2,1,1); %创建
plot(abs(y1(1:512))) %做原始语音信号的FFT频谱图 title('原始语音信号FFT频谱')
subplot(2,1,2);
plot(f,abs(y1(1:512))); %abs是绝对值,plot是直角坐标下线性刻度曲线
title('原始语音信号频谱')
xlabel('Hz');
ylabel('幅值');
时域波形和频谱:
图1 原始语音信号
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告
图2 语音信号频率响应图
图3 原始语音信号FFT与信号频谱
2. 给原始的语音信号加上一个高频余弦噪声,频率为5500hz。对加噪后的语音进行分析,并画出其信号时域和频谱图。
程序:
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告 fs=22050;
x1=wavread('c.wav'); %读取语音信号的数据,赋给变量x1 f=fs*(0:511)/1024; %将0到511,步长为1的序列的值与fs相乘并
除以1024的值,赋值给f t=0:1/fs:(length(x1)-1)/fs; %将0到x1的长度减1后的值除以fs的值,且步
长为1/fs的值,的序列的值,赋予t Au=0.03; %噪声幅值
d=[Au*sin(2*pi*5500*t)]'; %所加的噪声是正弦信号
x2=x1+d; %将正弦信号噪声加在语音信号上 sound(x2,22050); %播放语音信号
y1=fft(x1,1024); %对信号y1做1024点FFT变换 y2=fft(x2,1024); %对信号y2做1024点FFT变换 figure(1); %创建图形窗1
plot(t,x2); %做加噪后的信号时域图形(绘出t对x2的线性
图)
title('加噪后的信号');
xlabel('time n'); %x轴的名字是“time n”
ylabel('fuzhi n'); %y轴的名字是“fuzhi n”
figure(2) %创建图形窗2
subplot(2,1,1); % 创建两行一列绘图区间的第1个绘图区间 plot(f,abs(y1(1:512))); %做原始语音信号的频谱图
title('原始语音信号频谱');
xlabel('Hz'); %x轴的名字是“time n”
ylabel('fuzhi'); % y轴的名字是“fuzhi”
subplot(2,1,2); %创建两行一列绘图区间的第2个绘图区间 plot(f,abs(y2(1:512))); %做加噪后的语音信号的频谱图(abs是绝对值,
plot是直角坐标下线性刻度曲线) title('加噪后的信号频谱');
xlabel('Hz'); %x轴的名字是“time n”
ylabel('fuzhi'); % y轴的名字是“fuzhi”
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告 时域波形和频谱:
图4 加噪后的信号时域图
图5 原始信号与加噪后信号频谱对比
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告 与原始信号对比,区别:
先原始信号没加噪音之前0到2000有幅值,在4000到6000之间没有幅值,但是在加了噪音之后4000到6000之间出现最大幅值12,超出正常值。如图5原始信号与加噪后信号频谱对比图所示。
3. 设计合适的滤波器,滤除高频噪声,绘出滤波后的信号频域和时域波形: 程序:
fs=22050;
[x,fs,Nbit]=readwav('c.wav'); sound(x,fs);
t=0:1/22050:(length(x)-1)/22050; figure(1)
plot(x)
title('原始语音信号');
xlabel('time n');
ylabel('fuzhi');
figure(2)
freqz(x);
title('频率响应图');
n=length(x);
y1=fft(x,n);
y2=fftshift(x);
f=0:fs/n:fs*(n-1)/n;
figure(3)
subplot(2,1,1);
plot(abs(y2));
title('原始语音信号FFT频谱');
subplot(2,1,2)
plot(f,abs(y2));
title('原始语音信号频谱'); %加噪声
k=1:1:n;
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告
c1=10*sin(2*pi*2000*k); figure(4)
plot(k,c1)
title('噪声时域图');
figure(5)
freqz(c1);
title('噪声信号频率响应')
s=length(c1);
xc=fft(c1,s);
xcc=fftshift(xc);
f=0:fs/s:fs*(s-1)/s; figure(6)
plot(f,abs(xcc))
title('噪声信号频谱图'); %噪声与原始信号叠加 z=x'+c1;
y3=fft(z,s);
y4=fftshift(y3);
f=0:fs/s:fs*(s-1)/s; figure(7)
plot(f,abs(y4));
axis([0 8000 0 400]); title('含语音信号的频谱');
figure(8)
subplot(2,1,1);
plot(f,abs(y4))
title('加噪音后的语音频谱')
%用双线性变换法设计巴特沃思低通滤波器
wp=0.25*pi; %通带截止频率 ws=0.3*pi; %阻带截止频率 Rp=1; %通带最大衰减(db)
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告 Rs=15; %阻带最大衰减(db)
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'); %选择滤波器的最小阶数(估算得到
Butterworth低通滤波器的最小阶数N和
3dB截止频率Wc)
[Z,P,K]=buttap(N); %创建Butterworth低通滤波器原型 [Bap,Aap]=zp2tf(Z,P,K); %将零极点增益转换为普遍分子,分母 [b,a]=lp2lp(Bap,Aap,Wn); %将普遍的分子和分母转换为以Wn为截止
频率
[bz,az]=bilinear(b,a,Fs); %用双线性变换法实现模拟滤波器到数字滤
波器的转换(模拟转换为数字) [H,W]=freqz(bz,az); %求频率响应
figure(9)
plot(W*Fs/(2*pi),abs(H)) %绘制Butterworth低通滤波器频率响应曲
线
grid %添加图格
xlabel('频率,Hz')
ylabel('频率响应幅度')
title('Butterworth')
f1=filter(bz,az,z); %利用上面已做好的滤波器(已bz和az
为特征的滤波器)对x2信号进行滤波,
赋值给f1
figure(10)
subplot(2,1,1) %创建两行一列绘图区间的第1绘图区间 plot(t,z) %做加噪后的信号时域图形 title('滤波前的时域波形');
subplot(2,1,2) %创建两行一列绘图区间的第2绘图区间
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告 plot(t,f1); title('滤波后的时域波形');
sound(f1,22050); %播放语音信号
p=length(f1);
F0=fft(f1,p);
f=0:fs/p:fs*(s-1)/p;
figure(11)
y2=fft(z,1024); %对信号y2做1024点FFT变换 subplot(2,1,1); %创建两行一列绘图区间的第1绘图区间 plot(f,abs(y4)); title('滤波前的频谱')
xlabel('Hz'); %x轴的名字是“Hz” ylabel('fuzhi'); %y轴的名字是“fuzhi” subplot(2,1,2)
F1=plot(f,abs(F0));
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi')
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告 时域波形和频谱:
图6 低通滤波器频率响应曲线
图7 滤波前后时域波形图
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告
图8 滤波前后频谱图
与原噪音信号对比,区别:
滤波后的输出波形和原始语音加噪声信号的图形发生了一些通过对比分析可知,
变化,在3000-6000Hz之间的信号消失,出现0-1000和7000-8000之间的信号。滤波后的输出波形明显在对应时间幅度比原语音加噪声信号的要小,而且滤波的效果也与滤波器的选择有关,可以看出滤波器的性能差异以及参数的调节会对滤波器产生一定的影响,并且通过回放可以发现滤波前后的声音有变化.低通滤波后,已很接近原来的声音,人耳几乎辨别不出 。从频谱图中我们还可以看出声音的能量信号主要集中在低频部分,说明高频语音信号被滤出,滤波器达到既定要求。
5 总结
5.1 设计小结
利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。
5.2 收获体会
通过MATLAB课程设计,我对MATLAB这个仿真软件有了更进一步的认识和了解。在设计过程中,我通过自己摸索,查阅资料,并且在老师的指导下完成了:语音信号
淮南师范学院电气信息工程学院2013届电子信息工程专业课程设计报告 的采集及分析;给原始信号加上一个高频噪声;设计一个滤波器,滤除高频噪声;并最终将课程设计报告总结完毕。
在整个设计过程中我懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力, 使自己充分体会到了在设计过程中的成功喜悦。虽然这个设计做的不怎么好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。
在没有做课程设计以前,觉得课程设计只是对知识的单纯总结,但是通过这次课程设计发现自己的看法有点太片面,课程设计不仅是对前面所学知识的一种检验,也是对自己能力的一种提高,通过这次课程设计使自己明白了原来的那点知识是非常欠缺的,要学习的东西还很多,通过这次课程设计,明白学习是一个长期积累的过程,在以后的工作和生活中都应该不断的学习,努力提高自己的知识和综合素质。 参考文献
[1]张志涌 《精通MATLAB6.5》
[2]吴大正 《信号与线性系统分析》
[3]甘俊英 胡异丁 《基于MATLAB的信号与系统实验指导》
[4] 张雪英 《数字语音处理及MATLAB仿真》
[5] 奥本海姆、 等 《信号与系统(第2版)》
[6] 韩宪柱、 刘日 《声音素材拾取与采集》
[7] 劳伦斯 R.拉比纳(Lawrence R.Rabiner)、 罗纳德 W.谢弗(Ronald W. Schafer) 《数字语音处理理论与应用》
[8]数字图像处理及MATLAB实现/杨杰主编.-北京:电子工业出版社,2010.2; [9]MATLAB程序设计与应用/刘卫国主编.-2版.-北京:高等教育出版社,2006.7(2010重印); [10]信号与系统实训指导(MATLAB版)/杜晶晶,金学波编著.-西安:西安电子科技大学出版社,2009.8;
[11]MATLAB实用教程(第二版)/(美)穆尔著,高会生,刘童娜,李聪聪译.-北京:电子工业出版社,2010;
[12]MATLAB通信工程仿真/张德丰主编.-机械工业出版社,2010;