数字信号处理语音处理课程设计实验报告.docx
- 文档编号:9947990
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:69
- 大小:527.21KB
数字信号处理语音处理课程设计实验报告.docx
《数字信号处理语音处理课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《数字信号处理语音处理课程设计实验报告.docx(69页珍藏版)》请在冰点文库上搜索。
数字信号处理语音处理课程设计实验报告
第十章综合实验与考查
一、实验目的
综合运用所学数字信号处理理论知识进行语音信号的采集、频谱分析、延时、滤波处理等,通过理论推导得出相应结论并利用MATLAB作为编程工具进行计算机实现,从而对数字信号处理有一个系统的掌握和直观理解。
二、需验证的理论
1、语音信号采集与处理
2、信号频谱分析
3、数字滤波器分析与设计
三、实验内容
录制一段个人的语音信号,然后对语音信号进行时域波形和频谱分析,然后进行滤波处理。
1、将原始信号加入延时和混响回声处理,将处理后信号进行频谱分析及语音信号回放,与原始频谱和原始声音进行比较;
2、对原始语音信号进行FIR和IIR滤波,然后画出滤波后信号的时域波形和频谱,对滤波前后的信号和频谱进行对比;同时回放滤波后信号,与原始声音对比,分析声音的变化。
四、实验指导
1、语音信号的采集
通过录音软件录制一段语音,说出自己的名字和学号,命名为“学号+姓名”,时长大约1到2秒,在MATLAB中,通过使用wavread函数,对语音进行采样:
[y,fs,nbits]=wavread('xxxxxxx');%语音信号的采集
采样值放在向量y中,采样频率为fs,采样位数为nbits。
2、语音信号的频谱分析和回放
首先画出采样后语音信号的时域波形,然后对信号进行快速傅里叶变换,得到其频谱图。
读取语音文件并绘出波形和频谱的程序:
[y,fs,nbits]=wavread('xxxxxxxx');%语音信号的采集
sound(y,fs,nbits);%语音信号的播放
n=length(y);%计算语音信号的长度
Y=fft(y,n);%快速傅里叶变换
figure;
subplot(2,1,1);%绘出时域波形
3、原始信号延时、混响和回声的处理
(1)对原始信号加入延时,并画出延时后信号的时域波形和频谱图,然后分别从时域和频域上分析延时后信号与原始信号的变化,最后再利用sound函数对声音进行回放,对感觉到的延时前后的声音变化作出说明。
(2)设计如下几种特殊类型滤波器,对原始信号分别进行如下几种回声滤波或混响处理,并画出滤波后信号的时域波形和频谱图,然后分析其变化,最后对声音进行回放,对感觉到的滤波前后的声音变化作出说明。
回声或者混响滤波器类型:
1单回声滤波器系统函数(可以用FIR滤波器实现,只需要一重回声):
回声就是原始信号与他自己延时衰减后的信号叠加而成的声音。
单回声方程:
y(n)=x(n)+ax(n-r),系统函数如上。
2多重回声滤波器系统函数(只能用IIR滤波器实现):
③无限回声滤波器系统函数:
④全通结构混响器系统函数:
4、原始信号的滤波处理
(1)分别用FIR和IIR滤波器对采集的语音信号进行滤波。
(2)对滤波后的信号进行傅里叶变换,分别得到FIR和IIR滤波后信号的频谱特性,同时画出其时域波形,与原始信号进行比较,分析信号的变化。
(3)对FIR滤波和IIR滤波后的信号进行比较并作出说明。
(4)对滤波后的声音进行回放并对比分析变化。
根据频谱特征设计FIR和IIR滤波器。
在Matlab中,可以利用函数fir1设计FIR滤波器,利用函数butter,cheby1设计IIR滤波器,利用Matlab中的函数freqz画出各步滤波器的频率响应。
①低通滤波器的性能指标:
fp=1000Hz,fc=1200Hz,As=100db,Ap=1dB
②高通滤波器的性能指标:
fp=3500Hz,fc=4000Hz,As=100dB,Ap=1dB;
③带通滤波器的性能指标:
fp1=1200Hz,fp2=3000hZ,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB
在MATLAB中,利用[N,wc]=butter(N,wc,Rp,As,'s')设计并计算巴特沃斯模拟滤波器的阶数N和3dB截止频率wc;[B,A]=cheby1(N,Rp,wpo,'ftypr')设计切比雪夫I型滤波器。
五、实验设计报告要求
报告每人单独撰写,内容包括:
基本原理、设计方案及实现、仿真结果及分析、结论与建议。
附参考文献、程序。
六、思考题
1、通过理论分析和回放等说明滤波前后的信号变化
答:
通过实验,能发现明显变化,时域波形和频域波形都有改变,不同滤波器的结果不同,具体分析在以下的实验结果中。
比如通过带通滤波器后频谱信号几乎没有,通过全通系统则没有变化,经过低通滤波器变化很小。
2、换一个与你性别相异的人录制同样一段语音内容,进行上面的过程,分析变化;
答:
3、通过使用randn函数产生随机噪声信号,并加到语音信号中得到被污染的语音信号叠加到原始的语音信号中,分析叠加前后信号频谱的变化,设计一个合适的滤波器,能够把噪声部分滤除。
参考文献:
杨述斌,李永全主编,《数字信号处理实践教程》,华中科技大学出版社,2007.1
实验报告
(1)语音采样和观察
clear,clc;
[y,fs]=audioread('E:
\大学课程\大三上\数字信号处理\201400121184吴蔓.mp3');%语音信号的采集,把采样值放在y中
subplot(3,1,1)
plot(y);
title('时域波形');
sound(y,fs);%语音信号的播放
n=length(y)%计算语音信号的长度
Y=fft(y);%快速傅里叶变换
subplot(3,1,2)
plot(abs(Y));%绘出频域波形
title('幅频特性');
subplot(3,1,3)
plot(angle(Y));
title('相频特性');
可以从图像看出实信号的快速傅里叶变换果然成圆周偶对称。
也就是关于220032的一半圆周偶对称。
(2)延时
clear,clc;
[y,fs]=audioread('E:
\大学课程\大三上\数字信号处理\201400121184吴蔓.mp3');%语音信号的采集
q=size(y)%求出矩阵的大小
y1=[zeros(220032,1),y];
subplot(3,1,1)
plot(y1);
title('延时后时域波形');
sound(y1,fs);%延时后语音信号的播放
n=length(y1)%计算延时后语音信号的长度
Y1=fft(y1);%对延时后信号进行快速傅里叶变换
subplot(3,1,2)
plot(abs(Y1));%绘出延时后频域波形
title('延时后幅频特性');
subplot(3,1,3)
plot(angle(Y1));
title('延时后相频特性');
我延时了和原信号一样长的点数,可以看出来延时后的信号要后播放一小段时间并且幅频相频差别不大。
(3)混响:
clear,clc;
[y,fs]=audioread('E:
\大学课程\大三上\数字信号处理\201400121184吴蔓.mp3');%语音信号的采集
y1=[zeros(220032,1);y];
y2=[y;zeros(220032,1)];
y3=y1+y2;
subplot(3,1,1)
plot(y1);
title('混响时域波形');
sound(y3,fs);
n=length(y3)
Y3=fft(y3);
subplot(3,1,2)
plot(abs(Y3));
title('混响幅频特性');
subplot(3,1,3)
plot(angle(Y3));
title('混响相频特性');
混响可以听到两个声音的重叠,我设置的延时刚好是原信号长度,所以没有混在一起,而是响了两次。
(4)单回声:
clear,clc;
[y,fs]=audioread('E:
\大学课程\大三上\数字信号处理\201400121184吴蔓.mp3');
%语音信号的采集,从命令行窗口的输出可以看出
%采样后的信号矩阵是多行一列的,下面n=length(y0)语句计算出来有220032个采样数据,有的数据为0,大多数数据是复数
y0=y(:
1);
%冒号代表“所有的”,这里指的是把y的所有行的第一列给y0,实际上y0和y一样的,这句指令可以没有
y1=filter([1,zeros(1,30000),0.5],1,y');
%这里的y'指的是y的转置矩阵,故是一行多列的,y'作为filter函数的输入矩阵
%[1,zeros(1,30000),0.5]是分子矩阵,1是分母,就相当于这是个有限长的信号,求其差分方程,y1是输出矩阵,这里filter函数相当于是个FIR滤波器,系统函数
%相当于H(Z)=1-0.5Z.^(-30001).这个系统函数实现了一个衰减了一半延时了30000个数据点的回声和原信号叠加的单回声效果。
如果把0.5改成0.05则回声几乎听不见,衰减太大
%把30000改成更大的数比如80000则要隔更久才能听到回声
sound(10*y1,fs);
%回放单回声信号,这里乘以10以加强信号,便于听取,因为如果衰减系数太大则回声难以听见
n=length(y0);
Y0=fft(y0);
Y=fft(y1);
figure
(1);
subplot(2,1,1)
plot(y);
title('原音时域波形');
axis([0225000-0.40.6]);
subplot(2,1,2)
plot(y1);
title('单回声时域波形');
axis([0225000-0.40.6]);
figure
(2);
subplot(2,1,1)
plot(abs(Y0));
title('原音幅频特性');
axis([02250000100]);
subplot(2,1,2)
plot(abs(Y));
title('单回声幅频特性');
axis([02250000100]);
figure(3);
subplot(2,1,1)
plot(angle(Y0));
title('原音相频特性');
axis([0225000-44]);
subplot(2,1,2)
plot(angle(Y));
title('单回声相频特性');
axis([0225000-44]);
时域波形上差别也很大,有的频率点原声幅度特别小但单回声由于延迟了所以在后面也还有很大幅度信号。
单回声的幅度稍微大一点。
横坐标太大所以看不出来细微差别,下面缩小横坐标范围。
可以看出来,原音和单回声的时域波形差别是很大的,不同频率点由于混叠相加导致单回声波形变化大。
但是二者进行快速傅里叶变换后幅频特性差别不大,但实际肯定不一样,只是不太容易看出来。
改动程序如下(只改了横纵坐标),看出单回声的幅频相频和原声差距很大。
figure
(2);
subplot(2,1,1)
plot(abs(Y0));
title('原音幅频特性');
axis([02250100]);
subplot(2,1,2)
plot(abs(Y));
title('单回声幅频特性');
axis([02250100]);
figure(3);
subplot(2,1,1)
plot(angle(Y0));
title('原音相频特性');
axis([0225-44]);
subplot(2,1,2)
plot(angle(Y));
title('单回声相频特性');
axis([0225-44]);
心得收获:
一,加一撇表示转置。
如右图
二,语音信号真的大多数是在3.4khz以内的,由下面三图对比可以发现,实际人的声音只在一段频率范围内,并且主要集中在3400hz以内。
但录制的语音还有一些少许的幅度很低的高频信号达到了100khz,那都是人耳听不见的声音。
也可以看出声音占得频谱很宽,并且是在数字域的pi也就是模拟域的FS以内,audioread函数读取Mp3格式的采样率大约是44100hz。
也可以看出采样时大致满足奈奎斯特定理,fs约等于2fh.
(5)多重回声(回声数量有限):
clear,clc;
[y,fs]=audioread('E:
\大学课程\大三上\数字信号处理\201400121184吴蔓.mp3');
%语音信号的采集,从命令行窗口的输出可以看出
%采样后的信号矩阵是多行一列的,下面n=length(y0)语句计算出来有220032个采样数据,有的数据为0,大多数数据是复数
y0=y(:
1);
%冒号代表“所有的”,这里指的是把y的所有行的第一列给y0,实际上y0和y一样的,这句指令用来取单声道信号
N=3;%三重回声
y1=filter(1,[1,zeros(1,80000/(N+1)),0.5],y');
%这里的y'指的是y的转置矩阵,故是一行多列的,y'作为filter函数的输入矩阵
%[1,zeros(1,30000),0.5]是分母矩阵,1是分子,就相当于这是个无限长的信号,求其差分方程,y1是输出矩阵,这里filter函数相当于是个IIR滤波器,系统函数
%相当于H(Z)=1/(1-0.5Z.^(-30001)).
sound(10*y1,fs);%回放三重回声信号,这里乘以10以加强信号,便于听取,因为如果衰减系数太大则回声难以听见
n=length(y0);
Y0=fft(y0);
Y=fft(y1);
figure
(1);
subplot(2,1,1)
plot(y);
title('原音时域波形');
axis([0225000-0.40.6]);
subplot(2,1,2)
plot(y1);
title('多重回声时域波形');
axis([0225000-0.40.6]);
figure
(2);
subplot(2,1,1)
plot(abs(Y0));
title('原声幅频特性');
axis([02250000500]);
subplot(2,1,2)
plot(abs(Y));
title('多重回声幅频特性');
axis([02250000500]);
figure(3);
subplot(2,1,1)
plot(angle(Y0));
title('原声相频特性');
axis([0225000-44]);
subplot(2,1,2)
plot(angle(Y));
title('多重回声相频特性');
axis([0225000-44]);
由实验结果知,多重回声时域波形明显“毛刺”更多,多个频率声音情况的叠加也能听得非常明显。
可以看二者幅频特性差别对比,多重回声在很多频率点的幅度都更大,相频差别也很大,如果把横坐标放小,可以看看下图:
更改这段程序中横纵坐标得到下图,可以看出明显差别。
多重回声的相频变化快的多,并且非线性非常严重,这也和IIR滤波器的特性符合。
figure(3);
subplot(2,1,1)
plot(angle(Y0));
title('原声相频特性');
axis([0225-44]);
subplot(2,1,2)
plot(angle(Y));
title('多重回声相频特性');
axis([0225-44]);
改动这段程序的横纵坐标,也可以由图看出多重回声的幅度变化也更快,二者差别非常大。
figure
(2);
subplot(2,1,1)
plot(abs(Y0));
title('原声幅频特性');
axis([02250100]);
subplot(2,1,2)
plot(abs(Y));
title('多重回声幅频特性');
axis([02250100]);
(6)无限回声(回声个数无限)
我放了两个程序在此,只是参数设置不一样而已,第一个r=9,第二个r=53
clear,clc;
[y,fs]=audioread('E:
\大学课程\大三上\数字信号处理\201400121184吴蔓.mp3');
y0=y(:
1);
a=0.5;
Bz=[1,a];
Az=1;
y1=filter(Bz,Az,y);%系统函数为H(Z)=Z.^(-9)/(1-a*z.^(-9));
sound(10*y1,fs);
Y0=fft(y0);
Y=fft(y1);
figure
(1);
subplot(2,1,1)
plot(y);
title('原音时域波形');
axis([0225000-0.40.6]);
subplot(2,1,2)
plot(y1);
title('无限回声时域波形');
axis([0225000-0.40.6]);
figure
(2);
subplot(2,1,1)
plot(abs(Y0));
title('原音幅频特性');
axis([02250000100]);
subplot(2,1,2)
plot(abs(Y));
title('无限回声幅频特性');
axis([02250000100]);
figure(3);
subplot(2,1,1)
plot(angle(Y0));
title('原音相频特性');
axis([0225000-44]);
subplot(2,1,2)
plot(angle(Y));
title('无限回声相频特性');
axis([0225000-44]);
这个程序r=53,以示对比
clear,clc;
[y,fs]=audioread('E:
\大学课程\大三上\数字信号处理\201400121184吴蔓.mp3');
y0=y(:
1);
a=0.9;
Bz=[zeros(1,53),1];
Az=[1,zeros(1,52),-a];
y1=filter(Bz,Az,y);%系统函数为H(Z)=Z.^(-53)/(1-a*z.^(-53));
sound(10*y1,fs);
Y0=fft(y0);
Y=fft(y1);
figure
(1);
subplot(2,1,1)
plot(y);
title('原音时域波形');
axis([0225000-12]);
subplot(2,1,2)
plot(y1);
title('无限回声时域波形');
axis([0225000-12]);
figure
(2);
subplot(2,1,1)
plot(abs(Y0));
title('原音幅频特性');
axis([040000800]);
subplot(2,1,2)
plot(abs(Y));
title('无限回声幅频特性');
axis([040000800]);
figure(3);
subplot(2,1,1)
plot(angle(Y0));
title('原音相频特性');
axis([250500-44]);
subplot(2,1,2)
plot(angle(Y));
title('无限回声相频特性');
axis([250500-44]);
可以看出无限回声在很多频率点有明显的毛刺,凸起,应该都是我们滤波器的系统函数中的极点造成的,我设置的滤波器极点是半径为0.9的圆上的53个均匀的频率点,在频率为0处也有高阶极点可以看出0处也有毛刺。
可以看出无限回声在大多数频率点的幅度更低,某些点的幅度又更高,这都是不同回声叠加上来的结果。
(7)全通混响:
clear,clc;
[y,fs]=audioread('E:
\大学课程\大三上\数字信号处理\201400121184吴蔓.mp3');
y0=y(:
1);
a=0.9;
Bz=[a,zeros(1,10),1];
Az=[1,zeros(1,10),a];
y1=filter(Bz,Az,y);%系统函数为H(Z)=a+Z.^(-11)/(1+a*z.^(-11));
sound(10*y1,fs);
Y0=fft(y0);
Y=fft(y1);
figure
(1);
subplot(2,1,1)
plot(y);
title('原音时域波形');
axis([0225000-11]);
subplot(2,1,2)
plot(y1);
title('全通混响时域波形');
axis([0225000-11]);
figure
(2);
subplot(2,1,1)
plot(abs(Y0));
title('原音幅频特性');
axis([02250000800]);
subplot(2,1,2)
plot(abs(Y));
title('全通混响幅频特性');
axis([02250000800]);
figure(3);
subplot(2,1,1)
plot(angle(Y0));
title('原音相频特性');
axis([0225-44]);
subplot(2,1,2)
plot(angle(Y));
title('全通混响相频特性');
axis([0225-44]);
可以看出通过全通滤波器后时域波形没有变化。
系
统函数零极点相消了也不会造成幅度相应的凸起和凹陷。
总之通过全滤波器得到的函数没变化。
(7)IIR低通滤波器滤波处理前后对比
clear,clc;
[y,fs]=audioread('E:
\大学课程\大三上\数字信号处理\201400121184吴蔓.mp3');
y0=y(:
1);
%给出数字低通滤波器参数
wp=0.25*pi;ws=0.35*pi;Fs=8000;
Rp=1;As=100;%Rp是通带最大衰减,As是阻带最小衰减
%用双线性变换法将数字低通滤波器指标转换为模拟低通滤波器的指标(指标数字化)
%非线性的频率变换,但Rp和As两个衰减值不会变。
T=1/Fs;
omegap=(2/T)*tan(wp/2);%对特定频率点预畸变
omegas=(2/T)*tan(ws/2);%对特定频率点预畸变
%估算模拟低通滤波器的阶数N和3dB截止频率wc
[N,wc]=buttord(omegap,omegas,Rp,As,'s');%计算模拟滤波器的阶数和3dB截止频率
[Z,P,K]=buttap(N);%创建butterworth模拟低通滤波器
[bLP,aLP]=zp2tf(Z,P,K);
[bP,aP]=lp2lp(bLP,aLP,wc);%lp2lp是实现归一化模拟低通原型滤波器到模拟低通转换的函数,变换得到模拟低通滤波器的系统函数
[b,a]=bilinear(bP,aP,Fs);%双线性变换法转换为数字低通滤波器H(Z),bLP是模拟低通滤波器分子多项式的系数,aLP是模
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 语音 课程设计 实验 报告