通信工程学院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]);
%%
% 矩形窗傅里叶变换
N=256; pinLv=(0:255)*(8000/2)/256;
b1=fft(ee,N);
y1=20*log(abs(b1)); % 短时傅里叶变换
subplot(312);
plot(pinLv,y1);title('加矩形窗短时谱分析');
xlabel('频率/Hz');ylabel('对数幅度');
%%
%汉明窗傅里叶变换
b2=ee'.*hamming(length(ee));
b2=fft(b2,N);
y2=20*log(abs(b2)); % 短时傅里叶变换
subplot(313);
plot(pinLv,y2);title('加汉明窗的短时谱分析');
xlabel('频率/Hz');ylabel('对数幅度');
五、 结果分析及心得体会
信号的频谱分析就是计算机信号的傅里叶变换。连续信号与系统的傅里叶分析显然不便于用计算机进行计算,使其应用受到限制。而FFT是一种时域和频域均离散化的变换,适合数值运算,成为用计算机分析离散信号和系统的有力工具。对连续信号和系统,可以通过时域采样,应用DFT进行近似谱分析。
实验中利用双线性变换法设计IIR数字滤波器,利用窗函数设计FIR数字滤波器,可以是低通、高通和带通滤波器的设计,此次试验中选用的是低通滤波器,而低通滤波器是基于Butterworth滤波器来设计的,通过设计的滤波器对语音信号进行滤波,再对得出的频谱图进行分析。在实验中遇到一些困难,在设计数字滤波器的时候,通带频率和阻带频率的选取要满足低通的要求,以及通带允许的最大衰减和阻带应达到的最小衰减。在这次的综合实验中,总的来说并不是很辛苦,实验将上课所学的理论知识运用到实践中。通过这次应用Matlab对语音信号进行频谱分析及滤波的综合实验,让我对Matlab的应用以及数字滤波器的设计有了更深层次的理解,每个程序中的语句表示什么意思也有了很清楚的了解。在实践中增强了我的动手能力,以及增强了我的团队意识,并提高了我的综合能力,使自身得到了很大的锻炼。最后要感谢老师的悉心指导和帮助。
第二篇:实验一 语音信号处理
实验一 语音信号的预处理
09223005 王楠
1实验目的
通过Matlab编程掌握语音信号的预处理方法,包括对信号进行分帧、预加重,加窗处理。
2 实验原理
由于语音信号从整体上来看是一个非平稳过程,但是在一个短的时间内,其特性保持相对不变,所以语音信号具有短时平稳性,对语音信号的分析和处理必须建立在“短时”的基础上,将信号分为一段一段来分析其特征参数。
人发音时存在口唇的辐射效应,口唇的辐射模型相当于一阶高通滤波器,所以在对实际信号进行分析处理时,常用“预加重技术”,目的提升信号的高频部分,使信号的频谱更加平坦,方便信号的分析。
3 实验过程
1)读语音数 wavread
2)听语音 sound
3)写语音 wavwrite
4)对语音信号进行分帧处理
5)对语音信号进行预加重
6)加汉明窗
7 ) 实验代码如下:
>> [x,fs,bits]=wavread('d:\1.wav');
y=x(10001:10512);
figure(1)
plot(y)
L=length(y);
K=1:L;
w=0.42-0.5*cos(2*pi*K/L)+0.08*cos(4*pi*K/L);
z=y.*w;
figure(2)
plot(z)
for r=2:L
y(r)=x(r)-x(r-1);
end
figure(3)
plot(y)
[x,fs,bits]=wavread('d:\1.wav');
x=x';
len=length(x);
N=256;
M=128;
Fn=fix((len-N)/M+1);
y=[];
for i=1:Fn
down=1+(i-1)*M;
up=down+N-1;
temp=x(down:up);
y=[y;temp];
end
4 实验结果
实验结果为图片如下面所示:1-1,1-2,1-3
1-1
1-2
1-3