matlab语音信号采集与初步处理要点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《matlab与信号系统》实验报告
学院:
学号:
姓名:
考核实验——语音信号采集与处理初步
一、课题要求
1.语音信号的采集
2.语音信号的频谱分析
3.设计数字滤波器和画出频率响应
4.用滤波器对信号进行滤波
5.比较滤波前后语音信号的波形及频谱
6.回放和存储语音信号
(第5、第6步我放到一起做了)
二、语音信号的采集
本段音频文件为胡夏演唱的“那些年”的前奏(采用Audition音频软件进行剪切,时长17秒)。运行matlab软件,在当前目录中打开原音频文件所在的位置,采用wavread函数对其进行采样,并用sound函数可进行试听,程序运行之后记下采样频率和采样点。
利用函数wavread对语音信号的采集的程序如下:
clear;
[y,fs,bits]=wavread('music.wav'); %x:语音数据;fs:采样频率;bits:采样点数sound(y,fs,bits); %话音回放
程序运行之后,在工作区间中可以看到采样频率fs=44100Hz,采样点bits=16
三、语音信号的频谱分析
先画出语音信号的时域波形,然后对语音号进行快速傅里叶变换,得到信号的频谱特性。语音信号的FFT频谱分析的完整程序如下:
clear;
[y,fs,bits]=wavread('music.wav'); %x:语音数据;fs:采样频率;bits:采样点数sound(y,fs,bits); %话音回放
n = length (y) ; %求出语音信号的长度
Y=fft(y,n); %傅里叶变换
subplot(2,1,1);
plot(y);
title('原始信号波形');
subplot(2,1,2);
plot(abs(Y)); title('原始信号频谱');
程序结果如下图:
四、设计数字滤波器和画出频率响应
根据语音信号的特点给出有关滤波器的性能指标:
1)低通滤波器性能指标,fp=1000Hz,fc=1200 Hz,As=100dB,Ap=1dB;
2)高通滤波器性能指标,fc=4800 Hz,fp=5000 Hz As=100dB,Ap=1dB。
要求学生分别用窗函数法和双线性变换法设计上面要求的两种滤波器,在MATLAB中,可以利用函数fir1设计FIR滤波器;用函数butte设计IIR滤波器;最后,利用MATLAB中的函数freqz画出各滤波器的频率响应。
分析如下:函数fir1默认的设计滤波器的方法为窗函数法,其中可选的窗函数有Rectangular Barlrtt Hamming Hann Blackman窗,其相应的都有实现函数。
函数butter,cheby1和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。
1、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'); %求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z
域的变换
[h,w]=freqz(num11,den11); %根据参数求出频率响应
plot(w*8000*0.5/pi,abs(h));
title('IIR低通滤波器');
legend('用butter设计');
grid;
Ft=8000;
Fp=5000;
Fs=4800;
wp1=tan(pi*Fp/Ft);%高通到低通滤波器参数转换
ws1=tan(pi*Fs/Ft);
wp=1;
ws=wp1*wp/ws1;
[n13,wn13]=cheb1ord(wp,ws,1,100,'s'); %求模拟的低通滤波器阶数和截止频率[b13,a13]=cheby1(n13,1,wn13,'s'); %求S域的频率响应的参数
[num,den]=lp2hp(b13,a13,wn13);%将S域低通参数转为高通的
[num13,den13]=bilinear(num,den,0.5); %利用双线性变换实现频率响应S域到Z域转换
[h,w]=freqz(num13,den13);
plot(w*21000*0.5/pi,abs(h));
title('IIR高通滤波器');
legend('用cheby1设计');
axis([0 12000 0 1.5]);
grid;
用窗函数设计低通滤波器的程序如下:
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*Fp/Ft;
ws=2*Fs/Ft;
rp=1;
rs=100;
p=1-10.^(-rp/20); %通带阻带波纹
s=10.^(-rs/20);
fpts=[wp ws];
mag=[1 0];
dev=[p s];
[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);%由kaiserord求滤波器的阶数和截止频率
b21=fir1(n21,wn21,Kaiser(n21+1,beta)); %由fir1设计滤波器
[h,w]=freqz(b21,1); %得到频率响应
plot(w/pi,abs(h));
title('FIR低通滤波器');
grid;