基于某MATLAB的语音信号录制Word文档格式.docx

上传人:b****6 文档编号:20996753 上传时间:2023-01-26 格式:DOCX 页数:9 大小:645.76KB
下载 相关 举报
基于某MATLAB的语音信号录制Word文档格式.docx_第1页
第1页 / 共9页
基于某MATLAB的语音信号录制Word文档格式.docx_第2页
第2页 / 共9页
基于某MATLAB的语音信号录制Word文档格式.docx_第3页
第3页 / 共9页
基于某MATLAB的语音信号录制Word文档格式.docx_第4页
第4页 / 共9页
基于某MATLAB的语音信号录制Word文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

基于某MATLAB的语音信号录制Word文档格式.docx

《基于某MATLAB的语音信号录制Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于某MATLAB的语音信号录制Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

基于某MATLAB的语音信号录制Word文档格式.docx

据,采集完成后停止对象并删除对象。

图是基于PC机的语音信号录制过程,声卡可以完成语音波形的A/D转

换获得WAVE文件,为后续的处理储备原材料。

调节录音机保存界面的“更改”选项可以存储各种格式的WAVE文件。

录制过程:

打开电脑左下角的程序——附件——娱乐——录音机

2语音信号的采集

配置好数据采集设备的参数后,使用start命令便可启动声卡开始语音信号的采集。

采集到的数据被暂时存放在PC机的存里,理论上可采集的最大数据量是由PC机的存容量决定的,这一点相对于一般的数据采集系统而言有较强的优势。

MATLAB还可以记录采集过程中出现错误,如出错的时间、错误产生的来源以及数据采集设备的状态等信息都会被记录下来作为以后工作的参考。

语音采集子系统是通过PC录音机RealtekAC’97型声卡和Matlab的数据采集工具箱实现的。

其中RealtekAC’97型声卡的采样位数为16位,支持8~44.1kHz的采样速率,可以满足语音采集的硬件要求[1]。

Matlab自带的数据采集工具箱里面,提供了专门用于语音采集的命令和函数。

数据采集的硬件设备的部特性对Matlab的接口完全是透明的,通过调用Matlab提供的语音采集函数和命令可以对其进行访问。

而且Matlab可以对其采集的数据进行实时的分析,也可在

存储后再进行处理。

语音信号采集框图

3语音信号的分析

3.1语音信号时域分析

语音信号的时域分析就是分析和提取语音信号的时域参数。

进行语音分析时最先接触到并且也是最直观的是它的时域波形。

语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的一种分析方法,这种方法直接利用语音信号的时域波形。

时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理、大分类等。

这种分析方法的特点一是表示语音信号比较直观、物理意义明确,二是实现起来比较简单、运算且少,三是可以得到语音的一些重要的参数,四是只使用示波器等通用设备,使用较为简单等。

ATLAB数据采集箱中提供的函数命令进行图像分析的函数命令wavrecord:

wavrecord利用Windows音频输入设备记录声音,其调用形式为:

wavrecord(n,fs,ch)。

利用Windows音频输入设备记录n个音频采样,频率为fsHz,通道数为ch。

采样值返回到一个大小为n*ch的矩阵中。

缺省时,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:

音频信号是以向量的形式表示声音采样的。

sound函数用于将向量转换为声音,其调用形式为:

sound(y,fs),作用是向扬声器送

出向量y中的音频信号(采样频率为fs)。

通过Wavread和plot(x)函数即可显示图像的时域波形。

原始语音信号的时域波形

3.2语音信号频域分析

语音信号的频域分析就是分析语音信号的频域持征。

从广义上讲,语音信号的频域分析包括语音信号的频谱、功率谱、倒频谱、频谱包络分析等,而常用的频域分析方法有带通滤波器组法、傅里叶变换法、线件预测法等几种。

本文介绍的是语音信号的傅里叶分析法。

因为语音波是一个非平稳过程􀉍

因此适用于周期、瞬变或平稳随机信号的标准傅里叶变换不能用来直接表示语音信号,而应该用短时傅里叶变换对语音信号的频谱进行分析,相应的频谱称为“短时谱”。

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)式中xy意义同前。

N为正整数。

函数执行N点的FFT,若x为向量且长度小于N。

则函数将x补零至长度N,若向量x的长度大于N,则函数截短x使之长度为N,若x为矩阵,按相同方法对x进行处理。

4语音信号的加噪处理

所谓高斯噪声,是指没有任何时迟相关时间序列,它只一个参数􀉍

代表噪声的强度,也即迟滞为0的滞后自协方差,而其余滞后自协方差统统为零。

标准高斯噪声,则是满足N(0,1)标准正态分布的高斯噪声。

斯白噪声,如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。

热噪声和散粒噪声是高斯白噪声。

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的状态。

在数值变量后还可附加一些标志性参数:

