语音信号处理与滤波.docx

上传人:b****6 文档编号:7442302 上传时间:2023-01-24 格式:DOCX 页数:12 大小:130.89KB
下载 相关 举报
语音信号处理与滤波.docx_第1页
第1页 / 共12页
语音信号处理与滤波.docx_第2页
第2页 / 共12页
语音信号处理与滤波.docx_第3页
第3页 / 共12页
语音信号处理与滤波.docx_第4页
第4页 / 共12页
语音信号处理与滤波.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

语音信号处理与滤波.docx

《语音信号处理与滤波.docx》由会员分享,可在线阅读,更多相关《语音信号处理与滤波.docx(12页珍藏版)》请在冰豆网上搜索。

语音信号处理与滤波.docx

语音信号处理与滤波

目录

一、课程设计目的…………………………………………………………………2

二、课程设计要求…………………………………………………………………2

三、详细设计过程…………………………………………………………………3

四、调试分析………………………………………………………………………9

五、分析结果………………………………………………………………………9

六、心得体会………………………………………………………………………10

七、参考文献………………………………………………………………………10

八、程序……………………………………………………………………………11

九、附录……………………………………………………………………………12

 

一、课程设计目的

综合运用数字信号处理的理论知识进行频谱分析和滤波器设计,通过理论推导得出相应结论,再利用MATLAB作为编程工具进行计算机实现,从而加深对所学知识的理解。

采用Matlab进行数字信号处理课程设计,实践证明,使我们加深了对课堂抽象概念的理解,巩固了课堂上所学的理论知识,并能很好地理解与掌握数字信号处理中的基本概念、基本原理、基本分析方法。

在课程设计中,让我们录制自己的声音,设计滤波器对声音进行处理,大大激发了我们的学习兴趣,使我们很快地掌握编程方法和解决实际问题的技巧

Matlab是MathWorks公司于1982年推出的一套高性能的数值计算和可视化数学软件,被誉为“巨人肩上的工具”。

Matlab的含义是矩阵实验室(MATRIXLABORATORY)。

经过十几年的完善和扩充,它已发展成为线性代数课程的标准工具。

它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境。

在这个环境下,对所要求解的问题,用户只需要简单地列出数学表达式,其结果便以数值或图形方式显示出来。

Matlab的首创者是在数值线性代数领域颇有影响的CleveMoler博士,他也是生产经营MATLAB产品的美国Mathworks公司的创始人之一。

MATLAB是一种科学计算软件,专门以矩阵的形式处理数据。

MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而使其广泛地应用于科学计算、控制系统、信息处理、数字图形处理等领域的分仿真和设计工作中,而且利用MATLAB产品的开发式结构,用户可以非常容易地对MATLAB进行扩充。

二、课程设计基本要求

(1)熟悉离散信号和系统的时域特性。

(2)掌握序列快速傅里叶变换FFT方法。

(3)学会MATLAB的使用,掌握MATLAB的程序设计方法。

(4)利用MATLAB对语音信号进行频谱分析。

(5)掌握MATLAB设计FIR和IIR数字滤波器的方法。

三、详细设计过程

1、问题描述:

录制一段自己的语音信号,取不同的数据点对语音信号进行频谱分析;对所有数据进行插值和抽取处理,改变抽样率再对信号进行频谱分析;设计FIR和IIR数字滤波器,并对被抽样后的语音信号进行滤波,分析滤波后信号的时域和频域特征,回放语音信号。

2、详细操作步骤和部分运行结果

(1)采集语音信号:

利用Windows下的录音机,录制一段自己的话音,时间控制在1s左右;然后在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。

通过使用wavread函数,理解采样频率、采样位数等概念。

wavread函数调用格式如下:

y=wavread(file),读取file所规定的wav文件,返回采样值放在向量y中。

[y,fs,nbits]=wavread(file),采样值放在向量y中,fs表示采样频率(Hz),nbits表示采样位数。

y=wavread(file,N),读取前N点的采样值放在向量y中。

y=wavread(file,[N1,N2]),读取从N1点到N2点的采样值放在向量y中。

采集语音的程序代码:

[x1,fs,nbits]=wavread(‘e:

\yy.wav’);

sound(x1,fs,bits);

y=fft(x1,1024);

subplot(2,1,1);plot(x1);title(‘原始采样后时域信号’);

