语音信号采集与处理

更新时间:2024-04-30 15:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

※ ※※※※※※※※

《通信系统原理》

课程设计报告书

课题名称 姓 名

数字信号处理

学 号 院、系、部 专 业 指导教师

信息工程系 自动化

2013年 01月18 日

课题:

语音信号采集与处理

一、实践的目的和要求 课程设计基本要求

①学会MATLAB的使用,掌握MATLAB的程序设计方法; ②掌握在Windows环境下语音信号采集的方法; ③掌握数字信号处理的基本概念、基本理论和基本方法; ④掌握MATLAB设计FIR和IIR数字滤波器的方法; ⑤学会用MATLAB对信号进行分析和处理。 课程设计实现

(1)语音信号的采集

利用windows下的录音机或其他软件,录制一段自己的话音,时间控制在1秒左右。然后在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中。

二、实践原理: 1、采样定理:

在进行模拟与数字信号的转换过程中,当采样大于最高频率的2倍

时,则采样之后的数字信号完整的保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍。 2、采样频率:

采样频率是指计算机每秒钟采样多少个声音样本,是描述声音文件

的音质、音频、衡量声卡、声音文件的质量标准。采样频率越高,即采样的时间间隔越短,则在单位时间内计算机得到的声音样本数据越多,对声音波形的表示也越准确。

3、采样位数与采样频率:

采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。采样位数和采样率对于音频接口来说是最为重要的两个指标。无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度范围。采样位数越多则捕捉到的信号越精确。 4、利用MATLAB对语音信号进行分析和处理:

采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。

5、语音信号的滤波示意图:

噪声 Matlab 语音信号 + 滤波器 频谱显示 扬声器

三.实践步骤

1、语音信号的采集与分析

(1)利用 PC机上的声卡和 WINDOWS操作系统可以进行数字信号的采集。将话筒插入计算机的语音输入插口上,启动录音机。按下录音按钮,对话筒说话“我

想回家”,说完后停止录音,屏幕左侧将显示所录声音的长度。

(2)以文件名 “2” 保存入C盘中。可以看到 ,文件存储器的后缀默认为.wav。要保存文件时,利用了计算机上的A/D转换器,把模拟的声音信号变成了离散的量化了的数字信号,放音时,它又通过D/A转换器,把保存的数字数据恢复为原来的模拟的声音信号。

(3)在 Matlab软件平台下可以利用函数wavread对语音信号进行采样,得到了声音数据变量x1,x1=wavread('C:\\22.wav');同时把x1的采样频率fs=22050Hz和数据位Nbits=16Bit放进了MATALB的工作空间。图figure 1为原始语音信号的时域图形。

(4)从图中可以看出在时域环境下,信号呈现出4个不规则的信号峰值。通过freqz(x1)函数绘制原始语音信号的频率响应图figure 2 。

(5)然后对语音信号进行频谱分析,在Matlab中可以利用函数y1=fft(x1,1024); plot(abs(y1(1:512)))对信号行快速傅里叶变换,得到信号的频谱图figure 3,从图中可以看出对各个频点上的随机信号在频域进行抽样 ,抽样频率为 22050Hz。

2、利用余弦函数构造一个高频噪声

1. 在Matlab中人为设计一固定频率5000Hz的噪声干扰信号。噪声信号通常为随机序列,在本设计中用余弦序列代替。干扰信号构建命令函数为d=[Au*cos(2*pi*5000*t)]';x1=wavread('C:\\22.wav');x2=x1+d;

2. 给出的干扰信号为一个余弦信号,针对上面的语音信号,采集了其中一段。再

对噪音信号进行频谱变换得到其频谱图, y2=fft(x2,1024);从图中可以看出干扰信号,在4000Hz和 6000Hz频点处有一高峰 ,其中 5000Hz 正是本设计所要利用的。