y=wgn(„,POWERTYPE)指定p的单位。

POWERTYPE可以是'

dBW'

'

dBm'

或'

linear'

线性强度(linearpower)以瓦特(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是数值,则其代表以dBW为单位的信号强度,如果SIGPOWER为'

measured'

,则函数将在加入噪声之前测定信号强度。

y=awgn(x,SNR,SIGPOWER,STATE)重置RANDN的状态。

y=awgn(„,POWERTYPE)指定SNR和SIGPOWER的单位。

POWERTYPE

可以是'

dB'

如果POWERTYPE是'

,那么SNR以dB为单位,而SIGPOWER以dBW为单位。

,那么SNR作为

比值来度量,而SIGPOWER以瓦特为单位。

3.直接用randn函数产生高斯分布序列:

无论是WGN还是AWGN函数,实际上都调用Randn函数产生的噪声。

即WGN函数中调用了Randn函数,而AWGN函数调用了WGN函数。

rand:

rand(n):

生成0到1之间的n阶随机数方阵。

rand(m,n):

生成0到1之间的m×

n的随机数矩阵。

Randn:

randn()命令是产生白噪声的,白噪声应该是0均值,方差为1的一组数􀉍

同rand有randn(n),randn(m,n)。

x=rand(1,N)产生(0,1)区间均匀分布的长度为N的随机信号,x=randn(1,N)产生长度为N且具有零均值和单位方差的正态分布的随机信号。

(可以在前面扩大相应的倍数得到不同的随机数,比如10*rand

(1)得到0-10的随机数)。

5滤噪设计分析

在频域,语音信号的频谱分量主要集中在300---3400Hz的围。

利用这个特点,可以用一个防混叠的带通滤波器将此围的语音信号频率分量取出。

通过该课题采集的语音信号频谱主要是500---800HZ围。

加入高斯随机噪声后该语音信号的时域波形几乎和噪声波形相同,通过回放几乎声音全部没噪声淹没,因此要想得到语音信号必须加入一个滤波器,能有效的滤除噪声影响。

从原始信号频谱和加噪信号频谱可以得出,该高斯随机噪声的加入使得信号加入了很多高频成分,因此我们可以选用低通滤波器滤除该噪声的高频干扰,声音低频成分主要是500---800HZ围,因此我们选用截止频率为1KHZ的低通滤波器来滤除高斯噪声。

6设计总结

通过这次课程设计,使我对语音信号有了全面的认识,对数字信号处理的知识又有了深刻的理解,在之前数字信号与处理的学习以及完成课后的作业的过程中􀉍

已经使用过MATLAB,对其有了一些基础的了解和认识。

通过这次练习是我进一步了解了信号的产生、采样及频谱分析的方法。

以及其中产生信号和绘制信号的基本命令和一些基础编程语言。

让我感受到只有在了解课本知识的前提下,才能更好的应用这个工具,并且熟练的应用MATLAB也可以很好的加深我对课程的理解,方便我的思维。

这次设计使我了解了MATLAB的使用方法,学会分析滤波器的优劣和性能,提高了分析和动手实践能力。

同时我相信,进一步加强对MATLAB的学习与研究对我今后的学习将会起到很大的帮助。

 

%程序1:

用MATLAB对原始语音信号进行分析􀉍

画出它的时域波形和频谱

fs=22050;

%语音信号采样频率为22050

[x1]=wavread('

yuyin.wav'

);

%读取语音信号的数据􀉍

赋给变量x1

sound(x1,22050);

%播放语音信号

y1=fft(x1,1024);

%对信号做1024点FFT变换

f=fs*(0:

511)/1024;

figure

(1)

plot(x1)%做原始语音信号的时域图形

title('

原始语音信号'

xlabel('

time(s)'

ylabel('

幅值'

figure(3)

plot(f,abs(y1(1:

512)));

原始语音信号频谱'

Hz'

MATLAB课程设计说明书

15

附录2

%程序2用randn函数给原始信号加入高斯随机噪声

x1=wavread('

t=0:

1/22050:

(size(x1)-1)/22050;

x2=randn(1,length(x1));

%产生一与x长度一致的随机信号

sound(x2,22050);

plot(x2)%做原始语音信号的时域图形

高斯随机噪声'

randn('

state'

0);

m=randn(size(x1));

x2=0.1*m+x1;

%播放加噪声后的语音信号

y2=fft(x2,1024);

figure

(2)

plot(t,x2)

加噪后的语音信号'

16

timen'

幅值n'

subplot(2,1,1);

subplot(2,1,2);

plot(f,abs(y2(1:

加噪后的语音信号频谱'

Fs=22050,Nbits=16;

wavwrite(x2,Fs,Nbits,'

noisexp.wav'

%将变量转换成WAV文件,输出保存;

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

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1