原始语音采样后的的时域信号波形图:

(2)对语音信号进行频谱分析:

在MATLAB中,利用函数fft对信号进行快速傅里叶变换,得到信号的频谱特性。

首先画出语音信号的时域波形,然后对语音信号进行频谱分析。

程序代码:

[x1,fs,bits]=wavread(‘D:

\yy.wav’);

y1=fft(x1,1024);

f=fs*(0:

511)/1024;

figure

(1)

subplot(2,1,1);plot(f,abs(1:

512)));title(’原始语音信号频谱’);

xlabel('频率/Hz');

ylabel('幅值');

subplot(2,1,2);plot(abs(y1(1:

1024)));title(‘原始语音信号FFT频谱’);

xlabel('点数N');

ylabel('幅值');

原始语音信号的频率响应图:

原始语音信号频谱和FFT转换后的频谱图

(3)设计数字滤波器和画出频率响应:

根据语音信号的特点给出有关滤波器的性能指标:

1低通滤波器性能指标:

fp=1000Hz,fc=1200Hz,As=100dB,Ap=1dB;

2高通滤波器性能指标:

fc=4800Hz,fp=5000Hz,As=100dB,Ap=1dB;

3带通滤波器性能指标:

fp1=1200Hz,fp2=3000Hz,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB。

首先用窗函数法(矩形窗(Rectangularwindow)、三角窗(Triangularwindow)、汉宁窗(Hanningwindow)、海明窗(Hammingwindow)、布拉克曼窗(Blackmanwindow)、切比雪夫窗(Chebyshevwindow)、巴特里特窗(Bartlettwindow)及凯塞窗(Kaiserwindow)。

)设计上面要求的三种滤波器。

在MATLAB中,利用函数fir1设计FIR滤波器;然后再用双线性变换法设计上面要求的三种滤波器,利用函数butte、cheby1和ellip设计IIR滤波器;最后,利用MATLAB中的函数freqz画出各种滤波器的频率响应。

(4)低通滤波器的设计过程

用窗函数法设计低通滤波器:

程序代码:

fp=1000;fc=1200;As=100;Ap=1;fs=22050;

wc=2*fc/fs;wp=2*fp/fs;

N=ceil((As-7.95)/(14.36*(wc-wp)/2))+1;

beta=0.1102*(As-8.7);

Win=Kaiser(N+1,beta);

b=fir1(N,wc,Win);

freqz(b,1,512,fs);

运行结果如下图:

用双线性变换法设计的低通滤波器:

程序代码:

fp=1000;fc=1200;As=100;Ap=1;fs=22050;

wc=2*fc/fs;wp=2*fp/fs;

[n,wn]=ellipord(wp,wc,Ap,As);

[b,a]=ellip(n,Ap,As,wn);

freqz(b,a,512,fs);

程序运行结果如下图:

(8)用滤波器对信号进行滤波

比较两种滤波器性能,然后用性能好的滤波器对采集的信号进行滤波。

在MATLAB中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。

(9)比较滤波前后语音信号的波形及频谱,在同一个窗体中画出滤波前后的波形图:

FIR低通滤波器滤波前后的波形图:

(10)回放语音信号

在MATLAB中,函数sound可以对声音进行回放。

其调用格式为

sound(x,fs,bits),可以感觉滤波前后的声音有变化。

四、调试分析

1、用窗函数法设计低通滤波器中,语句N=ceil(As-7.95)/(14.36*(wc-wp)/2))+1;出错,将其改为N=ceil((As-7.95)/(14.36*(wc-wp)/2))+1;即可。

五、结果分析

1、题目要求最大衰减Ap=1dB,fp=1000Hz,由图可看出基本符合,而最小衰减As=100dB,fc=1200Hz,基本符合。

2、滤波前后的频谱分析:

由于所取的采样点数比较大,滤波前后的频谱比较相近,但仔细对比仍然可以看出下图的结果滤掉了高频的成分。

3、题目要求最大衰减Ap=1dB,fp=5000Hz,由图可看出,基本符合,而最小衰减As=100dB,fc=4800Hz,也基本符合。

4、滤波前后的频谱分析:

由图明显可以看出,此滤波器将低频成分滤掉了。

5、题目要求最大衰减Ap=1dB时,fp1=1000Hz,fp2=3200Hz,由图可看出,基本符合,而最小衰减As=100dB时,fc1=1000Hz,fc2=3200Hz,基本符合。