若带噪信号y(m)是纯净语音信号s(m)和平稳加性高斯白噪声n(m)构成的,即:y(m) =x(m) +n(m);则在频域中表示为Y(ω)=X(ω)+N(ω);其中Y(ω),X(ω),N(ω)分别是y(m),x(m),n(m)的傅里叶变换。X(ω)=Y(ω)-N(ω);只要从带噪信号中减去噪声信号即可估计出语音信号,再进行傅里叶反变换就可得到增强的语音。

3、设计合适的滤波器,滤除高频噪声

由模拟滤波器变换为数字滤波器时,采用的是双线性变换法,它保留的是从模拟到数字域的系统函数表示。用双线性变换法设计低通滤波器。在MATLAB 中,可以利用函数 butterworth设计低通滤波器。

数字巴特沃兹低通滤波器函数:

function[b,a]=digital_lowpass_butter(wp,ws,Rp,As,Fs) [N,wn]=buttord(wp/pi,ws/pi,Rp,As) [b,a]=butter(N,wn); 时域低通滤波:

x=wavread(‘2.wav’);x为读取原语音文件的数据,一维数组 h=ones(1,220); h为低通滤波器的单位冲激响应 y=conv(x,h); 时域卷积,低通滤波

wavwrite(y,22050,‘su2.wav’);将滤波后的数据保存为.wav文件 用 MATLAB 中的函数freqz 画出各滤波器的频率响应。用设计好的带阻滤波器对含噪语音信号进行滤波,在Matlab中IIR滤波器利用函数filter对信号进行滤波。在一个窗口同时画出滤波前后的波形及频谱。从图中可以看出,5000Hz看到的高峰消失了,语音信号与开始的一样,滤波器成功的滤除了干扰信号。 利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。 四、程序设计及仿真图

1、用Matlab对原始语音信号进行分析,画出它的时域波形和频谱

程序: fs=22050;

[ x,fs,Nbits] =wavread('C:\\ 2.wav') ; [ x,fs,Nbits] =wavread('C:\\ 2.wav') ; t=0:1/22050:(length(x)-1)/22050;

sound(x,fs) ; %对加载的语音信号进行回放 figure(1)

plot(x) %做原始语音信号的时域图形 title('原始语音信号'); xlabel('time n'); ylabel('fuzhi n'); figure(2)

freqz(x) %绘制原始语音信号的频率响应图 title('频率响应图')

n=length(x); %求出语音信号的长度 y1=fft(x,n) ; %傅里叶变换 y2=fftshift(y1); %对频谱图进行平移 f=0:fs/n:fs*(n-1)/n; %得出频点 figure(3) subplot(2,1,1);

plot(abs(y2)) %做原始语音信号的FFT频谱图 title('原始语音信号FFT频谱') subplot(2,1,2);

plot(f,abs(y2)); %绘制原始语音信号的频谱图 title('原始语音信号频谱') 时域波形和频谱:

2. 给原始的语音信号加上一个高频余弦噪声,频率为(2Khz)。对加噪后的语音进行分析,并画出其信号时域和频谱图。 程序: %加噪声

k=1:1:n; %定义k 值,噪声与原始语音长度一致 c1=10*sin(2*pi*2000*k); %噪声信号的函数 figure(4) plot(k,c1)

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

freqz(c1) %绘制噪声信号的频率响应图 title('噪声信号频率响应图')

s=length(c1); %噪声信号的长度

xc=fft(c1,s); %对噪声信号进行频谱变换 xcc=fftshift(xc); f=0:fs/s:fs*(s-1)/s;

figure(6) %绘制噪声语音的FFT频谱图 plot(f,abs(xcc))

title('噪声信号的频谱图'); %噪音与原始信号叠加 z=x'+c1;

y3=fft(z,s); %对叠加信号进行频谱变换 y4=fftshift(y3); %对频谱图平移 f=0:fs/s:fs*(s-1)/s; %得出频点 figure(7)

plot(f,abs(y4)); %绘出加噪语音频谱图 axis([0 8000 0 400]); title('含噪语音信号的频谱'); figure(8) subplot(2,1,1);

plot(f,abs(y2)) %做原始语音信号的FFT频谱图 title('原始语音信号FFT频谱') subplot(2,1,2);

