基于matlab的语音信号处理程序
- 格式:doc
- 大小:18.00 KB
- 文档页数:2
数字信号处理2.1.2 采样频率采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。
采样频率越高,即采样的间隔时间越短,则在单位时间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。
采样频率与声音频率之间有一定的关系,根据奎斯特理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原成为原来的声音。
这就是说采样频率是衡量声卡采集、记录和还原声音文件的质量标准。
2.1.3 采样位数与采样频率采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。
采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。
采样位数和采样率对于音频接口来说是最为重要的两个指标,也是选择音频接口的两个重要标准。
无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度范围。
每增加一个采样位数相当于力度范围增加了6dB。
采样位数越多则捕捉到的信号越精确。
对于采样率来说你可以想象它类似于一个照相机,44.1kHz意味着音频流进入计算机时计算机每秒会对其拍照达441000次。
显然采样率越高,计算机摄取的图片越多,对于原始音频的还原也越加精确。
2.2 语音信号的分析及处理方法2.2.1 语音的打开在matlab平台下,利用wavread进行语音采集, 得到语音的分辨率、采样率以频率特性。
2.2.2 语音信号的频谱分析画出语音信号的时域波形,利用函数fft对信号进行快速傅里叶变换,得到信号的频谱特性。
2.2.3产生噪声信号利用matlab产生固定频率的交流噪声,并加到语音信号中去,得到被污染的语音信号,并播放语音信号,利用函数fft对噪声进行快速傅里叶变换,得到噪声的频谱特性。
2.2.4 数字滤波器设计原理数字滤波是数字信号分析中最重要的组成部分之一,与模拟滤波相比,它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等优点。
基于MATLAB的语音信号处理与识别系统设计与实现一、引言语音信号处理与识别是人工智能领域中的重要研究方向之一,随着深度学习和人工智能技术的不断发展,基于MATLAB的语音信号处理与识别系统设计与实现变得越来越受到关注。
本文将介绍如何利用MATLAB进行语音信号处理与识别系统的设计与实现。
二、MATLAB在语音信号处理中的应用MATLAB作为一种强大的科学计算软件,提供了丰富的工具箱和函数库,可以方便地进行语音信号处理。
在语音信号处理中,MATLAB可以用于语音信号的采集、预处理、特征提取、模型训练等各个环节。
通过MATLAB提供的工具,可以高效地对语音信号进行分析和处理。
三、语音信号处理流程1. 语音信号采集在语音信号处理系统中,首先需要对语音信号进行采集。
通过MATLAB可以实现对声音的录制和采集,获取原始的语音信号数据。
2. 语音信号预处理采集到的语音信号数据通常包含噪声和杂音,需要进行预处理以提高后续处理的准确性。
预处理包括去噪、降噪、滤波等操作,可以有效地净化语音信号数据。
3. 特征提取在语音信号处理中,特征提取是一个关键步骤。
通过MATLAB可以提取出语音信号的频谱特征、时域特征等信息,为后续的模式识别和分类打下基础。
4. 模型训练与识别利用MATLAB可以构建各种机器学习模型和深度学习模型,对提取出的特征进行训练和识别。
通过模型训练,可以实现对不同语音信号的自动识别和分类。
四、基于MATLAB的语音信号处理与识别系统设计1. 系统架构设计基于MATLAB的语音信号处理与识别系统通常包括数据采集模块、预处理模块、特征提取模块、模型训练模块和识别模块。
这些模块相互配合,构成一个完整的系统架构。
2. 界面设计为了方便用户使用,可以在MATLAB中设计用户友好的界面,包括数据输入界面、参数设置界面、结果展示界面等。
良好的界面设计可以提升系统的易用性和用户体验。
五、基于MATLAB的语音信号处理与识别系统实现1. 数据准备首先需要准备好用于训练和测试的语音数据集,包括正样本和负样本。
MATLAB用于语音信号的处理一.设计目的通过该设计,要求对语音信号的采集、处理、传输、显示、和存储等有一个系统的掌握和理解。
理解信号采样频率的概念,掌握对语音信号进行时域和频域分析方法,了解滤波器的概念及原理。
二.设计内容1.语音信号的采集2.语音信号的频谱分析3.设计数字滤波器4.用滤波器对信号进行滤波5.分析滤波后得到的语音信号的频谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化6.回放语音信号三.总体方案设计1.利用Windows下的录音机或其他软件,录制一段语音信号,时间控制在1s左右,然后再MATLAB软件平台下,利用函数wavread对录制的语音信号进行采样,记住采样频率和采样点数。
MATLAB函数:Wavread功能对语音信号进行采样,wavread函数的格式为:[y,fs,bits]=wavread('d:\kugou\2.wav',[n1,n2]),返回文件中语音信号从n1到n2之间的样本。
2.先画出语音信号的时域波形,然后对语音信号进行快速傅里叶变换,得到信号的频谱特性。
MATLAB函数:fft功能是实现快速傅里叶变换,fft函数的格式为:y=fft(y),返回向量x的不连续fourier变换。
3.根据低通滤波器的性能指标设计出滤波器。
MATLAB函数:Ellipord功能是要求低通滤波器的参数,ellipord函数的格式为:[N,Wn]=ellipord(Wp,Ws,Rp,Rs),返回设计滤波器的阶数和截止频率。
Ellip功能是设计IIR滤波器,ellip函数的格式为:[b,a]=ellip(N,Rp,Rs,Wn),返回设计滤波器的低通滤波器的参数。
4.用设计的滤波器对采集的语音信号进行滤波。
MATLAB函数:filter功能对信号进行滤波,filter函数的格式为:y=filter(b,a,x),由给定的滤波器对x进行滤波。
专题研讨四、信号与系统综合应用确定题目(根据个人兴趣、结合实际确定题目,可从下面参考题目中选择,也可自由确定):基于matlab的语音信号的基本处理参考题目:题目1:含噪信号滤波题目2:双音多频信号的产生与检测题目3:磁盘驱动系统仿真题目4:卡尔曼滤波器的应用题目5:应用反馈扩大放大器的带宽(以上只是本专题的部分题目)开题报告课题实施过程记录包括仿真程序、仿真结果、结果分析、方案完善等 ○1语音信号的制作及描述 1) 制作语音文件:用windows 录音机录制一小段语音文件"333.wav ”,内容为"信号与信息系统",由一同学播音. 2) 用matlab 播放”333.wav ”仿真程序:3) [y,Fs,bits]=wavread('333.wav'); sound(y,Fs);pause;4) 绘画出语音文件的时域和频域波形: 仿真程序:[y,Fs,bits]=wavread('333.wav'); plot(y);仿真结果:0123456789x 104-0.8-0.6-0.4-0.20.20.40.6结果分析:随着时间变化,声音能量图形 方案完善:1.时间轴有问题,与实际的时间不一样.2.语音信号的频域分析更清楚.仿真程序:[y,Fs,bits]=wavread('333.wav');y=y(:,1);sLength=length(y); Y = fft(y,sLength);Pyy = Y.* conj(Y) / sLength; halflength=floor(sLength/2); f=Fs*(0:halflength)/sLength; figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)'); t=(0:sLength-1)/Fs; figure;plot(t,y);xlabel('Time(s)');仿真结果:0.51 1.52 2.5x 104Frequency(Hz)00.20.40.60.81 1.2 1.4 1.6 1.82-0.8-0.6-0.4-0.20.20.40.6Time(s)结果分析:频域分析是从另一个角度观察信号;语音信号的一般频域范围"200~2000"Hz ○2语音信号抽取及倍插仿真程序:[y,Fs,bits]=wavread('111.wav'); sound(y,Fs/2);pause;[y,Fs,bits]=wavread('111.wav'); sound(y,2*Fs);pause;仿真结果与分析:以Fs/2及2*Fs 播放的语音信号存在失真, 方案完善:需要做出波形,做更直观的观察. ○3语音信号的加噪1)语音信号加高频噪音及播放. 仿真程序:[y,Fs,bits]=wavread('333.wav'); y=y(:,1);sLength=length(y);t=(0:sLength-1)/Fs;f=50000;A=0.5;d=A*cos(2*pi*f*t)';y=y+d;sound(y,Fs);仿真结果:播放时伴有尖锐的”吱吱”声.结果分析:由于加入高频成分余弦信号,信号叠加后出现了尖锐的噪音.2)加噪后的语音信号的时域和频域波形.仿真程序:[y,Fs,bits]=wavread('333.wav');y=y(:,1);sLength=length(y);t=(0:sLength-1)/Fs;f=50000;A=0.05;d=A*cos(2*pi*f*t)';y1=y+d;sLength=length(y1);Y = fft(y1,sLength);Pyy = Y.* conj(Y) / sLength;halflength=floor(sLength/2);f=Fs*(0:halflength)/sLength;figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');仿真结果:00.20.40.60.81 1.2 1.4 1.6 1.82-0.8-0.6-0.4-0.20.20.40.6Time(s)0.51 1.522.5x 10405101520253035404550Frequency(Hz)结果分析:时域波形跟加噪前没有什么明显的区别.在频域上我们发现有一个近6000Hz的高频成分,这是产生的噪音的根本所在.方案完善:运用subplot将加噪前和加噪后的时域和频域波形进行对比,效果会更好.○4数字滤波这一部分我们学习了函数BUTTER,进行了最简单的数字滤波.[b,a]=butter(N,wc);代表数字低通滤波器,wc代表归一化频率(0<wc<=1,等于一时为奈奎斯特频率);N为滤波器的阶数.y2=filter(b,a,y1);对信号y1进行巴特滤波,滤波器为[b,a]系统滤波后信号的效果播放.仿真程序:[y,Fs,bits]=wavread('333.wav');y=y(:,1);sLength=length(y);t=(0:sLength-1)/Fs;f=50000;A=0.05;d=A*cos(2*pi*f*t)';y1=y+d;N=2;wc=[0.01,0.07];[b,a]=butter(N,wc);y2=filter(b,a,y1);sound(y2,Fs);仿真结果:原先的噪声消失,语音信号变回原样.滤波器为低通滤波器,滤去高频成分.方案完善:1.画出滤波后的时域和频域波形2. 对滤波器进行系统分析1.画出滤波后的时域和频域波形仿真程序:[y,Fs,bits]=wavread('333.wav');y=y(:,1);sLength=length(y);t=(0:sLength-1)/Fs;f=50000;A=0.05;d=A*cos(2*pi*f*t)';y1=y+d;plot(t,y);xlabel('Time(s)');N=2;wc=[0.01,0.07];[b,a]=butter(N,wc);y2=filter(b,a,y1); sLength1=length(y2); Y1 = fft(y2,sLength1);Pyy = Y1.* conj(Y1) / sLength1; halflength1=floor(sLength1/2); f1=Fs*(0:halflength1)/sLength1; figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)'); t=(0:sLength-1)/Fs; figure;plot(t,y2);xlabel('Time(s)');仿真结果:00.51 1.52 2.5x 1040.511.522.53Frequency(Hz)00.20.40.60.81 1.2 1.4 1.6 1.82-0.8-0.6-0.4-0.20.20.40.6Time(s)结果分析:基本效果良好,有少许失真. 2. 对滤波器进行系统分析 仿真程序:w=linspace(0,6000,10000); wc=[0.01 0.07]; N=2;[b,a]=butter(N,wc); H=freqz(b,a,w); plot(w,abs(H)); axis([0 2500 0 1.5]);仿真结果:010002000300040005000600000.511.5○3RC 模拟滤波(物理形式熟悉) [y,Fs,bits]=wavread('333.wav');%¶Á³öÐźţ¬²ÉÑùÂʺͲÉÑùλÊý¡£y=y(:,1);sLength=length(y);t=(0:sLength-1)/Fs;f=50000;A=0.5;d=A*cos(2*pi*f*t)';y1=y+d;RC=0.001;b=1/RC;a=[1,1/RC];sys=tf(b,a);y2=lsim(sys,y1,t);sound(y2,Fs);结果:效果良好,声音恢复.RC 滤波器的波特图RC=0.001;w=linspace(0,2,1024);b=1/RC;a=[1,1/RC];g=tf(b,a);bode(g);xlabel('w');ylabel('H(jw)');-40-30-20-100M a g n i t u d e (d B)101102103104105H (j w ) (d e g )Bode Diagramw (rad/sec)总结报告摘要:利用所学的知识对实际语音信号进行时域,频域分析;体会信号的抽样定理,即信号的抽取和倍插;运用信号叠加对信号进新加噪(高频),并用数字滤波器butter 滤去高频成分去噪;课题原理框图:课题最终仿真程序:○1语音信号的制作及描述; [y,Fs,bits]=wavread('333.wav');sound(y,Fs);pause;[y,Fs,bits]=wavread('333.wav');y=y(:,1);sLength=length(y);Y = fft(y,sLength);Pyy = Y.* conj(Y) / sLength;halflength=floor(sLength/2);f=Fs*(0:halflength)/sLength;figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');t=(0:sLength-1)/Fs;figure;plot(t,y);xlabel('Time(s)');○2语音信号抽取及倍插; [y,Fs,bits]=wavread('111.wav');sound(y,Fs/2);pause;[y,Fs,bits]=wavread('111.wav');sound(y,2*Fs);pause;○3语音信号的加噪;[y,Fs,bits]=wavread('333.wav');y=y(:,1);sLength=length(y);t=(0:sLength-1)/Fs;f=50000;A=0.05;d=A*cos(2*pi*f*t)';y1=y+d;N=2;wc=[0.01,0.07];[b,a]=butter(N,wc);y2=filter(b,a,y1);sound(y2,Fs);[y,Fs,bits]=wavread('333.wav');y=y(:,1);sLength=length(y);t=(0:sLength-1)/Fs;f=50000;A=0.05;d=A*cos(2*pi*f*t)';y1=y+d;sLength=length(y1);Y = fft(y1,sLength);Pyy = Y.* conj(Y) / sLength;halflength=floor(sLength/2);f=Fs*(0:halflength)/sLength;figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');○4滤波器.[y,Fs,bits]=wavread('333.wav');y=y(:,1);sLength=length(y);t=(0:sLength-1)/Fs;f=50000;A=0.05;d=A*cos(2*pi*f*t)';y1=y+d;N=2;wc=[0.01,0.07];[b,a]=butter(N,wc);y2=filter(b,a,y1);sound(y2,Fs);[y,Fs,bits]=wavread('333.wav');y=y(:,1);sLength=length(y);t=(0:sLength-1)/Fs;f=50000;A=0.05;d=A*cos(2*pi*f*t)';y1=y+d;plot(t,y);xlabel('Time(s)');N=2;wc=[0.01,0.07];[b,a]=butter(N,wc);y2=filter(b,a,y1);sLength1=length(y2);Y1 = fft(y2,sLength1);Pyy = Y1.* conj(Y1) / sLength1;halflength1=floor(sLength1/2);f1=Fs*(0:halflength1)/sLength1;figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');t=(0:sLength-1)/Fs;figure;plot(t,y2);xlabel('Time(s)');w=linspace(0,6000,10000);wc=[0.01 0.07];N=2;[b,a]=butter(N,wc);H=freqz(b,a,w);plot(w,abs(H));axis([0 2500 0 1.5]);[y,Fs,bits]=wavread('333.wav');%¶Á³öÐźţ¬²ÉÑùÂʺͲÉÑùλÊý¡£y=y(:,1);sLength=length(y);t=(0:sLength-1)/Fs;f=50000;A=0.5;d=A*cos(2*pi*f*t)';y1=y+d;RC=0.001;b=1/RC;a=[1,1/RC];sys=tf(b,a);y2=lsim(sys,y1,t);sound(y2,Fs);RC=0.001;w=linspace(0,2,1024);b=1/RC;a=[1,1/RC];g=tf(b,a);bode(g);xlabel('w');ylabel('H(jw)');课题成果:1)了解了语音信号matlab处理的基本过程及思路,重点复习了波形绘制,系统响应;2)体会到理论与实践的结合,语音信号的处理和实际生活接近,趣味性强.本课题还存在哪些问题?1)对matlab的一些函数比较模糊,比如信号的长度估计,butter滤波函数的运用2)对于信号的滤波只是在很理想的高频情形下,过于单一简单,对实际的噪声滤波还有很多需要完善的.研究性学习自我体会与评价通过研究性学习你在哪些方面有所收获?(如学习方法、合作精神、探索精神、创新意识等)。
MATLAB课程设计---基于MATLAB的语音信号处理武汉理工大学《基于MATLAB的语音信号处理》课程设计说明书课程设计任务书学生姓名:陈欢专业班级: 通信0902班指导教师:徐文君工作单位: 信息工程学院题目: 基于MATLAB的语音信号处理设计任务与要求:1、Matlab的基本运算(1) 极限的计算、微分的计算、积分的计算、级数的计算、求解代数方程、求解常微分方程;(2) 矩阵的最大值、最小值、均值、方差、转置、逆、行列式、特征值的计算、矩阵的相乘、右除、左除、幂运算;2、基于MATLAB的语音信号处理(1)完成语音信号的采集,利用windows自带的录音机或其他软件,录制一段午语音,时间在1s以内,并对信号进行采样,画出采样信号的时域和频域波、(2)要求用窗函数法和双线性变换法设计三种数字滤波器(3)用设计好滤波器的对语音信号进行滤波处理,画出处理后的时域和频域波形。
(4)对滤波前后的语音信号频谱进行对比,并对设计结果进行分析。
参考文献:1、易克初,田斌,付强.语音信号处理.北京:国防工业出版社,2000年2、贾永红.数字图像处理.武汉大学出版社,2003年9月时间安排:第16周安排任务,分组。
第17周设计仿真,撰写报告。
第18周完成设计,提交报告,答辩。
指导教师签名: 2011 年月日系主任(或责任教师)签名: 2011 年月日1武汉理工大学《基于MATLAB的语音信号处理》课程设计说明书目录摘要 ..................................................................... .. (1)ABSTRACT ........................................................... ................................................... 2 1 课程设计的基本原理 ..................................................................... ...................... 3 1.1 设计要求 ..................................................................... .. (3)1.1.1 采用MATLAB基本运算如下 (3)1.1.2 基于MATLAB的语音信号处理 (3)1.2.Matlab的基本运算 ..................................................................... .. (4)1.2.1极限的计算 ..................................................................... . (4)1.2.2微分的计算 ..................................................................... . (4)1.2.3积分的计算 ..................................................................... . (5)1.2.4 级数的计算 ..................................................................... (5)1.2.5 求解代数方程 ..................................................................... (5)1.2.6 求解常微分方程 ..................................................................... .. (6)1.2.7 矩阵的基本运算 ..................................................................... .. (6)1.2.8 多项式的基本运算 ..................................................................... ....... 6 1.3 语音信号的录入与打开 ..................................................................... ......... 8 1.4 时域信号的FFT分析 ..................................................................... ............ 8 1.5 数字滤波器设计原理 ..................................................................... . (8)1.5.1 用窗函数法设计FIR滤波器 (9)1.5.2 用双线性变换法设计IIR数字滤波器 (9)2 语音信号分析和处理过程 ..................................................................... ..............10 2.1 语音信号的采集 ..................................................................... ...................10 2.2 窗函数法设计 ..................................................................... .. (11)2.2.1窗函数法低通滤波器 ..................................................................... (11)2.2.2 窗函数法高通滤波器 ..................................................................... ..142.2.3 窗函数法带通滤波器 ..................................................................... ..15 2.3双极性变换法设计 ..................................................................... . (16)2.3.1 双极性变换法设计低通滤波器 (18)2.3.2 双极性变换法设计高通滤波器 (20)2.3.3 双极性变换法设计带通滤波器 (24)2.4 结果分析 ..................................................................... ...............................26 3 总结 ..................................................................... ................................................27 参考文献 ..................................................................... .. (28)2武汉理工大学《基于MATLAB的语音信号处理》课程设计说明书摘要MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。
(完整word版)基于matlab的语音信号处理(2) 数字信号处理设计报告题目:基于Matlab的语音信号处理系别信息工程学院专业班级通信工程1342学生姓名范泉指导教师吉李满提交日期2016年6月10日(完整word版)基于matlab的语音信号处理(2)摘要数字信号处理的目的是对真实世界的连续模拟信号进行测量或滤波。
因此在进行数字信号处理之前需要将信号从模拟域转换到数字域,这通常通过模数转换器实现.而数字信号处理的输出经常也要变换到模拟域,这是通过数模转换器实现的。
数字信号处理的算法需要利用计算机或专用处理设备如数字信号处理器(DSP)和专用集成电路(ASIC)等。
数字信号处理技术及设备具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等突出优点,这些都是模拟信号处理技术与设备所无法比拟的。
本设计的具体内容是基于MATLAB的语音信号处理,核心算法是离散傅立叶变换(DFT),是DFT使信号在数字域和频域都实现了离散化,从而可以用通用计算机处理离散信号。
然后添加噪声信号,选用合适的滤波器对噪声信号进行滤除,使数字信号处理从理论走向实用。
MATLAB功能强大,可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
用MATLAB来解算问题要比用其他语言简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
关键词:数字信号处理器;离散傅立叶变换;MATLAB目录第一章绪论 (1)1.1课题研究的目的 (1)1。
如何使用Matlab进行语音信号处理引言:语音信号处理是一个重要的领域,在各种应用中都有广泛的应用,如语音识别、语音合成、音频编码等。
而Matlab是一个功能强大的工具,提供了许多用于语音信号处理的函数和工具箱,使得处理语音信号变得更加简单和高效。
本文将介绍如何使用Matlab进行语音信号处理的基本流程和一些常用的处理方法。
一、语音信号处理基础知识1.1 语音信号的特点语音信号是一种时变信号,具有时间和频率的特性。
它由一系列的声音波形组成,通过声音传感器(如麦克风)捕获并转换为电信号。
语音信号具有频谱的特征,包括基频、共振峰等。
了解语音信号的基本特点是进行语音信号处理的前提。
1.2 语音信号处理的基本流程语音信号处理的基本流程包括预处理、特征提取、模型建立、参数估计和应用等步骤。
预处理包括去噪、降采样等操作,特征提取包括MFCC(Mel频率倒谱系数)等方法,模型建立包括隐藏马尔可夫模型(HMM)等,参数估计通过最大似然估计等方法进行参数估计,应用包括语音识别、语音合成等。
二、使用Matlab进行语音信号处理的基本方法2.1 读取和保存语音文件Matlab提供了许多函数用于读取和保存语音文件。
可使用"audioread"函数读取.wav格式的语音文件,并得到语音信号的时域波形,可以使用"audiowrite"函数保存处理后的语音文件。
2.2 语音信号的时域和频域分析Matlab提供了许多函数用于对语音信号进行时域和频域分析。
可以使用"waveform"函数绘制语音信号的波形,使用"spectrogram"函数绘制语音信号的频谱图。
2.3 语音信号的预处理在语音信号处理之前,通常需要对语音信号进行预处理,如去除噪声、降低采样率等。
Matlab提供了丰富的函数和工具箱用于语音信号的预处理,如"noisegate"函数用于去除噪声,"resample"函数用于降低采样率。
[y,fs,bits]=wavread('E:\English of university\12.wav');%(该语音文件放在 E 盘下)sound(y,fs,bits);%使用该语句播放原始语音信号Y=fft(y,4096);figure(1)subplot(211),plot(y); title('原始信号波形');subplot(212),plot(abs(Y)); title('原始信号频谱');fp=1000;fc=1200;As=100;Ap=1;fs=44100;%滤波器参数wc=2*fc/fs;wp=2*fp/fs;%变换为数字域参数N=ceil((As-7.95)/(14.36*(wc-wp)/2))+1;%滤波器阶数beta=0.1102*(As-8.7);%凯赛窗参数 betaWin=kaiser(N+1,beta);%生成窗函数b=fir1(N,wc,Win);%设计滤波器figure(2)freqz(b,1,512,fs);%画出频谱图x=fftfilt(b,y);%滤波X=fft(x,4096);%FFTsound(x,fs,bits);%回放语音信号figure(3)subplot(211),plot(x); title('凯赛窗设计的低通滤波器滤波后信号波形');subplot(212),plot(abs(X)); title('凯赛窗设计的低通滤波器滤波后信号频谱');fp1=1200; fp2=3000;fc1=1000;fc2=3200;As=100;Ap=1;fs=22050;%滤波器参数wc1=2*fc1/fs;wp1=2*fp1/fs;wc2=2*fc2/fs;wp2=2*fp2/fs;width=min((wp1-wc1),(wc2-wp2));%转换为数字域参数N=ceil((As-7.95)/(14.36*width/2))+1;%滤波器阶数beta=0.1102*(As-8.7);%凯赛窗参数 betaWin=kaiser(N+1,beta);%生成窗函数wc=[wc1 wc2];b=fir1(N,wc,Win);figure(4)freqz(b,1,512,fs);%画出滤波器频谱图(上图所示)x=fftfilt(b,y);%滤波X=fft(x,4096);%FFTsound(x,fs,bits);%回放语音信号figure(5)subplot(211),plot(x); title('凯赛窗设计的带通滤波器滤波后信号波形');subplot(212),plot(abs(X)); title('凯赛窗设计的带通滤波器滤波后信号频谱');fp=5000;fc=4800;As=100;Ap=1;fs=22050;%高通滤波器参数wc=2*fc/fs;wp=2*fp/fs;N=ceil((As-7.95)/(14.36*(wp-wc)/2))+1;%滤波器阶数beta=0.1102*(As-8.7);%凯赛窗参数 betaWin=kaiser(N+1,beta);%生成窗函数100b=fir1(N,wc,'high',Win);%设计高通滤波器-100200figure(6)freqz(b,1,512,fs);%-画出频谱图如右图所示x=fftfilt(b,y);%滤波X=fft(x,4096);%FFTsound(x,fs,bits);%回放语音信号figure(7)subplot(211),plot(x); title('凯赛窗设计的高通滤波器滤波后信号波形');subplot(212),plot(abs(X)); title('凯赛窗设计的高通滤波器滤波后信号频谱');fp=1000;fc=1200;As=100;Ap=1;ffs=44100;wc=2*fc/ffs;wp=2*fp/ffs;[n,wn]=ellipord(wp,wc,Ap,As);%求阶数 N 和通带截止频率[num,den]=ellip(n,Ap,As,wn);%设计椭圆滤波器figure(8)freqz(num,den,256,ffs);%画出频率响应x=filter(num,den,y);%滤波X=fft(x,4096);%FFTfigure(9)subplot(211),plot(x); title('双线性变换法设计的低通滤波器滤波后信号波形'); subplot(212),plot(abs(X)); title('双线性变换法设计的低通滤波器滤波后信号频谱'); fp=[3000,8000];fc=[1000,10000];Ap=1;As=100;ffs=44100wc=2*fc/ffs;wp=2*fp/ffs;[n,wn]=ellipord(wp,wc,Ap,As);[num,den]=ellip(n,Ap,As,wn);figure(10)freqz(num,den,256,ffs);x=filter(num,den,y);%滤波X=fft(x,4096);%FFTfigure(11)subplot(211),plot(x); title('双线性变换法设计的带通滤波器滤波后信号波形'); subplot(212),plot(abs(X)); title('双线性变换法设计的带通滤波器滤波后信号频谱'); fp=5000;fc=4800;As=100;Ap=1;ffs=44100;wc=2*fc/ffs;wp=2*fp/ffs;[n,wn]=ellipord(wp,wc,Ap,As);[num,den]=ellip(n,Ap,As,wn,'high');x=filter(num,den,y);X=fft(x,4096);figure(12)freqz(num,den,256,ffs);figure(13)subplot(211),plot(x); title('双线性变换法设计的高通通滤波器滤波后信号波形'); subplot(212),plot(abs(X)); title('双线性变换法设计的高通通滤波器滤波后信号频谱');请将以上部分加入到记事本内并改为m文件GUIGUI.fig此文件放到桌面与下面的GUI.m 文件一起用程序如下(如上所述改为GUI.m文件):function varargout = GUI(varargin)% GUI MATLAB code for GUI.fig% GUI, by itself, creates a new GUI or raises the existing% singleton*.%% H = GUI returns the handle to a new GUI or the handle to% the existing singleton*.%% GUI('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in GUI.M with the given input arguments.%% GUI('Property','Value',...) creates a new GUI or raises the% existing singleton*. Starting from the left, property value pairs are % applied to the GUI before GUI_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application % stop. All inputs are passed to GUI_OpeningFcn via varargin.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help GUI% Last Modified by GUIDE v2.5 02-Jan-2014 22:57:31% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @GUI_OpeningFcn, ...'gui_OutputFcn', @GUI_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before GUI is made visible.function GUI_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% varargin command line arguments to GUI (see VARARGIN)% Choose default command line output for GUIhandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes GUI wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line. function varargout = GUI_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = handles.output;% --- Executes on button press in pushbutton5.function pushbutton5_Callback(hObject, eventdata, handles)% hObject handle to pushbutton5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)function edit1_Callback(hObject, eventdata, handles)% hObject handle to edit1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit1 as text% str2double(get(hObject,'String')) returns contents of edit1 as a double% --- Executes during object creation, after setting all properties.function edit1_CreateFcn(hObject, eventdata, handles)% hObject handle to edit1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton3.function pushbutton3_Callback(hObject, eventdata, handles)% hObject handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% --- Executes on button press in pushbutton4.function pushbutton4_Callback(hObject, eventdata, handles)% hObject handle to pushbutton4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)。
语音信号处理系统设计摘要:语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科。
语音信号处理的目的是得到某些参数以便高效传输或存储,或者是用于某种应用,如人工合成出语音、辨识出讲话者、识别出讲话内容、进行语音增强等。
本文简要介绍了语音信号采集与分析以及语音信号的特征、采集与分析方法,并在采集语音信号后,在MATLAB 软件平台上进行频谱分析,并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。
利用MATLAB来读入(采集)语音信号,将它赋值给某一向量,再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析,再依据实际情况对它进行滤波,然后我们还可以通过sound命令来对语音信号进行回放,以便在听觉上来感受声音的变化。
关键词:Matlab,语音信号,傅里叶变换,滤波器1课程设计的目的和意义本设计课题主要研究语音信号初步分析的软件实现方法、滤波器的设计及应用。
通过完成本课题的设计,拟主要达到以下几个目的:1.1.了解Matlab软件的特点和使用方法。
1.2.掌握利用Matlab分析信号和系统的时域、频域特性的方法;1.3.掌握数字滤波器的设计方法及应用。
1.4.了解语音信号的特性及分析方法。
1.5.通过本课题的设计,培养学生运用所学知识分析和解决实际问题的能力。
2 设计任务及技术指标设计一个简单的语音信号分析系统,实现对语音信号时域波形显示、进行频谱分析,利用滤波器滤除噪声、对语音信号的参数进行提取分析等功能。
采用Matlab设计语言信号分析相关程序,并且利用GUI设计图形用户界面。
具体任务是:2.1.采集语音信号。
2.2.对原始语音信号加入干扰噪声,对原始语音信号及带噪语音信号进行时频域分析。
2.3.针对语音信号频谱及噪声频率,设计合适的数字滤波器滤除噪声。
2.4.对噪声滤除前后的语音进行时频域分析。
2.5.对语音信号进行重采样,回放并与原始信号进行比较。
wavefile='a.wav';
[y,fs,nbits]=wavread(wavefile);%读取信号,采样率和采样位数[10000,19999] sound(y,fs,nbits)
fs %采样频率这里每秒22050,发现采样频率为音频信号的典型值22050Hz nbits
Y=fft(y,1024);%数据点数
whos y
figure(1),
subplot(2,1,1),plot(y);title('原始信号波形');grid on
subplot(2,1,2),plot(abs(Y));title('原始信号频谱'); grid on%横坐标频率,纵坐标振幅%subplot(3,1,3),plot(angle(Y));title('原始信号相位');grid on
%双线性变换法设计的低通滤波器
fp=1000;%fp为通带频率
fc=1200;%fc为阻带起始频率
As=100;%As-阻带最小衰减(dB);
Ap=1;%Ap-通带波纹(dB);
fs1=fs;
wp=2*fp/fs1;%wp-椭圆滤波器通带截止角频率;
wc=2*fc/fs1;%Ws-椭圆滤波器阻带起始角频率;
[n,wn]=ellipord(wp,wc,Ap,As);
%n-椭圆滤波器最小阶数;
[b,a]=ellip(n,Ap,As,wn);%返回长度为n+1的滤波器系数行向量b和a, b为分子a 为分母
figure(2),freqz(b,a,512,fs1); %数字滤波器的频率响应函数,512表示选取单位圆的上半圆等间距的N个点作为频响输出;
x=filter(b,a,y);%一维数字滤波器,y2为滤波前输入,x为滤波结果序列
X=fft(x,1024);
figure(3),
subplot(2,1,1),plot(x);title('低通滤波后信号波形');grid on
subplot(2,1,2),plot(abs(X));title('低通滤波后信号频谱');grid on
sound(x,fs);
%分析图形,比较滤波前后时域波形和频域频谱。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %短时能量
y=y*2^nbits/2;
frameSize=256;
overlap=128;
%[y,fs,nbits]=wavReadInt(wavefile);
fprintf('length of %s is %g sec.\n',wavefile,length(y)/fs);
frameMat=buffer(y,frameSize,overlap);
frameNum=size(frameMat,2)
volume1=zeros(frameNum,1);
%volume2=zeros(frameNum,1);
for i=1:frameNum
frame=frameMat(:,i);
frame=frame-mean(frame);
volume1(i)=sum(abs(frame));
% volume2(i)=10*log10(sum(frame.^2));
end
time=(1:length(y))/fs;
frameTime=((0:frameNum-1)*(frameSize-overlap)+0.5*frameSize)/fs;
figure(4),plot(frameTime,volume1);ylabel('volume(Abs.sum)');title('短时能量')
%figure,plot(frameTime,volume2,'.-');ylabel('V olume(Decibels)');
xlabel('Time(sec)'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 短时过零率
overlap2=0;
frameMat2=buffer(y,frameSize,overlap);
%zcr1=sum(frameMat(1:end-1,:).*frameMat(2:end,:)<0);
zcr2=sum(frameMat(1:end-1,:).*frameMat(2:end,:)<=0);
time=(1:length(y))/fs;
frameNum=size(frameMat,2);
frameTime=((0:frameNum-1)*(frameSize-overlap)+0.5*frameSize)/fs;
%figure,plot(frameTime,zcr1,frameTime,zcr2);
%title('ZCR');xlabel('Time(sec)');legend('Method 1','Method 2');
figure(5),plot(frameTime,zcr2);
title('过零率');xlabel('Time(sec)');。