电子信息基于MATLAB的语音信号的分析与处理.docx
《电子信息基于MATLAB的语音信号的分析与处理.docx》由会员分享,可在线阅读,更多相关《电子信息基于MATLAB的语音信号的分析与处理.docx(21页珍藏版)》请在冰豆网上搜索。
电子信息基于MATLAB的语音信号的分析与处理
电子信息工程专业方向课程设计报告
课题:
基于MATLAB的语音信号分析和处理
姓名:
学号:
班级:
专业:
归口系部:
起迄日期:
设计地点:
指导教师:
发任务书日期:
2012年4月10日
一、设计目的与任务
通过数字信号处理的课程设计,使学生对信号的采集,处理,传输,显示,存储和分析等有一个系统的掌握和理解。
巩固和运用数字信号处理课程中的理论知识和实验技能,掌握最基本的数字信号处理的理论和方法,培养学生发现问题,分析问题和解决问题的能力。
二、基本要求
1,基本要求:
设计一个语音信号分析和处理系统,要求学生对所采集的语音信号在MATLAB软件平台下进行频谱分析和处理;
2,提高要求:
对所采集的语音信号叠加干扰噪声进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。
3,基本教学要求:
每组一台电脑(附话筒和耳机),电脑安装MATLAB软件。
三、设计任务
本次课程设计最终要求提交设计说明书,由以下各部分组成:
1,理论依据
根据设计要求分析系统功能,掌握设计中所需的理论(采样频率,采样位数的概念,采样定理;时域信号的DFT,FFT及频谱分析;数字滤波器的设计原理和方法,各种不同性能的滤波器的性能比较),阐述设计原理。
2,信号采集
采集语音信号,画出信号的时域波形图和频谱图。
3,数字滤波器设计
根据语音信号的特点,分别设计IIR低通和高通以及带通数字滤波器;FIR低通,高通以及带通数字滤波器;画出各种数字滤波器的频率响应图。
4,信号处理
1)利用设计的IIR数字滤波器分别对采集的信号进行滤波处理;
2)利用设计的FIR数字滤波器分别对采集的信号进行滤波处理;
3)在原始的语音信号3000HZ以上频段叠加白噪声,选择所设计的一种对叠加白噪声后的语音信号处理,滤除白噪声;
4)画出处理过程中所的的各种波形及频谱图。
5,信号分析
对语音信号进行回放,感觉滤波前后声音的变化。
比较滤波前后语音信号的波形及频谱,对所的结果和滤波器性能进行频谱分析,阐明原因得出结论。
四:
设计过程(设计步骤)
基本原理
1.1语音信号概述
语言是人类创造的,是人类区别于其他地球生命的本质特征之一。
人类用语言交流的过程可以看成是一个复杂的通信过程,为了获取便于分析和处理的语音信源,必须将在空气中传播的声波转变为包含语音信息并且记载着声波物理性质的模拟(或数字)电信号,即语音信号,因此语音信号就成为语音的表现形式或载体。
语音学和数字信号处理的交叉结合便形成了语音信号处理。
语音信号处理是建立在语音学和数字信号处理基础之上的,对语音信号模型进行分析、存储、传输、识别和合成等方面的一门综合性学科。
1.2数字滤波器原理
1.2.1数字滤波器的概念
若滤波器的输入、输出都是离散时间信号,那么该滤波器的单位冲激响应h(n)也必然是离散的,这种滤波器称为数字滤波器(DF)。
数字滤波器实质上是一种运算过程——用来描述离散系统输入与输出关系的差分方程的计算或卷积计算。
数字滤波器的实质是用一有限精度算法实现的离散时间线性时不变系统,以完成对信号进行滤波处理的过程。
它是数字信号处理的一个重要分支,具有稳定性好、精度高、灵活性强、体积小、质量轻等诸多优点。
1.2.2数字滤波器的分类
数字滤波器根据不同的分类标准可以将滤波器分成不同的类别。
(1)根据单位冲激响应h(n)的时间特性分类
无限冲激响应(IIR)数字滤波器
有限冲激响应(FIR)数字滤波器
(2)根据实现方法和形式分类
递归型数字滤波器
非递归型数字滤波器
快速卷积型
(3)根据频率特性分类
低通数字滤波器、高通数字滤波器、带通数字波器、带阻数字滤波器
2语音信号分析和滤波处理
2.1语音信号的采集
把语音信号并保存为.wav文件,长度小于30秒,并对语言信号进行采样;录制的软件可以使用Windows自带的录音机,或者也可以使用其它专业的录音软件,录制时需要配备录音硬件(如麦克风),为了方便比较,需要在安静、无噪音、干扰小的环境下录。
2.2语音信号的读入与打开
在MATLAB中,[y,fs,bits]=wavread('Blip',[N1N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。
[N1N2]表示读取的值从N1点到N2点的值。
sound(y);用于对声音的回放。
向量y则就代表了一个信号,也即一个复杂的“函数表达式”,也可以说像处理一个信号的表达式一样处理这个声音信号。
下面是语音信号在MATLAB中的语言程序,它实现了语音的读入与打开,并绘出了语音信号的波形频谱图。
[x,fs,bits]=wavread('wzf.wav');
sound(x);
X=fft(x,4096);
magX=abs(X);
angX=angle(X);
subplot(221);plot(x);title('原始信号波形');
subplot(222);plot(X);title('原始信号频谱');
subplot(223);plot(magX);title('原始信号幅值');
subplot(224);plot(angX);title('原始信号相位');
程序运行可以听到声音,得到的结果图4-1所示:
图4-1语音信号的读入与打开
2.3语言信号处理
2.3.1语音信号分析
用MATLAB绘制出语音信号的时域波形图和原始语音信号的频率响应图和原始语音信号的FFT频谱图。
程序设计如下:
fs=22050;%语音信号采样频率为22050
[x,fs,bits]=wavread('wzf.wav');
sound(x,fs,bits);%播放语音信号
y1=fft(x,1024);%对信号做1024点FFT变换
f=fs*(0:
511)/1024;
figure
(1)
plot(x)%做原始语音信号的时域波形图
title('原始语音信号时域图');
xlabel('timen');
ylabel('fuzhin');
figure
(2)
freqz(x)%绘制原始语音信号的频率响应图
title('频率响应图')
figure(3)
plot(f,abs(y1(1:
512)));
title('原始语音信号频谱')
xlabel('Hz');
ylabel('fudu');
如下图4-2所示:
图4-2语言信号分析
2.3.2含噪语音信号的合成
在MATLAB软件平台下,给原始的语音信号叠加上噪声,噪声类型分为如下几种:
(1)单频噪色(正弦干扰);
(2)高斯随机噪声。
绘出加噪声后的语音信号时域和频谱图,在视觉上与原始语音信号图形对比,也可通过Windows播放软件从听觉上进行对比,分析并体会含噪语音信号频谱和时域波形的改变。
程序代码如下:
fs=22050;
[x,fs,bits]=wavread('ding.wav');
%sound(x)
%t=0:
1/22050:
(size(x)-1)/22050;
y1=fft(x,1024);
f=fs*(0:
511)/1024;
x1=rand(1,length(x))';
x2=x1+x;
%t=0:
(size(x)-1);
%Au=0.3;
%d=[Au*sin(6*pi*5000*t)]';
%x2=x+d;
sound(x2);
figure
(1)
subplot(2,1,1)
plot(x)
title('原语音信号时域图')
subplot(2,1,2)
plot(x2)
title('加高斯噪声后语音信号时域图')
xlabel('timen');
ylabel('fudu');
y2=fft(x2,1024);
figure
(2)
subplot(2,1,1)
plot(abs(y1))
title('原始语音信号频谱');
xlabel('Hz');
ylabel('fudu');
subplot(2,1,2)
plot(abs(y2))
title('加噪语音信号频谱');
xlabel('Hz');
ylabel('fudu');程序运行可以听到声音,得到的结果图4-4和图4-5所示:
图4-4高斯随机噪声
图4-5正弦sin噪声的加噪语音信号
2.4滤波器的设计
2.4.1双线性变换法设计了巴特沃斯低通滤波器对加噪语音信号进行滤波
对加入高斯随机噪声和正弦噪声的语音信号进行滤波。
用双线性变换法设计了巴特沃斯数字低通IIR滤波器对两加噪语音信号进行滤波,并绘制了巴特沃斯低通滤波器的幅度图和两加噪语音信号滤波前后的时域图和频谱图。
程序设计如下:
[x,fs,bits]=wavread('wzf.wav');
%sound(x)
%随机噪声合成
x2=rand(1,length(x))';
y=x+x2;
%加入正弦噪声
%t=0:
(size(x)-1);
%Au=0.3;
%d=[Au*sin(2*pi*500*t)]';
%y=x+d;
wp=0.1*pi;
ws=0.4*pi;
Rp=1;
Rs=15;
Fs=22050;
Ts=1/Fs;
wp1=2/Ts*tan(wp/2);
ws1=2/Ts*tan(ws/2);
[N,Wn]=buttord(wp1,ws1,Rp,Rs,'s');
[Z,P,K]=buttap(N);
[Bap,Aap]=zp2tf(Z,P,K);
[b,a]=lp2lp(Bap,Aap,Wn);
[bz,az]=bilinear(b,a,Fs);
[H,W]=freqz(bz,az);
figure
(1)
plot(W*Fs/(2*pi),abs(H))
grid
f1=filter(bz,az,y);
figure
(2)
subplot(2,1,1)
plot(t,y)
title('滤波前的时域波形');
subplot(2,1,2)
plot(t,f1);
title('滤波后的时域波形');
sound(f1);
F0=fft(f1,1024);
f=fs*(0:
511)/1024;
figure(3)
y2=fft(y,1024);
subplot(2,1,1);
plot(f,abs(y2(1:
512)));
title('滤波前的频谱')
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2)
F1=plot(f,abs(F0(1:
512)));
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi');
程序运行可以播放滤波前面的语音信号,对比滤波前面的语音效果,得到的结果分别图4-6和图4-7所示:
图4-6高斯噪声滤波
图4-7正弦噪声滤波
2.4.2利用双线性变换实现频率响应S域到Z域的变换
利用双线性变换实现频率响应S域到Z域的变换法设计了巴特沃斯低通数字IIR滤波器,对加入高斯随机噪声和正弦噪声的语音信号进行滤波,并绘制了两滤波器滤波前后的语音信号时域图和频谱图。
程序设计如下:
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Ft*tan(wp/2);
fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,'s');
[b11,a11]=butter(n11,wn11,'s');
[num11,den11]=bilinear(b11,a11,0.5);
[x,fs,nbits]=wavread('wzf.wav');
n=length(x);
t=0:
(n-1);
x2=rand(1,length(x))';
y=x+x2;
%加入正弦噪声
%t=0:
(size(x)-1);
%Au=0.03;
%d=[Au*sin(2*pi*500*t)]';
%y=x+d;
figure
(1)
f2=filter(num11,den11,y)
subplot(2,1,1)
plot(t,y)
title('滤波前的加高斯噪声时域波形');
subplot(2,1,2)
plot(t,f2);
title('滤波后的时域波形');
sound(f1);
F0=fft(f1,1024);
f=fs*(0:
511)/1024;
figure
(2)
y2=fft(y,1024);
subplot(2,1,1);
plot(f,abs(y2(1:
512)));)
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2)
F1=plot(f,abs(F0(1:
512)));
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi');
程序运行可以播放滤波前面的语音信号,对比滤波前面的语音效果,得到的结果分别图4-8和图4-9所示:
图4-8高斯噪音滤波
图4-9正弦噪音滤波
2.4.3基于巴特沃斯模拟滤波器设计数字带通滤波器
设计了巴特沃斯带通数字IIR滤波器对加了高斯随机噪声和正弦噪声的语音信号进行滤波,并绘制了两滤波器滤波后的语音信号时域图和频谱图。
程序设计如下:
Wp=[0.3*pi,0.7*pi];
Ws=[0.2*pi,0.8*pi];
Ap=1;
As=30;
[N,wn]=buttord(Wp/pi,Ws/pi,Ap,As);
[b,a]=butter(N,wn,'bandpass');
%[db,mag,pha,grd,w]=freqz_m(b,a);
%Plot(w/pi,mag);
%Title('数字滤波器幅频响应|H(ejOmega)|')
[x,fs,nbits]=wavread('wzf.wav');
n=length(x);
t=0:
(size(x)-1);
x2=rand(1,length(x))';
y=x+x2;
%加入正弦噪声
%n=length(x);
%t=0:
(n-1);
%Au=0.03;
%d=[Au*sin(2*pi*500*t)]';
%y=x+d;
f=filter(bz,az,y);
figure
(1)
freqz(b,1,512)
f2=filter(bz,az,y)
figure
(2)
subplot(2,1,1)
plot(t,y)
title('滤波前的时域波形');
subplot(2,1,2)
plot(t,f2);
title('滤波后的时域波形');
sound(f2);
F0=fft(f1,1024);
f=fs*(0:
511)/1024;
figure(3)
y2=fft(y,1024);
subplot(2,1,1);
plot(f,abs(y2(1:
512)));
title('滤波前的频谱')
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2)
F1=plot(f,abs(F0(1:
512)));
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi');
程序运行可以听到声音,得到的结果分别图4-10和图4-11所示:
图4-10高斯噪声滤波
图4-17正弦噪声滤波
2.4.4基于窗函数法的FIR滤器波
使用窗函数法,选用海明窗设计了数字FIR低通滤波器对加了高斯随机噪声和正弦噪声的语音信号进行滤波,并绘制了两滤波器滤波后的语音信号时域图和频谱图。
程序设计如下:
fs=22050;
[x,fs,bits]=wavread('wzf.wav');
%sound(x)
t=0:
(size(x)-1);
x2=rand(1,length(x))';
y=x+x2;
%加入正弦噪声
t=0:
(n-1);
Au=0.03;
d=[Au*sin(2*pi*500*t)]';
y=x+d;
wp=0.25*pi;
ws=0.3*pi;
wdelta=ws-wp;
N=ceil(6.6*pi/wdelta);
wn=(0.2+0.3)*pi/2;
b=fir1(N,wn/pi,hamming(N+1));
figure
(1)
freqz(b,1,512)
f2=filter(bz,az,y)
figure
(2)
subplot(2,1,1)
plot(t,y)
title('滤波前的时域波形');
subplot(2,1,2)
plot(t,f2);
title('滤波后的时域波形');
sound(f2);
F0=fft(f1,1024);
f=fs*(0:
511)/1024;
figure(3)
y2=fft(y,1024);
subplot(2,1,1);
plot(f,abs(y2(1:
512)));
title('滤波前的频谱')
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2)
F1=plot(f,abs(F0(1:
512)));
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi');
程序运行可以听到声音,得到的结果分别图4-12和图4-13所示:
总结
为期一周的课程设计接近了尾声,虽然在设计中我遇到了许多困难,但是通过查阅资料,与同学交流彼此意见,解决不了的问题,在杨定礼老师的耐心解答下,最终用MATALAB软件做出了我的课题
下面介绍下我设计的课题:
基于MATLAB的语音信号分析和处理
本设计采用了高效快捷的开发工具——MATLAB,实现了语音信号的采集,对语音信号加噪声及设计滤波器滤除噪声的一系列工作。
从频率响应图中可以看出:
巴特沃斯滤波器具有单调下降的幅频特性,通带内是平滑的。
海明窗设计的FIR滤波器的频率特性几乎在任何频带上都比巴特沃斯滤波器的频率特性好,过渡带也比较小,只是海明窗设计的滤波器下降斜度较小对语言的过渡失真进行了补偿。
论文初步完成了设计任务,由于本人能力有限,还存在许多不足的地方,比如滤波器的设计种类还比较单一,没有做更多的滤波效果比较等。
在以后的工作和学习中会更加努力来完善设计任务。
在设计中,感谢杨老师的耐心指导,感谢专业指导小组给了我这次机会,使我在课程设计中学到了不少东西,为以后走上工作岗位奠定了良好的基础。