plot(f,abs(y4)) %做加噪语音信号的FFT频谱图 title('加噪语音信号频谱') 时域波形和频谱:

与原始信号对比,区别:

3. 设计合适的滤波器,滤除高频噪声,绘出滤波后的信号频域和时域波形: 程序:

%用双线性变换法设计巴特沃思低通滤波器 wp=0.25*pi; %通带截止频率 ws=0.3*pi; %阻带截止频率

Rp=1; %通带最大衰减 Rs=15; %阻带最小衰减 Fs=22050; 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); %绘制频率响应曲线 figure(9)

plot(W*Fs/(2*pi),abs(H)) grid

xlabel('频率/Hz') ylabel('频率响应幅度') title('Butterworth') f1=filter(bz,az,z); figure(10) subplot(2,1,1)

plot(t,z) %画出滤波前的时域图 title('滤波前的时域波形'); subplot(2,1,2)

plot(t,f1); %画出滤波后的时域图 title('滤波后的时域波形');

sound(f1,22050); %播放滤波后的信号 p=length(f1); F0=fft(f1,p);

f=0:fs/p:fs*(s-1)/p; figure(11) y2=fft(z,1024); subplot(2,1,1);

plot(f,abs(y4)); %画出滤波前的频谱图 title('滤波前的频谱') xlabel('Hz'); ylabel('fuzhi'); subplot(2,1,2)

F1=plot(f,abs(F0)); %画出滤波后的频谱图 title('滤波后的频谱') xlabel('Hz'); ylabel('fuzhi');

x=wavread('C:\\2.wav');% x为读取原语音文件的数据,一维数组 h=ones(1,220); % h为低通滤波器的单位冲激响应 y=conv(x,h); %时域卷积,低通滤波

wavwrite(y,22050,'C:\\su2.wav');% 将滤波后的数据保存为.wav文件 时域波形和频谱:

与原噪音信号对比,区别:

滤波后信号的幅值都偏小于原信号的幅值。 五、 心得体会:

通过这一个星期的课程设计,我学到了很多的东西,不仅巩固了我以前所学过的知识, 还让我学到很多在书本上所没有学到过的知识。

同时进一步加深了对语音信号的了解和熟练了对Matlab的使用, 让我对通信原理这门课程有了更加浓厚的兴趣。 因为以前都是基于课本上所学的理论知识,然而通过这次课程设计之后才能真正理解其意义。

在这次课程设计的过程中,我遇到不少的问题,比如刚开始,要录音的时候,没有选择正确的频率,导致在运行程序的时候,无法调用声音,经过后来的改正才可以。还有刚开始由于对滤波器的滤波原理并不是很了解, 于是我又翻出学过的数字信号处理课本,认真研究起各种滤波器,这才使我明白了大多数滤波器是如何工作,不再单单只是懂理论,理论与实际相结合是很重要的, 只有理论知识是远远不够的, 只有把所学的理论知识与实践相结合起来,从理论中得出结论。总的来说,通过这次的课程设计我对语音信号有了全面的认识,对Matlab的知识又有了深刻的理解, 让我感受到只有在充分理解课本 知识的前提下,才能更好的应用这个工具。

这次课程设计使我了解了MATLAB的使用方法,学会分析滤波器的优劣和性能,提高了分析和动手实践能力,同时我相信,进一步加强对 MATLAB 的学习与研究对我今后的学习将会起到很大的帮助! 六、参考文献:

1. 王济 MATLAB在振动信号处理中的应用 中国水利水电出版社

2. 张志涌 精通MATLAB6,5版[M] 北京航空航天大学出版社 3. 徐靖涛 基于MATLAB的语音信号分析与处理 重庆科技学院学报 4.张文 基于MATLAB语音信号的滤波域实现 山西电子工业出版社 5. 张桂香 高爱国 语音信号采集与处理方法的研究 高师理科学刊

6.高西全 丁玉美 数字信号处理 第三版 西安电子科技大学出版社

本文来源:https://www.bwwdw.com/article/u7ng.html

Top