资源描述
南昌工程学院
《语音信号的采集与分析》
课程设计
题 目 语音信号的采集与分析
课 程 名 称 语音信号处理
系 院 信息工程学院
专 业 通信工程
班 级 10通信工程2班
学 生 姓 名 刘敏
学 号 2010103362
设 计 地 点 电子信息楼
指 导 教 师 邹宝娟
设计起止时间:2013年12月9日至2013年12月20日
目录
一、需求分析 3
1.1选题背景及意义 3
1.2设计要求 3
二、系统总体设计 3
2.1 系统设计思路 3
2.2 功能结构图及功能说明 3
2.3 工作原理 5
三、系统详细设计 5
3.1 语音信号的matlab仿真的数据分析 5
3.2 程序代码分析 11
四、调试与维护 13
4.1 调试过程的问题与维护 13
五、结束语 14
六、参考文献 15
七、指导教师评阅(手写) 16
一、需求分析
1.1选题背景及意义
该设计主要是介绍语音信号的采集与分析方法,通过PC机录制自己的一段声音,运用Matlab提供的函数进行仿真分析,并画出采样后语音信号的时域波形和频谱图,对所采集的语音信号加入干扰随机高斯噪声,对加入噪声的信号进行播放,并进行时域和频谱分析;对比加噪前后的时域图和频谱图,分析讨论采用什么样的滤波器进行滤除噪声。
1.2设计要求
(1)通过PC机录制自己的一段声音“南昌工程学院刘敏”;
(2)运用MATLAB中信号处理相关的函数对语音信号进行时域、频域上的分析,如
短时能量,短时平均过零率,语谱图等;
(3)运用MATLAB对语音信号进行综合与分析,包括语音信号的调制,叠加,
和滤波等。
二、系统总体设计
2.1 系统设计思路
系统的整体设计思路包括语音信号的录制,语音信号的采集,语音信号的分析,其中语音信号的分析又包括了语音信号的时域分析和频域分析,语音信号的加噪处理和滤噪设计分析。
2.2 功能结构图及功能说明
实际工作中,我们可以利用windows自带的录音机录制语音文件,声卡可以完成语音波形的A/D转换,获得WAVE文件,为后续的处理储备原材料。调节录音机保存界面的“更改”选项,可以存储各种格式的WAVE文件。
图2.1为PC机的语音信号录制过程
声音
麦克风
声卡
滤波
采样
Windows自带的录音机
A/D转换
Wav
图2.1 PC机的语音信号录制过程
图2.2为录制过程:
图2.2 PC自带的录音机录音
本设计录制自己的一段语音,内容:“南昌工程学院刘敏”,时长4s,保存在C盘桌面文件夹,命名为“刘敏.wav”
图2.3为语音信号采集框图
话筒
数据采集设备
(声卡)
MATLAB语音采集工具箱
图2.3 语音信号采集框图
信号采集过程是将采集到的数据用matlab仿真出来。
2.3 工作原理
运用MATLAB中信号处理相关的函数对语音信号进行时域、频域上的分析,如
短时能量,短时平均过零率,语谱图等;运用MATLAB对语音信号进行综合与分析,包
括语音信号的调制,叠加,和滤波等。
三、系统详细设计
系统的详细设计主要包括matlab仿真的数据分析和程序代码设计的分析
3.1 语音信号的matlab仿真的数据分析
3.1.1 语音信号时域分析
语音信号的时域分析就是分析和提取语音信号的时域参数。进行语音分析时,最先接触到并且也是最直观的是它的时域波形。语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的一种分析方法,这种方法直接利用语音信号的时域波形。时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理、大分类等。这种分析方法的特点是:①表示语音信号比较直观、物理意义明确。②实现起来比较简单、运算且少。③可以得到语音的一些重要的参数。④只使用示波器等通用设备,使用较为简单等。
ATLAB数据采集箱中提供的函数命令进行图像分析的函数命令:
wavrecord : wavrecord 利用Windows 音频输入设备记录声音,其调用形式为:wavrecord (n ,fs ,ch) 。利用Windows音频输入设备记录n个音频采样, 频率为fs Hz ,通道数为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.1.1 原始语音信号的时域波形
3.1.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),式中,x,y意义同前,N为正整数。函数执行N点的FFT,若x为向量且长度小于N,则函数将x补零至长度N;若向量x的长度大于N,则函数截短x使之长度为N;若x 为矩阵,按相同方法对x进行处理。
图3.1.2 原始语音信号的频谱
3.1.3 语音信号的加噪处理
所谓高斯噪声,是指没有任何时迟相关时间序列,它只一个参数,代表噪声的强度,也即迟滞为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'。线性强度(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是数值,则其代表以dBW为单位的信号强度;如果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函数,实际上都调用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的随机数)。
图3.1.3高斯随机噪声
图3.1.4 加噪后的语音信号
图3.1.5 加噪后的语音信号的频谱比较
3.1.4滤噪设计分析
在频域内,语音信号的频谱分量主要集中在300~3400Hz的范围内。利用这个特点,可以用一个防混叠的带通滤波器将此范围内的语音信号频率分量取出。
通过该课题采集的语音信号频谱主要是500~800HZ范围。加入高斯随机噪声后该语音信号的时域波形几乎和噪声波形相同,通过回放几乎声音全部没噪声淹没,因此要想得到语音信号必须加入一个滤波器,能有效的滤除噪声影响。
从原始信号频谱和加噪信号频谱可以得出,该高斯随机噪声的加入使得信号加入了很多高频成分,因此我们可以选用低通滤波器滤除该噪声的高频干扰,声音低频成分主要是500~800HZ范围,因此我们选用截止频率为1KHZ的低通滤波器来滤除高斯噪声。
3.2 程序代码分析
(1)代码1
%程序1:用MATLAB对原始语音信号进行分析,画出它的时域波形和频谱
fs=22050; %语音信号采样频率为22050
[x1]=wavread('刘敏.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)));
title('原始语音信号频谱')
xlabel('Hz');
ylabel('幅值')
由程序的仿真分析可以得到原始语音信号的时域和频域图形
figure(1) figure(3)
(2)代码2
% 程序2 用randn函数给原始信号加入高斯随机噪声
fs=22050; %语音信号采样频率为22050
x1=wavread('刘敏.wav'); %读取语音信号的数据,赋给变量x1
t=0:1/22050:(size(x1)-1)/22050;
y1=fft(x1,1024); %对信号做1024点FFT变换
f=fs*(0:511)/1024;
x2=randn(1,length(x1)); %产生一与x长度一致的随机信号
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('加噪后的语音信号');
xlabel('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,'刘敏noise.wav');%将变量转换成WAV文件,输出保存;
第二段代码可以得出如下三幅数据分析图形
figure(1) figure(2) figure(3)
四、调试与维护
4.1 调试过程的问题与维护
(1)录音过程中没有转换音频的格式为“刘敏.wav”。
(2)[x1]=wavread('刘敏.wav')这个调用程序出现错误,由于音频格式问题。
(3)wavwrite(x2,Fs,Nbits,'刘敏noise.wav'),将变量转换成WAV文件时,输出保存的名称与刘敏.wav的名称相同,故出现错误,应该保证不同。
(4)写程序的过程当中文件名保存为数字,如“123.m”,导致出现错误。
五、结束语
通过这次《语音信号的采集与分析》课程设计,对课本上的语音信号处理的知识有了一个更深一步的了解与掌握,通过课程设计的软件和硬件的调试,对于用matlab编写程序,然后进行仿真有了一个全面的了解,在程序编写和调试方面出现的许多问题,需要自己去逐步逐步的解决,这是一个比较大的挑战,不仅是对知识的掌握程度还是对实践的应用程度必须有一个全面的了解。
在之前数字信号与处理的学习以及完成课后的作业的过程中,已经使用过MATLAB,对其有了一些基础的了解和认识。通过这次练习是我进一步了解了信号的产生、采样及频谱分析的方法。 以及其中产生信号和绘制信号的基本命令和一些基础编程语言。
最后感谢我们的老师的付出,才能完成这次课程设计。
六、参考文献
1、陈怀琛.MATLAB及在电子信息课程中的应用[M].北京:电子工业出版社.2008,1
2、张文.基于MATLAB的语音信号的滤波与实现[J].山西电子技术.2008,2
3、徐靖涛.基于MATLAB的语音信号分析与处理[J].重庆科技学院学报2008,1
4、胡航.语音信号处理[M].哈尔滨:哈尔滨工业大学出版社,2002.
5、丁玉美.高西全.数字信号处理[M].西安电子科技大学出版社,2006.
6、张威.MATLAB基础与编程入门[M].西安电子科技大学出版社,2006.
七、指导教师评阅(手写)
成绩(百分制):
指导教师评语:
指导教师签名: 年 月 日
注:如教研室有明确的评分标准,可粘贴于此页。
展开阅读全文