MATLAB语音信号采集课程设计.docx
- 文档编号:4693768
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:21
- 大小:550.03KB
MATLAB语音信号采集课程设计.docx
《MATLAB语音信号采集课程设计.docx》由会员分享,可在线阅读,更多相关《MATLAB语音信号采集课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
MATLAB语音信号采集课程设计
数字信号处理
课程设计报告
课设题目:
语音信号的采集与处理
学院:
信息科学与工程学院
专业:
电子信息工程
班级:
电子0903
姓名:
学号:
指导教师:
张海云、李锦彬
时间:
2012.12.31—2013.01.11
一.引言介绍..........................................................................................
二.MATLAB工具简介..........................................................................
三.课程设计任务.................................................................................
3.1语音信号的采集.........................................................................
3.2语音信号的频谱分析..................................................................
3.3设计数字滤波器和画出其频率响应给出各滤波器的性能指标........
3.4用滤波器对信号进行滤波...........................................................
3.5回放语音信号,分析滤波前后的语音变化...................................
四.课程设计原理及方案.......................................................................
4.1用窗函数法设计FIR滤波器........................................................
4.2用双线性变换法设计IIR数字滤波器...........................................
五.语音信号的采集及频谱分析.............................................................
六.设计滤波器及对语音信号进行滤波...................................................
6.1FIR低通滤波器设计及信号滤波..................................................
6.2FIR高通滤波器设计及信号滤波..................................................
6.3FIR带通滤波器设计及信号滤波..................................................
6.4IIR低通滤波器设计及信号滤波..................................................
6.5IIR高通滤波器设计及信号滤波..................................................
6.6IIR带通滤波器设计及信号滤波..................................................
七.课程设计心得体会..........................................................................
八.参考文献........................................................................................
一.引言
随着信息时代和数字世界的到来,数字信号处理已成为今一门极其重要的学科和技术领域。
数字信号处理在通信语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。
在数字信号处理应用中,数字滤波器十分重要并已获得广泛应用。
二.MATLAB工具简介
1.MATLAB是矩阵实验室(Matrix Laboratory)之意,现已发展成为适合多学科,多种工作平台的功能强大的大型软件,已经成为线性代数,自动控制理论,数理统计,数字信号处理,时间序列分析,动态系统仿真等高级课程的基本教学工具;
2.MATLAB的语言特点
(1)语言简洁紧凑,使用方便灵活,库函数极其丰富。
MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。
由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。
(2)运算符丰富。
由于MATLAB是用C语言编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。
(3)MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。
(4)程序限制不严格,程序设计自由度大。
例如,在MATLAB里,用户无需对矩阵预定义就可使用。
(5)程序的可移植性很好,基本上不做修改就可在各种型号的计算机和操作系统上运行。
(6)MATLAB的图形功能强大。
在FORTRAN和C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。
MATLAB还具有较强的编辑图形界面的能力。
(7)MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。
由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。
(8)功能强大的工具箱是MATLAB的另一特色。
MATLAB包含两个部分:
核心部分和各种可选的工具箱。
核心部分中有数百个核心内部函数。
其工具箱又分为两类:
功能性工具箱和学科性工具箱。
功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。
功能性工具箱用于多种学科。
而学科性工具箱是专业性比较强的。
(9)源程序的开放性。
开放性也许是MATLAB最受人们欢迎的特点。
除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。
三.课程设计任务
3.1语音信号的采集
利用Windows下的录音机,录制一段自己的话音,时间在3秒左右,然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数,采样率8000Hz,单通道,格式*.wav。
注:
如果没有办法录制自己语音,也可以用现成的语音也可以,文件格式
*.wav
3.2语音信号的频谱分析
在Matlab中,可以利用函数fft对信号进行快速傅立叶变换,得到信号的频谱特性,要求学生首先画出语音信号的时域波形,然后对语音信号进行频谱分析。
3.3设计数字滤波器和画出其频率响应给出各滤波器的性能指标;
给定滤波器的性能指标如下:
(1)低通滤波器的性能指标:
fb=1000Hz,fc=1200Hz,As=100dB,Ap=1dB.
(2)高通滤波器的性能指标:
fb=2700Hz,fc=3000Hz,As=100dB,Ap=1dB.
(3)带通滤波器的性能指标:
fb1=1200Hz,fb2=3000Hz,As=100dB,Ap=1dB.
fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB.
采用窗函数法和双线性变换法设计上面要求的3种滤波器,并画出滤波器的频率响应;
3.4用滤波器对信号进行滤波
然后用自己设计的滤波器对采集到的信号进行滤波,画出滤波后信号的时域波形及频谱,并对滤波前后的信号进行对比,分析信号的变化;
3.5回放语音信号,分析滤波前后的语音变化;
四.滤波器设计原理及设计方案
4.1用窗函数法设计FIR滤波器
根据过渡带宽及阻带衰减要求,选择窗函数的类型并估计窗口长度N(或阶数M=N-1),窗函数类型可根据最小阻带衰减As独立选择,因为窗口长度N对最小阻带衰减As没有影响,在确定窗函数类型以后,可根据过渡带宽小于给定指标确定所拟用的窗函数的窗口长度N,设待求滤波器的过渡带宽为Δw,它与窗口长度N近似成反比,窗函数类型确定后,其计算公式也确定了,不过这些公式是近似的,得出的窗口长度还要在计算中逐步修正,原则是在保证阻带衰减满足要求的情况下,尽量选择较小的N,在N和窗函数类型确定后,即可调用MATLAB中的窗函数求出窗函数wd(n)。
根据待求滤波器的理想频率响应求出理想单位脉冲响应hd(n),如果给出待求滤波器频率应为Hd,则理想的单位脉冲响应可以用下面的傅里叶反变换式求出:
在一般情况下,hd(n)是不能用封闭公式表示的,需要采用数值方法表示;从w=0到w=2π采样N点,采用离散傅里叶反变换(IDFT)即可求出。
用窗函数wd(n)将hd(n)截断,并进行加权处理,得到
如果要求线性相位特性,则h(n)还必须满足:
根据上式中的正、负号和长度N的奇偶性又将线性相位FIR滤波器分成四类。
要根据所设计的滤波特性正确选择其中一类。
例如,要设计线性相位低通特性可选择h(n)=h(N-1-n)一类,而不能选h(n)=-h(N-1-n)一类。
验算技术指标是否满足要求,为了计算数字滤波器在频域中的特性,可调用freqz子程序,如果不满足要求,可根据具体情况,调整窗函数类型或长度,直到满足要求为止。
4.2用双线性变换法设计IIR数字滤波器
脉冲响应不变法的主要缺点是产生频率响应的混叠失真。
这是因为从S平面到Z平面是多值的映射关系所造成的。
为了克服这一缺点,可以采用非线性频率压缩方法,将整个频率轴上的频率范围压缩到-π/T~π/T之间,再用z=esT转换到Z平面上。
也就是说,第一步先将整个S平面压缩映射到S1平面的-π/T~π/T一条横带里;第二步再通过标准变换关系z=es1T将此横带变换到整个Z平面上去。
这样就使S平面与Z平面建立了一一对应的单值关系,消除了多值变换性,也就消除了频谱混叠现象,映射关系如图1所示。
图1双线性变换的映射关系
为了将S平面的整个虚轴jΩ压缩到S1平面jΩ1轴上的-π/T到π/T段上,可以通过以下的正切变换实现
(1)
式中,T仍是采样间隔。
当Ω1由-π/T经过0变化到π/T时,Ω由-∞经过0变化到+∞,也即映射了整个jΩ轴。
将式
(1)写成
将此关系解析延拓到整个S平面和S1平面,令jΩ=s,jΩ1=s1,则得
再将S1平面通过以下标准变换关系映射到Z平面
z=es1T
从而得到S平面和Z平面的单值映射关系为:
(2)
(3)
式
(2)与式(3)是S平面与Z平面之间的单值映射关系,这种变换都是两个线性函数之比,因此称为双线性变换
式
(1)与式
(2)的双线性变换符合映射变换应满足的两点要求。
首先,把z=ejω,可得
(4)
即S平面的虚轴映射到Z平面的单位圆。
其次,将s=σ+jΩ代入式(4),得
因此
由此看出,当σ<0时,|z|<1;当σ>0时,|z|>1。
也就是说,S平面的左半平面映射到Z平面的单位圆内,S平面的右半平面映射到Z平面的单位圆外,S平面的虚轴映射到Z平面的单位圆上。
因此,稳定的模拟滤波器经双线性变换后所得的数字滤波器也一定是稳定的。
双线性变换法优缺点:
双线性变换法与脉冲响应不变法相比,其主要的优点是避免了频率响应的混叠现象。
这是因为S平面与Z平面是单值的一一对应关系。
S平面整个jΩ轴单值地对应于Z平面单位圆一周,即频率轴是单值变换关系。
这个关系如式(4)所示,重写如下:
上式表明,S平面上Ω与Z平面的ω成非线性的正切关系,如图2所示。
由图2看出,在零频率附近,模拟角频率Ω与数字频率ω之间的变换关系接近于线性关系;但当Ω进一步增加时,ω增长得越来越慢,最后当Ω→∞时,ω终止在折叠频率ω=π处,因而双线性变换就不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象,从而消除了频率混叠现象。
图2双线性变换法的频率变换关系
但是双线性变换的这个特点是靠频率的严重非线性关系而得到的,如式(4)及图2所示。
由于这种频率之间的非线性变换关系,就产生了新的问题。
首先,一个线性相位的模拟滤波器经双线性变换后得到非线性相位的数字滤波器,不再保持原有的线性相位了;其次,这种非线性关系要求模拟滤波器的幅频响应必须是分段常数型的,即某一频率段的幅频响应近似等于某一常数(这正是一般典型的低通、高通、带通、带阻型滤波器的响应特性),不然变换所产生的数字滤波器幅频响应相对于原模拟滤波器的幅频响应会有畸变,如图3所示。
图3双线性变换法幅度和相位特性的非线性映射
对于分段常数的滤波器,双线性变换后,仍得到幅频特性为分段常数的滤波器,但是各个分段边缘的临界频率点产生了畸变,这种频率的畸变,可以通过频率的预畸来加以校正。
也就是将临界模拟频率事先加以畸变,然后经变换后正好映射到所需要的数字频率上。
五.语音信号的采集及频谱分析
用WINDOWS下的录音机,用单声道录制一段音乐或声音,时间在5S内。
然后MATLAB软件平台下,利用函数WAVREAD对语音信号进行采样,记住采样频率和采样点数。
对语音信号进行快速傅立叶变换,在一个窗口同时画出信号的时域波形图和频谱图,分析语音信号的频谱特点
[y,fs,nbits]=wavread('music.wav');%加载语音信号利用函数wavread对语音信号进行采样
wavplay(y,fs);%回放语音信号
N=length(y);%语音信号长度
Y=fft(y,N);%用傅里叶变换求频域
subplot(2,1,1);
plot(y);
title('图1原始信号时域波形图');
subplot(2,1,2);
plot(abs(Y));
title('图2原始信号频谱图');
六.设计滤波器及对语音信号进行滤波
6.1FIR低通滤波器设计及信号滤波
[x1,Fs,bits]=wavread('music.wav');
derta_Fs=Fs/length(x1);%设置频谱的间隔,分辨率,这里保证了x轴的点数必须和y轴点数一致
fs=Fs;
fp1=1000;
fs1=1200;
As1=100;
wp1=2*pi*fp1/fs;%
ws1=2*pi*fs1/fs;%
BF1=ws1-wp1;
wc1=(wp1+ws1)/2;
M1=ceil((As1-7.95)/(2.286*BF1))+1;%按凯泽窗计算滤波器阶数
N1=M1+1;
beta1=0.1102*(As1-8.7);
Window=(kaiser(N1,beta1));%求凯泽窗窗函数
b1=fir1(M1,wc1/pi,Window);%wc1/pi为归一化,窗函数法设计函数
figure
(2);
freqz(b1,1,512);%[H,w]=freqz(B,A,N),
(1)中B和A分别为离散系统的系统函数分子、分母多项式的系数向量,返回量H则包含了离散系统频响在0~pi范围内N个频率等分点的值(其中N为正整数),w则包含了范围内N个频率等分点。
调用默认的N时,其值是512。
title('FIR低通滤波器的频率响应');
x1_low=filter(b1,1,x1);%对信号进行低通滤波,Y=filter(B,A,X),输入X为滤波前序列,Y为滤波结果序列,B/A提供滤波器系数,B为分子,A为分母
sound(x1_low,Fs,bits);
figure(3);
subplot(2,1,1);
plot(x1_low);
title('信号经过FIR低通滤波器(时域)');
subplot(2,1,2);
plot([-Fs/2:
derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_low))));
title('信号经过FIR低通滤波器(频域)');
6.2FIR高通滤波器设计及信号滤波
[x1,Fs,bits]=wavread('music.wav');
derta_Fs=Fs/length(x1);%设置频谱的间隔,分辨率,这里保证了x轴的点数必须和y轴点数一致
fs=Fs;
As2=100;
fp2=3000;
fs2=2700;
wp2=2*pi*fp2/fs;
ws2=2*pi*fs2/fs;
BF2=wp2-ws2;
wc2=(wp2+ws2)/2;
M2=ceil((As2-7.95)/(2.286*BF2))+1;%按凯泽窗计算滤波器阶数
N2=M2+1;
beta2=0.1102*(As2-8.7);
Window=(kaiser(N2,beta2));%求凯泽窗窗函数
b2=fir1(M2,wc2/pi,'high',Window);
figure(4);
freqz(b2,1,512);%数字滤波器频率响应
title('FIR高通滤波器的频率响应');
x1_high=filter(b2,1,x1);%对信号进行高通滤波
sound(x1_high,Fs,bits);
figure(5);
subplot(211);
plot(x1_high);
title('信号经过FIR高通滤波器(时域)');
subplot(212);
plot([-Fs/2:
derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_high))));
title('信号经过FIR高通滤波器(频域)');
6.3FIR带通滤波器设计及信号滤波
fs=Fs;
As3=100;
fp3=[1200,3000];fs3=[1000,3200];
wp3=2*pi*fp3/fs;
ws3=2*pi*fs3/fs;
BF3=wp3
(1)-ws3
(1);
wc3=wp3+BF3/2;
M3=ceil((As3-7.95)/(2.286*BF3))+1;%按凯泽窗计算滤波器阶数
N3=M3+1;
beta3=0.1102*(As3-8.7);
Window=(kaiser(N3,beta3));%求凯泽窗窗函数
b3=fir1(M3,wc3/pi,'bandpass',Window);%带通滤波器
figure(6);
freqz(b3,1,512);%数字滤波器频率响应
title('FIR带通滤波器的频率响应');
x1_daitong=filter(b3,1,x1);%对信号进行带通滤波
sound(x1_daitong,Fs,bits);
figure(7);
subplot(211);
plot(x1_daitong);
title('信号经过FIR带通滤波器(时域)');
subplot(212);
plot([-Fs/2:
derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_daitong))));
title('信号经过FIR带通滤波器(频域)');
6.4IIR低通滤波器设计及信号滤波
[x1,Fs,bits]=wavread('music.wav');
derta_Fs=Fs/length(x1);%设置频谱的间隔,分辨率,这里保证了x轴的点数必须和y轴点数一致
fs=Fs;
fp1i=1000;
fs1i=1200;
wp1i=2*pi*fp1i/fs;
ws1i=2*pi*fs1i/fs;
Rp1i=1;
Rs1i=100;
Ts=1/fs;
Wp1i=2/Ts*tan(wp1i/2);
Ws1i=2/Ts*tan(ws1i/2);%按频率转换公式进行转换,预畸变
[N1i,Wn1i]=cheb1ord(Wp1i,Ws1i,Rp1i,Rs1i,'s');%计算模拟滤波器的最小阶数
[B1i,A1i]=cheby1(N1i,Rp1i,Wn1i,'s');%设计模拟原型滤波器
[bz1i,az1i]=bilinear(B1i,A1i,fs);%运用双线性变换法得到数字滤波器传递函数
figure(10);
freqz(bz1i,az1i,512,fs);
title('切比雪夫1型低通滤波器的频率响应');
x1_lowi=filter(bz1i,az1i,x1);%对信号进行低通滤波,Y=filter(B,A,X),输入X为滤波前序列,Y为滤波结果序列,B/A提供滤波器系数,B为分子,A为分母
sound(x1_lowi,Fs,bits);
figure(11);
subplot(211);
plot(x1_lowi);
title('信号经过IIR低通滤波器(时域)');
subplot(212);
plot([-Fs/2:
derta_Fs:
Fs/2-derta_Fs],abs(fftshift(fft(x1_lowi))));
title('信号经过IIR低通滤波器(频域)');
6.5IIR高通滤波器设计及信号滤波
[x1,Fs,bits]=wavread('music.wav');
derta_Fs=Fs/length(x1);%设置频谱的间隔,分辨率,这里保证了x轴的点数必须和y轴点数一致
%---IIR高通按钮消息响应函数.
fs=Fs;
fp2i=3000;%通带截止频率
fs2i=2700;%组带截止频率
Rp2i=1;
Rs2i=100;
Wp2i2=2*pi*fp2i/fs;
Ws2i2=2*pi*fs2i/fs;
Wp2i=tan(Wp2i2/2);
Ws2i=tan(Ws2i2/2);
wphi=1;%归一化
wshi=Wp2i/Ws2i;%高通频率转换成低通频率指标
%估计滤波器的阶数
[N2i,Wn2i]=cheb1ord(wphi,wshi,Rp2i,Rs2i,'s');
%设计滤波器
[B2i,A2i]=cheby1(N2i,Rp2i,Wn2i,'s');
[numi2,deni2]=lp2hp(B2i,A2i,Wp2i);
[bz2i,az2i]=bilinear(numi2,deni2,0.5)
figure(12);
freqz(bz2i,az2i,512,fs);
title('切比雪夫1型IIR高通滤波器的频率响应');
x1_highi=filter(bz2i,az2i,x1);%对信号进行高通滤波,Y=filter(B,A,X),输入X为滤波前序列,Y为滤波结果序列,B/A提供滤波器系数,B为分子,A为分母
sound(x1_highi,Fs,bits);
figure(13);
subplot(211);
plot(x1_highi);
title('信号经过IIR高通滤波器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 语音 信号 采集 课程设计