6、滤波前后的频谱分析:

该滤波器将低频成分和高频成分都滤掉了,只剩下通带里的频率。

7、选用凯泽窗设计方法,滤波器的幅度和相位响应满足设计的指标但滤波器长度(N=708)太长,实现起来很困难,主要原因是滤波器的指标太苛刻,因此,一向不用窗函数法设计这种类型的滤波器。

在双线性变换法的设计中选用椭圆函数设计,滤波器的幅度和相位均满足设计的要求。

六、心得体会

通过一学期的数字信号处理的学习,在这次做课程设计的过程中,真的发现自己没学到啥东西,所以导致做的过程中困难重重,拿着课本只好重头看,通过网上查资料,同学之间的相互合作,最终我们还是战胜了困难,顺利完成了此次的课程设计。

我深深的体会到了知识的重要性,不管是为了应付考试还是怎么样也好,对于自身的帮助还是很大的,整整两天坐在电脑面前的功夫没有白费,我还是收获了很多,对于Matlab软件的使用也更加熟悉了。

一年之计在于春,而我们一学期的学习就在于这次课程设计了,我觉得这才是真正学到知识的,也锻炼了自己的动手实践能力,耐心和毅力。

学会团结,才能把事情做得更好。

七、参考文献

[1]丁美玉,高西全数字信号处理2版。

西安:

西安电子科技大学出版社,2001

[2]怀琛数字信号处理教程——MATLAB释疑与实现。

北京:

电子工业出版社,2004

[3]王宏MATLAB6.5及其在信号处理中的应用。

北京:

清华大学出版社,2004

[4]刘顺兰,吴杰数字信号处理。

西安:

西安电子科技大学出版社,2003

 

八、源程序代码:

%读入原始声音

[x,fs,Nbits]=wavread('09020135.wav');

sound(x,fs);

n=length(x);%求出语音信号的长度

y1=fft(x,n);%傅里叶变换

y2=fftshift(abs(y1));%对频谱图进行平移

w=linspace(-fs/2,fs/2,length(y2));

subplot(2,3,1);

plot(x);%做原始语音信号的时域图形

title('原始语音信号');

xlabel('timen');

ylabel('fuzhin');

subplot(2,3,4);

plot(w,y2);%做原始语音信号的FFT频谱图

title('原始语音信号FFT频谱');

%加噪声

noise=0.04*randn(n,2);%随机函数产生噪声

sound(noise,fs);

s=x+noise;%语音信号加入噪声

sound(s,fs);%加噪声的声音

k=1:

1:

n;%定义k值,噪声与原始语音长度一致

wavwrite(s,fs,'2.wav');

S=fft(s);%对叠加信号进行频谱变换

S=fftshift(abs(S));

subplot(2,3,2);

plot(k,s)

title('噪声信号时域图');%绘制噪声信号的时域波形图

subplot(2,3,5);

plot(w,abs(S));

title('噪声信号的频谱图');

%用双线性变换法设计巴特沃思低通滤波器

Ft=6000;

Fp=1000;

Fs=1200;

wp=2*pi*Fp/Ft;;%¨

wp=0.25*pi;%通带截止频率

ws=0.3*pi;%阻带截止频率

Rp=1;%通带最大衰减

Rs=15;%阻带最小衰减

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);%创建butterworth模拟滤波器

[Bap,Aap]=zp2tf(Z,P,K);

[b,a]=lp2lp(Bap,Aap,Wn);

[bz,az]=bilinear(b,a,Fs);%用双线性变换法实现模拟滤波器到数字滤波器的转换

[H,W]=freqz(bz,az);%绘制频率响应曲线

%用双线性变换法设计巴特沃思低通滤波器滤波

f1=filter(bz,az,s);

sound(f1,fs);%滤波后的声音

F0=fft(f1,n);

F1=fftshift(abs(F0));

wavwrite(f1,fs,'3.wav');%将滤波后的数据保存为.wav文件

subplot(2,3,3);

plot(k,f1);%画出滤波后的时域图

title('滤波后的时域波形');

subplot(2,3,6);

plot(w,F1);%画出滤波后的频谱图

title('滤波后的频谱');

xlabel('Hz');

ylabel('fuzhi');

 

九、附录

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1