收藏 分享(赏)

基于MATLAB的语音信号录制.doc

上传人:精品资料 文档编号:10662108 上传时间:2019-12-16 格式:DOC 页数:13 大小:734.50KB
下载 相关 举报
基于MATLAB的语音信号录制.doc_第1页
第1页 / 共13页
基于MATLAB的语音信号录制.doc_第2页
第2页 / 共13页
基于MATLAB的语音信号录制.doc_第3页
第3页 / 共13页
基于MATLAB的语音信号录制.doc_第4页
第4页 / 共13页
基于MATLAB的语音信号录制.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、 基于MATLAB的语音信号录制 功能介绍该设计主要介绍语音信号的采集与分析方法,通过PC 机录制自己的一段声音,运用Matlab 提供的函数进行仿真分析,并画出采样后语音信号的时域波形和频谱图,对所采集的语音信号加入干扰随机高斯噪声对加入噪声的信号进行播放,并进行时域和频谱分析,对比加噪前后的时域图和频谱图,分析讨论采用什么样的滤波器进行滤除噪声。1 语音信号的录制为了将原始模拟语音信号变为数字信号,必须经过采样和量化两个步骤,从而得到时间和幅度上均为离散的数字语音信号。语音信号经过预滤波和采样后,由A/D 变换器变换为二址制数字码。这种防混叠滤波通常与模数转换器做在一个集成块内,因此目前来

2、说,语音信号的数字化的质量还是有保证的。语音声波通过话筒输入到声卡后直接获得的是经过防混叠滤波、A/D 变换、量化处理的离散的数字信号。将声卡作为对象处理采集语音信号Matlab 将声卡作为对象处理,其后的一切操作都不与硬件直接相关,而是通过对该对象的操作来作用于硬件设备、声卡。操作时首先要对声卡产生一个模拟输入对象(ai),给ai 对象添加一个通道设置采样频率后,就可以启动设备对象, 开始采集数据,采集完成后停止对象并删除对象。图是基于PC机的语音信号录制过程,声卡可以完成语音波形的A/D 转换获得WAVE 文件,为后续的处理储备原材料。调节录音机保存界面的“更改”选项可以存储各种格式的WA

3、VE 文件。录制过程:打开电脑左下角的程序附件娱乐录音机2 语音信号的采集配置好数据采集设备的参数后,使用start 命令便可启动声卡开始语音信号的采集。采集到的数据被暂时存放在PC 机的内存里,理论上可采集的最大数据量是由PC 机的内存容量决定的,这一点相对于一般的数据采集系统而言有较强的优势。MATLAB 还可以记录采集过程中出现错误,如出错的时间、错误产生的来源以及数据采集设备的状态等信息都会被记录下来作为以后工作的参考。语音采集子系统是通过PC 录音机Realtek AC97型声卡和 Matlab 的数据采集工具箱实现的。其中Realtek AC97 型声卡的采样位数为16 位,支持8

4、44.1kHz 的采样速率,可以满足语音采集的硬件要求1。Matlab 自带的数据采集工具箱里面,提供了专门用于语音采集的命令和函数。数据采集的硬件设备的内部特性对Matlab 的接口完全是透明的,通过调用Matlab 提供的语音采集函数和命令可以对其进行访问。而且Matlab 可以对其采集的数据进行实时的分析,也可在存储后再进行处理。语音信号采集框图3 语音信号的分析3.1 语音信号时域分析语音信号的时域分析就是分析和提取语音信号的时域参数。进行语音分析时最先接触到并且也是最直观的是它的时域波形。语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的一种分析方法,这种方法直接利用

5、语音信号的时域波形。时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理、大分类等。这种分析方法的特点一是表示语音信号比较直观、物理意义明确,二是实现起来比较简单、运算且少,三是可以得到语音的一些重要的参数,四是只使用示波器等通用设备,使用较为简单等。ATLAB 数据采集箱中提供的函数命令进行图像分析的函数命令wavrecord : wavrecord 利用Windows 音频输入设备记录声音,其调用形式为:wavrecord (n ,fs ,ch) 。利用Windows 音频输入设备记录n 个音频采样 , 频率为fs Hz ,通道数为ch。采样值返回到一个大小为n*ch 的矩阵中。缺

6、省时,fs = 11025 ,ch = 1。waveplay: waveplay 利用Windows 音频输出设备播放声音,其调用形为:waveplay(y ,fs) 。以采样频率fs 向Windows 音频设备发送向量信号。标准的音频采样率有:8000、11025、22050 和44100Hz。wavread :wavread 用于读取Microsoft 的扩展名为“.wav”的声音文件。其调用形式为: y = wavread (file) 。其作用是从字符串file 所指的文件路径读取wave 文件, 将读取的采样数据送到y 中。Y的取值范围: -1 ,1 。sound:音频信号是以向量的

