语音信号的处理与滤波.docx
《语音信号的处理与滤波.docx》由会员分享,可在线阅读,更多相关《语音信号的处理与滤波.docx(12页珍藏版)》请在冰点文库上搜索。
语音信号的处理与滤波
广西工学院
数字信号处理课程设计
设计题目:
语音信号的处理与滤波
系别:
学号:
姓名:
班级:
指导教师:
完成日期:
1.摘要………………………………3
2.MATLAB简介………………………3
3.设计目的…………………………4
4.设计内容…………………………4
5.设计原理…………………………4
6.设计步骤…………………………5
7.总结与分析………………………10
8.参考资料…………………………10
摘要
本课题分析了数字信号处理课程的重要性及特点,可以帮助理解与掌握课程中的基本概念、基本原理、基本分析方法;并利用MATLAB对语音信号进行分析和处理,要求采集语音信号后,在MATLAB软件平台进行频谱分析。
用设计的数字滤波器对语音信号进行了滤波
MATLAB简介
MATLAB是一种对技术计算高性能的语言。
它集成了计算,可视化和编程于一个易用的环境中,在此环境下,问题和解答都表达为我们熟悉的数学符号。
典型的应用有:
∙数学和计算
∙算法开发
∙建模,模拟和原形化
∙数据分析,探索和可视化
∙科学与工程制图
∙应用开发,包括图形用户界面的建立
MATLAB是一个交互式的系统,其基本数据元素是无须定义维数的数组。
这让你能解决很多技术计算的问题,尤其是那些要用到矩阵和向量表达式的问题。
而要花的时间则只是用一种标量非交互语言(例如C或Fortran)写一个程序的时间的一小部分。
.
名称“MATLAB”代表matrixlaboratory(矩阵实验室)。
MATLAB最初是编写来提供给对由LINPACK和EINPACK工程开发的矩阵软件简易访问的。
今天,MATLAB使用由LAPACK和ARPACK工程开发的软件,这些工程共同表现了矩阵计算的软件中的技术发展。
MATLAB已经与许多用户输入一同发展了多年。
在大学环境中,它是很多数学类、工程和科学类的初等和高等课程的标准指导工具。
在工业上,MATLAB是高产研究、开发和分析所选择的工具。
MATLAB以一系列称为工具箱的应用指定解答为特征。
对多数用户十分重要的是,工具箱使你能学习和应用专门的技术。
工具箱是是MATLAB函数(M-文件)的全面的综合,这些文件把MATLAB的环境扩展到解决特殊类型问题上。
具有可用工具箱的领域有:
信号处理,控制系统神经网络,模糊逻辑,小波分析,模拟等等。
设计目的
综合运用本课程的理论知识进行频谱分析以及滤波器设计,通过理论推导得出相应结论,并利用MATLAB作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。
设计内容
1.熟悉并掌握MATLAB中有关声音(wave)录制、播放、存储和读取的函数。
2.在MATLAB环境中,使用声音相关函数录制3秒左右自己的声音,抽样率是8000Hz/s。
(考虑如何解决一个实际问题:
录制刚开始时,常会出现实际发出声音落后录制动作半拍的现象,如何排除对这些无效点的采样?
)
3.分别取8000个和16000个数据进行频谱分析,得到幅度和相位谱,比较二者异同并分析原因。
4.针对电话信道(最高3500Hz),设计一个FIR或IIR滤波器进行滤波,把抽样率转变为7000Hz/s,并进行频谱分析,得到幅度和相位谱。
5.把处理后的所有数据储存为声音文件,与原始声音进行比较。
设计原理
1.语音信号的采集:
在MATLAB中有关声音的函数有:
声音录制函数wavrecord(),文件保存wavwrite(),文件读取wavread(),语音回放sound(),语音播放wavplay(),录制的文件以.wav作为文件扩展名的文件。
2.设计IIR数字滤波器,其主要步骤有:
(1)把给出的数字滤波器的性能指标{
}由Wk=(2/T)*tan(
),转换为模拟滤波器的频率指标{
}。
(2)根据转后的性能指标,通过滤波器阶数选择函数,来确定滤波器的最小阶数N和固有频率Wn;(3)由最小阶数N得到滤波器原型,用来估计契比雪夫I型滤波器阶数和截止频率Wn的函数:
[N,Wn]=cheb1ord(Wp,Ws,Rp,Rs)。
(4)用直接设计IIR数字滤波器的函数来设计出所需要的滤波器,设计契比雪夫I型数字滤波器的函数:
[num,den]=cheby1(N,Rp,Wn),Wn是标量,则为低通,否则为带通。
3.抽样定理:
连续信号经理想抽样后时域、频域发生的变化(理想抽样信号与连续信号频谱之间的关系)。
4.理想抽样信号能否代表原始信号、如何不失真地还原信号即由离散信号恢复连续信号的条件(抽样定理)。
5.奈奎斯特采样定理:
要使实信号采样后能够不失真还原,采样频率必须大于信号最高频率的两倍。
设计步骤
1.语音信号的采集
在MATLAB环境中,使用声音相关函数录制3秒左右自己的声音,程序如下:
fs=8000;
t=3;
fprintf('按任意键后开始%d秒录音:
',t);%文字提示
pause;%暂停命令
fprintf('录音中...');%文字提示
y=wavrecord(t*fs,fs,'double');%录制语音信号
fprintf('录音结束\n');%文字提示
wavwrite(y,fs,'f:
\黄\xiaoqing.wav');%存储录音信号
fprintf('按任意键后回放:
');pause
wavplay(y,fs);%播放语音信号
wavwrite(y,fs,'f:
\黄\xiaoqing.wav');%存储语音信号
plot(y);%画出原始语音信号的时域图形
title('声音时域图');
xlabel('频率');
ylabel('振幅');
声音的时域图是:
针对实际发出声音落后录制动作半拍的现象,如何拔除对无效点的采样的问题:
因为在刚录制声音时,录入的基本是幅度值很小的信号,先读取声音出来,将原始语音信号时域波形图画出来,根据已得到的信号,可以在第二次读取声音的后面设定采样点,取好有效点,画出滤除无效点后的语音信号时域波形图,对比可以看出。
这样就可以解决这个问题。
y=wavread('f:
\黄\xiaoqing.wav');
subplot(2,1,1);
plot(y);
title('滤除无效点后的语音信号')
2、分别取8000个和16000个数据进行频谱分析,得到幅度和相位谱,比较二者异同并分析原因。
%~~~~~~~~~~~~取8000点频谱分析并画图程序~~~~~~~~~~~~~
N1=8000;%采样的点数
y1=fft(y,N1);%做FFT变换
n1=1:
N1/2;%图形显示区间
f1=[(n1-1)*(2*pi)/N1]/pi%转换横坐标
subplot(2,2,1);%指定图形位置
plot(f1,abs(y1(n1)));%画出原始声音的频谱图
xlabel('频率');
ylabel('振幅');
title('8000点原始语音信号FFT幅度谱');
subplot(2,2,2);%指定图形位置
plot(f1,angle(y1(n1)));%画出原始声音的相位图
xlabel('频率');
ylabel('以弧度为单位的相位');
title('8000点原始语音信号FFT相位谱');
%~~~~~~~~~~~~取16000点频谱分析并画图程序~~~~~~~~~~~~~
N2=16000;%采样的点数
y2=fft(y,N2);%做FFT变换
n2=1:
N2/2;%图形显示区间
f2=[(n2-1)*(2*pi)/N2]/pi%转换横坐标
subplot(2,2,1);%指定图形位置
plot(f2,abs(y2(n2)));%画出取FFT变化后声音的频谱图
xlabel('频率');
ylabel('振幅');
title('16000点原始语音信号FFT幅度谱');
subplot(2,2,2);%指定图形位置
plot(f2,angle(y2(n2)));%画出取FFT变化后声音的相位图
xlabel('频率');
ylabel('以弧度为单位的相位');
title('16000点原始语音信号FFT相位谱');
得出结论:
通过对取8000个和16000个数据进行FFT变换后的频域图和相位图比较发现,取16000个数据进行FFT变换后的频域图和相位图更平滑和密集,并且振幅更大。
因为取16000个数据时抽样的点数增加,抽样间隔减小,所以比取8000个数据时更密集,同时也更平滑。
3、针对电话信道(最高3500Hz),设计一个FIR或IIR滤波器进行滤波,把抽样率转变为7000Hz/s,并进行频谱分析,得到幅度和相位谱。
%在这取契比雪夫Ⅰ型低通滤波器。
Wp=2*1000/7000;%归一化通带截止频率
Ws=2*1200/7000;%为归一化阻带截止频率
Rp=1;%分贝的通带波纹系数
Rs=100;%最小阻带衰减
[N,Wn]=cheb1ord(Wp,Ws,Rp,Rs);%用cheb1ord函数求契比雪夫Ⅰ型滤波器阶次和通带频率
[num,den]=cheby1(N,Rp,Wn);%用cheby1函数求契比雪夫Ⅰ型低通滤波器分子分母系数
disp('①分子系数是:
');disp(num);
disp('②分母系数是:
');disp(den);%显示分子分母系数
[h,w]=freqz(num,den);%DFT变换
subplot(2,1,1);
plot(w/pi,abs(h));
xlabel('\omega/\pi');
ylabel('振幅(幅值)');
grid;%画图幅度频率图做网格
title('契比雪夫Ⅰ型低通滤波器的幅频响应');%显示横纵坐标及标题
subplot(2,1,2);
plot(w/pi,20*log10(abs(h)));%画图画分贝图
grid;
axis([0,1,-20,10])%做网格,定义范围
xlabel('\omega/\pi');%横坐标为\omega/\pi
ylabel('振幅(分贝)');%纵坐标为振幅(分贝)
title('契比雪夫Ⅰ型低通滤波器的幅频响应');%标题为契比雪夫Ⅰ型低通滤波器的幅频响应
4.把处理后的所有数据储存为声音文件,与原始声音进行比较
把我们上面录制的语音放到滤波器里进行滤波,具体程序如下:
[y,fs,bits]=wavread('f:
\黄\xiaoqing.wav');%对语音信号进行采样
sound('f:
\黄\xiaoqing.wav');
N=length(y);
t=(1:
N)/fs;
df=fs/N;%采样间隔
n1=1:
N/2;f=(n1-1)*df;%频带宽度
subplot(2,2,1);plot(t,y)
title('滤波前语音信号波形');
xlabel('频率/Hz');
ylabel('幅值');
f=(n1-1)*df;%频带宽度
z=fft(y);
subplot(2,2,3);
plot(20*log10(abs(z)));
title('滤波前语音信号的频谱');
xlabel('频率/Hz');
ylabel('幅值');
x=filter(num,den,y);
subplot(2,2,2);
plot(t,x)
title('滤波后语音信号波形');
xlabel('频率/Hz');
ylabel('幅值');
z=fft(x);
subplot(2,2,4);
plot(20*log10(abs(z)));
title('滤波后语音信号的频谱')
xlabel('频率/Hz');ylabel('幅值');
wavwrite(x,fs,'f:
\黄\xiaoqing');%把滤波后的信号写入f:
\黄\xiaoqing
总结与分析
通过本次的课程设计,我学会了MATLAB的使用,掌握了MATLAB的程序设计方法。
掌握了在用MATLAB编程序来对语音信号采集的方法。
掌握数字信号处理的基本概念、基本理论和基本方法。
掌握了MATLAB设计FIR和IIR数字滤波器的方法。
学了会用MATLAB对信号进行分析和处理。
通过综合运用数字信号处理的理论知识进行频谱分析和滤波器设计,通过理论推导得出相应结论,再利用MATLAB作为编程工具进行计算机实现,从而加深了对所学知识的理解,建立概念。
对以前在课本上所学的东西有了更深入的理解和掌握。
同时在设计过程中遇到许多问题都是在平时的过程中所未接触到的,尤其是在使用MATLAB的相关程序对语音信号的录制和处理的函数都需要我们自己去查找资料,这加强了我们的动手能力和自觉性。
在自己设计的过程中加上和其他同学的讨论形成了很好的学习氛围,特别是体会到遇到不理解的问题就应该大胆积极地和同学讨论,敢于虚心请教!
参考文献
【1】《数字信号处理教程》程佩青编著清华大学出版社出版
【2】《数字信号处理实验》刘舒帆编著西安电子科技大学出版
【3】《数字信号处理实验指导书》孙洪编著电子工业出版社
如有侵权请联系告知删除,感谢你们的配合!