语音信号处理实验报告实验一
- 格式:docx
- 大小:164.55 KB
- 文档页数:5
通信工程学院12级1班罗恒2012101032
实验一语音信号的低通滤波和短时分析综合实验
一、实验要求
1、根据已有语音信号,设计一个低通滤波器,带宽为采样频率的四分之一,求输出信号;
2、辨别原始语音信号与滤波器输出信号有何区别,说明原因;
3、改变滤波器带宽,重复滤波实验,辨别语音信号的变化,说明原因;
4、利用矩形窗和汉明窗对语音信号进行短时傅立叶分析,绘制语谱图并估计基音周期,分析两种窗函数对基音估计的影响;
5、改变窗口长度,重复上一步,说明窗口长度对基音估计的影响。
二、实验目的
1.在理论学习的基础上,进一步地理解和掌握语音信号低通滤波的意义,低通滤波分析的基本方法。
2.进一步理解和掌握语音信号不同的窗函数傅里叶变化对基音估计的影响。
三、实验设备
1.PC机;
2.MATLAB软件环境;
四、实验内容
1.上机前用Matlab语言完成程序编写工作。
2.程序应具有加窗(分帧)、绘制曲线等功能。
3.上机实验时先调试程序,通过后进行信号处理。
4.对录入的语音数据进行处理,并显示运行结果。
5. 改变滤波带宽,辨别与原始信号的区别。
6.依据曲线对该语音段进行所需要的分析,并且作出结论。
7.改变窗的宽度(帧长),重复上面的分析内容。
五、实验原理及方法
利用双线性变换设计IIR滤波器(巴特沃斯数字低通滤波器的设计),首先要设计出满足指标要求的模拟滤波器的传递函数Ha(s),然后由Ha(s)通过双线性变换可得所要设计的IIR滤波器的系统函数H(z)。如果给定的指标为数字滤波器的指标,则首先要转换成模拟滤波器的技术指标,这里主要是边界频率Wp和Ws 的转换,对ap和as指标不作变化。边界频率的转换关系为∩=2/T tan(w/2)。接着,按照模拟低通滤波器的技术指标根据相应设计公式求出滤波器的阶数N和3dB截止频率∩c ;根据阶数N查巴特沃斯归一化低通滤波器参数表,得到归一化传输函数Ha(p);最后,将p=s/ ∩c 代入Ha(p)去归一,得到实际的模拟滤波器传输函数Ha(s)。之后,通过双线性变换法转换公式s=2/T((1-1/z)/(1+1/z))得到所要设计的IIR滤波器的系统函数H(z)。
一定时宽的语音信号,其能量的大小随时间有明显的变化。其中清音段(以清音为主要成份的语音段),其能量比浊音段小得多。短时过零数也可用于语音信号分析中,发浊音时,其语音能量约集中于3kHz以下,而发清音时,多数能量出现在较高频率上,可认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数,因而,对一短时语音段计算其短时平均能量及短时平均过零数,就可以较好地区分其中的清音段和浊音段,从而可判别句中清、浊音转变时刻,声母韵母的分界以及无声与有声的分界。这在语音识别中有重要意义。
六、程序及结果
%起始清空
close all;
clear all;
clc
duration = 5; %录音时间
%语音录入段
fprintf('Press any key to start %g seconds of recording... \n',duration);
pause;
fprintf('Recording...\n');
mysound=wavrecord(duration*8000,8000,1);
fprintf('Finished recording.\n');
%语音存储段
wavwrite(mysound,8000,'C:\Users\ML\Desktop\语音信号');
%语音读取及显示分析图表
fprintf('Press any key to play the recording and show the analyzing pictures... \n');
pause;
mysoundinPC=wavread('C:\Users\ML\Desktop\语音信号');
%---信号处理、分析并出图
subplot(2,1,1);
mysoundinPC=mysound(:,1);
mysoundinPC1=mysoundinPC(1:16000);
siglength1=length(mysoundinPC1);
t1=(0:siglength1-1)/8000;
plot(t1,mysoundinPC1);
xlabel('Time(s)');
title('截取信号序列');
%声音播放段
wavplay(mysoundinPC,8000);
%读取WAV音频文件“beifeng.wav”
aa=wavread('C:\Users\ML\Desktop\语音信号');
[B1 A1] = LowPassF(200,300);
aa1 = filter(B1,A1,aa); %对信号aa进行滤波
wavplay(aa1,8000); %声音播放
subplot(2,1,2);
ma1=aa1(1:16000);
siglength1=length(ma1);
t1=(0:siglength1-1)/8000;
plot(t1,ma1);
xlabel('Time(s)');
title('滤波后截取信号序列');
%%
%短时傅里叶变换
aa=wavread('C:\Users\ML\Desktop\语音信号');
aa1=aa(1:16000);
e=fra(256,128,aa1);
ee=e(10,:);
%%
subplot(311)
ee1=ee/max(ee);
plot(ee1);xlabel('样点数');ylabel('幅度');title('原始语音第十帧'); axis([1,256,-1,1]);
%%