7、形式表示声音采样的。sound 函数用于将向量转换为声音,其调用形式为:sound (y ,fs) ,作用是向扬声器送出向量y 中的音频信号( 采样频率为fs) 。通过 Wavread 和 plot(x)函数即可显示图像的时域波形。原始语音信号的时域波形3.2 语音信号频域分析语音信号的频域分析就是分析语音信号的频域持征。从广义上讲,语音信号的频域分析包括语音信号的频谱、功率谱、倒频谱、频谱包络分析等,而常用的频域分析方法有带通滤波器组法、傅里叶变换法、线件预测法等几种。本文介绍的是语音信号的傅里叶分析法。因为语音波是一个非平稳过程 因此适用于周期、瞬变或平稳随机信号的标准傅里叶变换不能用来直

8、接表示语音信号,而应该用短时傅里叶变换对语音信号的频谱进行分析,相应的频谱称为“短时谱 ”。FFT 即为快速傅氏变换是离散傅氏变换的快速算法。它是根据离散傅氏变换的奇、偶、虚、实等特性对离散傅立叶变换的算法进行改进获得的。在MATLAB 的信号处理工具箱中函数FFT 和IFFT 用于快速傅立叶变换和逆变换。函数FFT 用于序列快速傅立叶变换 ,其调用格式为 y=fft(x)其中,x 是序列,y 是序列的 FFT,x 可以为一向量或矩阵。若x 为一向量,y 是x 的FFT 且和x 相同长度。若 x 为一矩阵,则y 是对矩阵的每一列向量进行 FFT。如果x 长度是2 的幂次方,函数fft 执行高速

9、基2FFT 算法,否则fft 执行一种混合基的离散傅立叶变换算法,计算速度较慢。函数FFT 的另一种调用格式为y=fft(x,N)式中 x y 意义同前 。N 为正整数。函数执行N 点的FFT,若x 为向量且长度小于N。则函数将x 补零至长度N,若向量x 的长度大于N ,则函数截短x 使之长度为N,若x 为矩阵,按相同方法对x 进行处理。4 语音信号的加噪处理所谓高斯噪声,是指没有任何时迟相关时间序列,它只一个参数代表噪声的强度,也即迟滞为0 的滞后自协方差,而其余滞后自协方差统统为零。标准高斯噪声,则是满足N(0,1 )标准正态分布的高斯噪声。斯白噪声,如果一个噪声,它的幅度分布服从高斯分布

10、,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。热噪声和散粒噪声是高斯白噪声。MATLAB 中产生高斯白噪声非常方便,可以直接应用3 个函数,一个是WGN,另一个是AWGN,还有一个randn,WGN 用于产生高斯白噪声,AWGN 则用于在某一信号中加入高斯白噪声,randn 直接产生高斯分布序列。1. WGN:产生高斯白噪声y = wgn(m,n,p) 产生一个m 行n 列的高斯白噪声的矩阵,p 以dBW为单位指定输出噪声的强度。 y = wgn(m,n,p,imp) 以欧姆(Ohm)为单位指定负载阻抗。 y = wgn(m,n,p,imp,state) 重置RANDN 的状态。 在数

11、值变量后还可附加一些标志性参数:y = wgn(,POWERTYPE) 指定p 的单位。POWERTYPE 可以是dBW,dBm 或linear。线性强度(linear power)以瓦特(Watt)为单位。 y =wgn(,OUTPUTTYPE) 指定输出类型。OUTPUTTYPE 可以是real 或complex。2. AWGN:在某一信号中加入高斯白噪声y = awgn(x,SNR) 在信号x 中加入高斯白噪声。信噪比SNR 以dB 为单位。x 的强度假定为0dBW。如果x 是复数,就加入复噪声。y = awgn(x,SNR,SIGPOWER) 如果SIGPOWER 是数值,则其代表以d

12、BW 为单位的信号强度,如果SIGPOWER 为measured,则函数将在加入噪声之前测定信号强度。 y = awgn(x,SNR,SIGPOWER,STATE) 重置RANDN 的状态。y = awgn(,POWERTYPE) 指定SNR 和SIGPOWER 的单位。POWERTYPE可以是dB或linear。如果POWERTYPE 是dB ,那么SNR 以dB 为单位,而SIGPOWER 以dBW 为单位。如果POWERTYPE 是linear,那么SNR 作为比值来度量,而SIGPOWER 以瓦特为单位。3. 直接用randn 函数产生高斯分布序列:无论是WGN 还是AWGN 函数,实

13、际上都调用Randn 函数产生的噪声。即WGN 函数中调用了Randn 函数,而AWGN 函数调用了WGN 函数。rand:rand(n) :生成0 到1 之间的n 阶随机数方阵。rand(m,n):生成0 到1 之间的mn 的随机数矩阵。Randn:randn( )命令是产生白噪声的 ,白噪声应该是0 均值,方差为1 的一组数 同rand 有randn(n),randn(m,n)。x=rand(1,N) 产生( 0,1)区间均匀分布的长度为N 的随机信号,x=randn(1,N)产生长度为N 且具有零均值和单位方差的正态分布的随机信号。 (可以在前面扩大相应的倍数得到不同的随机数,比如10*

14、rand(1)得到0-10 的随机数)。5 滤噪设计分析在频域内,语音信号的频谱分量主要集中在 300-3400Hz 的范围内。利用这个特点,可以用一个防混叠的带通滤波器将此范围内的语音信号频率分量取出。通过该课题采集的语音信号频谱主要是500- 800HZ 范围。加入高斯随机噪声后该语音信号的时域波形几乎和噪声波形相同,通过回放几乎声音全部没噪声淹没,因此要想得到语音信号必须加入一个滤波器, 能有效的滤除噪声影响。从原始信号频谱和加噪信号频谱可以得出,该高斯随机噪声的加入使得信号加入了很多高频成分,因此我们可以选用低通滤波器滤除该噪声的高频干扰, 声音低频成分主要是500-800HZ 范围,

15、 因此我们选用截止频率为1KHZ 的低通滤波器来滤除高斯噪声。6 设计总结通过这次课程设计,使我对语音信号有了全面的认识, 对数字信号处理的知识又有了深刻的理解,在之前数字信号与处理的学习以及完成课后的作业的过程中 已经使用过MATLAB ,对其有了一些基础的了解和认识。通过这次练习是我进一步了解了信号的产生、采样及频谱分析的方法。 以及其中产生信号和绘制信号的基本命令和一些基础编程语言。让我感受到只有在了解课本知识的前提下,才能更好的应用这个工具,并且熟练的应用 MATLAB 也可以很好的加深我对课程的理解,方便我的思维。这次设计使我了解了MATLAB 的使用方法,学会分析滤波器的优劣和性能

16、,提高了分析和动手实践能力。同时我相信, 进一步加强对MATLAB的学习与研究对我今后的学习将会起到很大的帮助。%程序1:用MATLAB 对原始语音信号进行分析 画出它的时域波形和频谱fs=22050; %语音信号采样频率为 22050x1=wavread(yuyin.wav); %读取语音信号的数据 赋给变量x1sound(x1,22050); %播放语音信号y1=fft(x1,1024); %对信号做1024 点FFT 变换f=fs*(0:511)/1024;figure(1)plot(x1) %做原始语音信号的时域图形title(原始语音信号);xlabel(time(s);ylabel

17、(幅值);figure(3)plot(f,abs(y1(1:512);title(原始语音信号频谱)xlabel(Hz);ylabel(幅值)MATLAB 课程设计说明书15附录2% 程序2 用randn 函数给原始信号加入高斯随机噪声fs=22050; %语音信号采样频率为 22050x1=wavread(yuyin.wav); %读取语音信号的数据 赋给变量 x1t=0:1/22050:(size(x1)-1)/22050;y1=fft(x1,1024); %对信号做1024 点FFT 变换f=fs*(0:511)/1024;x2=randn(1,length(x1); %产生一与x 长度

18、一致的随机信号sound(x2,22050);figure(1)plot(x2) %做原始语音信号的时域图形title(高斯随机噪声);xlabel(time(s);ylabel(幅值);randn(state,0);m=randn(size(x1);x2=0.1*m+x1;sound(x2,22050);%播放加噪声后的语音信号y2=fft(x2,1024);figure(2)plot(t,x2)title(加噪后的语音信号);MATLAB 课程设计说明书16xlabel(time n);ylabel(幅值 n);figure(3)subplot(2,1,1);plot(f,abs(y1(1:512);title(原始语音信号频谱);xlabel(Hz);ylabel(幅值);subplot(2,1,2);plot(f,abs(y2(1:512);title(加噪后的语音信号频谱);xlabel(Hz);ylabel(幅值);Fs=22050,Nbits=16;wavwrite(x2,Fs,Nbits,noisexp.wav);%将变量转换成WAV 文件,输出保存;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报