语音信号处理系统设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信号与线性系统课程设计
报告
语音信号处理系统设计
班级:通信102班
姓名:
学号:
成绩:
指导教师:王霞
日期:2012年12月
目录
摘要 (1)
关键词 (1)
1 课程设计的目的意义 (1)
1.1课程设计的目的 (1)
1.2课程设计的意义 (1)
2 设计任务及技术指标 (1)
3 设计方案论证 (2)
4 具体设计内容 (3)
4.1语音信号分析设计 (3)
4.2图形用户界面设计 (7)
5 实验结果与分析 (15)
6 总结 (16)
参考文献 (16)
语音信号处理系统设计
摘要:语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科。

语音信号处理的目的是得到某些参数以便高效传输或存储,或者是用于某种应用,如人工合成出语音、辨识出讲话者、识别出讲话内容、进行语音增强等。

本次设计主要进行了语音信号的采集与分析。

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

利用MATLAB来读入(采集)语音信号,该信号看作一个普通的信号,对其进行FFT变换实现频谱分析,再依据实际情况对它进行滤波。

然后我们还可以通过sound命令来对语音信号进行回放,以便在听觉上来感受声音的变化。

关键词:语音信号,频域,时域,滤波器,MATLAB,LABVIEW
1课程设计的目的、意义
1.1课程设计的目的
(1)掌握Matlab软件的特点和使用方法。

(2)掌握利用Matlab分析信号和系统的时域、频域特性的方法;
(3)掌握数字滤波器的设计方法及应用。

(4)了解语音信号的特性及分析方法。

(5)了解LabVIEW虚拟仪器的特点,了解采用LabVIEW进行仿真的方法。

(6)通过本课题的设计,培养学生运用所学知识分析和解决实际问题的能力。

1.2 课程设计的意义
通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息的形式。

语言是人类持有的功能.声音是人类常用的工具,是相互传递信息的最主要的手段。

因此,语音信号是人们构成思想疏通和感情交流的最主要的途径。

并且,由于语言和语音与人的智力活动密切相关,与社会文化和进步紧密相连,所以它具有最大的信息容量和最高的智能水平。

现在,人类已开始进入了信息化时代,用现代手段研究语音信号,使人们能更加有效地产生、传输、存储、获取和应用语音信息,这对于促进社会的发展具有十分重要的意义。

2 设计任务
利用Matlab设计一个简单的数字语音信号分析系统,利用GUI设计友好的图形用户界面,实现数字语音信号读取,时域波形显示,频谱分析,设计数字滤波器滤除噪声,对语音信号的参数进行计算分析等功能。

具体任务是:
(1)对原始数字语音信号进行读取。

(2)对原始数字语音信号加入干扰噪声,画出原始信号及带噪信号的时域波形,利用FFT进行频域分析,画出相应波形。

(3)针对数字语音信号频谱及噪声频率,设计合适的数字滤波器滤除噪声。

(4)对噪声滤除前后的语音进行时频域分析。

(5)对语音信号部分时域参数进行计算。

(6)设计图形用户界面(包含以上功能)。

(选作)采用LabVIEW进行仿真设计,实现系统的功能,要求给出系统的前面板和框图,并记录仿真结果。

3 设计方案论证(手写)
本课题是对语音信号进行处理,要经过语音信号的采集,频谱分析,加干扰噪声,滤波器设计,进行滤波和图形用户界面设计等几个步骤。

所需要用到的理论依据有:
⑴采样定理
在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中,最高频率fmax的2倍时,即:fs.max>=2fmax,则采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍;采样定理又称奈奎斯特定理。

⑵采样频率
采样频率(也称为采样速度或者采样率)定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。

采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔。

采样频率只能用于周期性采样的采样器,对于非周期性采样的采样器没有规则限制。

采样频率与声音频率之间有一定的关系,根据奎斯特理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原成为原来的声音。

这就是说采样频率是衡量声卡采集、记录和还原声音文件的质量标准。

⑶语音的录入与打开
在MATLAB中,[y,fs,bits]=wavread('Blip',[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。

[N1 N2]表示读取从N1点到N2点的值(若只有一个N的点则表示读取前N点的采样值)[10]。

sound(x,fs,bits); 用于对声音的回放。

向量x则就代表了一个信号(也即一个复杂的“函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。

⑷时域信号的FFT分析
FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。

函数FFT 用于序列快速傅立叶变换,其调用格式为y=fft(x),其中,x是序列,y是序列的FFT,函数FFT的另一种调用格式为y=fft(x,N),式中,x,y意义同前,N为正整数。

函数执行N点的FFT,若x为向量且长度小于N,则函数将x补零至长度N;若向量x的长度大于N,则函数
截短x使之长度为N。

⑸语音信号的频域分析
语音信号的频域分析就是分析语音信号的频域持征。

从广义上讲,语音信号的频域分析包括语音信号的频谱、功率谱、倒频谱、频谱包络分析等,而常用的频域分析方法有带通滤波器组法、傅里叶变换法、线件预测法等几种。

本次选用的是语音信号的傅里叶分析法,即对信号进行FFT变换。

⑹数字滤波器的设计步骤
不论是IIR滤波器还是FIR滤波器的设计都包括三个步骤:
①按照实际任务的要求,确定滤波器的性能指标。

②用一个因果、稳定的离散线性时不变系统的系统函数去逼近这一性能指标。

根据不同的要求可以用IIR系统函数,也可以用FIR系统函数去逼近。

③利用有限精度算法实现系统函数,包括结构选择、字长选择等。

⑺图形用户界面基本概念
图形用户界面(Graphical User Interface,GUI)是由窗口、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。

用户通过一定的方法(如鼠标、键盘)选择激活这些图形对象,实现计算、绘图等。

创建图形用户界面须具有三类基本元素:
(1)组件:图形化控件(如按钮、编辑框、列表框等)、静态元素(如文本字符串)、菜单和坐标系。

(2)图形窗口:GUI的每一个组件都须安排在图形窗口中。

(3)回应:如用户用鼠标单击或用键盘输入信息后,程序要有相应的动作。

4 设计内容
4.1 语音信号分析设计
(1)根据设计要求分析系统功能,掌握设计中所需理论阐明设计原理(抽样频率、量化位数的概念,抽样定理;信号的FFT分析;数字滤波器设计原理和方法,各种不同类型滤波器的性能比较)。

(2)对语音信号做FFT,进行频谱分析,画出信号的时域波形图和频谱图。

Matlab程序:
[x,fs] = wavread('mei5.wav');
subplot(2,1,1)
plot(x)
title('原语音信号时域波形')
xlabel('k')
ylabel('x')
N=length(x);
k=0:N-1;
X=fft(x);
subplot(2,1,2)
plot(k,abs(X))
title('原语音信号频域波形')
xlabel('k')
ylabel('X')
原信号的图形:
(3)对语音信号加入干扰噪声,对语音信号进行回放(利用sound函数),感觉加噪前后声音的变化。

对其做FFT,进行频谱分析,比较加噪前后语音信号的波形及频谱,对所得结果进行分析。

加入干扰噪声的matlab程序:
Y=fft(y);
plot(abs(Y))
y=0.007*cos(2.7475*k);
subplot(2,1,1)
plot(y)
axis([-20 50 -0.15 0.15])
title('干扰信号时域波形')
ylabel('y=0.1cos(207475k)')
Y=fft(y);
subplot(2,1,2)
plot(abs(Y))
axis([0 16000 0 25])
title('干扰信号频域波形')
加入的干扰噪声:
对原信号加入干扰噪声的matlab程序:x1 = wavread('mei5.wav')';
x2=x1+y;
subplot(2,1,1)
plot(x2)
title('加入噪声信号时域波形')
X2=fft(x2);
subplot(2,1,2)
plot(abs(X2))
title('加入噪声信号频域波形')
加入干扰噪声后的图形:
(4)根据带噪语音信号的特点,设计合适的数字滤波器,绘制所设计滤波器的幅频和相频特性。

Matlab程序:
wp=0.2*pi;ws=0.4*pi;Rp=1;As=15;T=1;
OmegaP=wp/T;OmegaS=ws/T;
[cs,ds]=afd_butt(OmegaP,OmegaS,Rp,As);
[b,a]=imp_invr(cs,ds,T)
[db,mag,pha,w]=freqz_m(b,a);
subplot(2,1,1);plot(w/pi,mag);
title('幅度特性')
axis([0,1,0,1.1])
subplot(2,1,2);plot(w/pi,db);
title('衰减特性')
axis([0,1,-40,5]);
所设计滤波器的特性:
(5)用所设计的滤波器对带噪语音信号进行滤波。

对滤波后的语音信号进行FFT频谱分析。

记录处理过程中所得各种波形及频谱图。

Matlab程序:
h=filter(b,a,x2);
fs=16000;
sound(h,fs)
w=2*pi*k/N;
subplot(2,1,1)
plot(w/pi,h)
title('滤波后语音信号时域波形')
subplot(2,1,2)
H=fft(h);
plot(w/pi,abs(H))
title('滤波后频域信号波形')
滤波后的语音信号图形:
(6)对语音信号进行回放,感觉滤波前后声音的变化。

比较滤波前后语音信号的波形及频谱,对所得结果和滤波器性能进行频谱分析。

4.2 图形用户界面设计
4.2.1 GUI部分matlab函数m文件程序
function varargout = untitled1(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @untitled1_OpeningFcn, ...
'gui_OutputFcn', @untitled1_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function untitled1_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = untitled1_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;
按钮的回调函数:
function pushbutton1_Callback(hObject, eventdata, handles)
global I; •••
H={'*.wav'}; ••••••••••••
[filename,pathname]=uigetfile(H,'请选择打开信号•');
file=strcat(pathname,filename); ••••••••••
I=wavread(file); ••••••••
plot(I);title('原信号时域波形'); ••
按钮的回调函数:
function pushbutton2_Callback(hObject, eventdata, handles)
global I;
fs=16000;
sound (I,fs);
按钮的回调函数:
function pushbutton3_Callback(hObject, eventdata, handles)
global I; global X;
X=fft(I);
N=length(I);
k=0:N-1;
plot(k,abs(X));title('原信号频域波形')
function pushbutton4_Callback(hObject, eventdata, handles)
按钮的回调函数:
function pushbutton5_Callback(hObject, eventdata, handles)
global I; global t;
global d; global s;
N=length(I);
t=0:N-1;
au=0.007; d=[au*cos(2.7475*t)]';
s=I+d;
plot(s);title('加噪声后时域波形');
按钮的回调函数:
function pushbutton6_Callback(hObject, eventdata, handles)
global I; global t;
global d; global s;
global S;
N=length(I);
t=0:N-1;
au=0.007; d=[au*cos(2.7475*t)]';
s=I+d; S=fft(s);
plot(abs(S));title('加噪声后频域波形');
文本框的回调函数:
function edit1_Callback(hObject, eventdata, handles)
global wp;
get(hObject,'string');
wp=str2double(get(hObject,'string'));
function edit1_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end
文本框的回调函数:
function edit2_Callback(hObject, eventdata, handles)
global ws;
get(hObject,'string');
ws=str2double(get(hObject,'string'));
function edit2_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end
文本框的回调函数:
function edit3_Callback(hObject, eventdata, handles)
global Rp;
get(hObject,'string');
Rp=str2double(get(hObject,'string'));
function edit3_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end
文本框的回调函数:
function edit4_Callback(hObject, eventdata, handles)
global As;
get(hObject,'string');
As=str2double(get(hObject,'string'));
function edit4_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end
按钮的回调函数:
function pushbutton7_Callback(hObject, eventdata, handles)
global wp; global ws; global Rp; global As;
T=1;
OmegaP=wp/T;OmegaS=ws/T;
[cs,ds]=afd_butt(OmegaP,OmegaS,Rp,As);
[b,a]=imp_invr(cs,ds,T);
[db,mag,~,w]=freqz_m(b,a);
figure(1);
subplot(2,1,1);plot(w/pi,mag);
title('幅度特性')
axis([0,1,0,1.1])
subplot(2,1,2);plot(w/pi,db);
title('衰减特性 •')
axis([0,1,-40,5]);
按钮的回调函数:
function pushbutton8_Callback(hObject, eventdata, handles)
global s;global I;global wp; global ws;global Rp;global As;global h;
T=1;
OmegaP=wp/T;OmegaS=ws/T;
[cs,ds]=afd_butt(OmegaP,OmegaS,Rp,As);
[b,a]=imp_invr(cs,ds,T)
[db,mag,pha,w]=freqz_m(b,a);
h=filter(b,a,s);
N=length(I);
k=0:N-1;
w=2*pi*k/N;
figure(2);
subplot(2,1,1)
plot(w/pi,h)
title('滤波后时域波形')
subplot(2,1,2)
H=fft(h);
plot(w/pi,abs(H))
title('滤波后频域波形')
按钮的回调函数:
global I;
len=300;inc=300;
f=enframe(I,len,inc);
N=size(f);%size(A)返回A各个维的最大元素个数
Mn=zeros(1,N);%一行N列个0
for n=1:N
xn=f(n,:);
xn=abs(xn);
mn=sum(xn);
Mn(1,n)=mn;
yn=xn.^2;
mn1=sum(yn);
Mn1(1,n)=mn1;
end
figure
subplot(4,1,1),plot(Mn),title('短时平均幅度');%短时平均幅度
subplot(4,1,2),plot(Mn1),title('短时能量');%短时能量
Zn=zeros(1,N);
for n=1:N
xn=f(n,:);
zn=zeros(1,len-1);
for m=1:len-1
zn_m=sign(xn(m+1))-sign(xn(m));
zn_m=(1/2)*abs(zn_m);
zn(1,m)=zn_m;
end
Zn(1,n)=sum(zn);
end
subplot(4,1,3),plot(Zn),title('短时过零率');%短时平均过零率
zs=7;
Rn=zeros(1,len-1);
xn=f(zs,:);
for k=1:len-1
xn1=[f(k+1:len),zeros(1,k)];
xn2=xn.*xn1;
Rn(k)=sum(xn2);
end
subplot(4,1,4),plot(Rn),title('短时自相关函数');%短时自相关函数
按钮的回调函数:
function pushbutton10_Callback(hObject, eventdata, handles)
global s;
sound(s,16000);
按钮的回调函数:
function pushbutton11_Callback(hObject, eventdata, handles)
global h;
sound(h,16000);
4.2.2 调试及运行
最终设计完成的GUI界面如下图:
(1)点击按钮打开语音信号,坐标系中出现如图所示语音信号的时域波形:
(3)点击按钮,坐标系中会显示打开语音信号的频域波形如下图:
(4)点击按钮,坐标系中会显示加入干扰噪声后的信号的时域波形如下图:
(5)点击按钮,坐标系中会显示加噪信号的频谱如下图:
(7)点击按钮,显示相关参数计算。

(8) 输入所需滤波器参数
点击按钮
,绘出滤波器的幅度和衰减特性的波形如下图:
(9)点击按钮,对加噪信号进行滤波,绘出滤波后的时域频域波形如下
图:
(10)点击按钮,系统播放滤波后的语音信号。

5 实验结果与分析(手写)
6 课程总结(手写)
参考文献:[1]高西全.数字信号处理(第三版).西安电子科技大学出版社,2008.8
[2]吴大正. 信号与线性系统分析(第四版). 高等教育出版社,2005.8
[3]陈垚光. 精通MATLAB GUI设计(第二版)电子工业出版社, 2011.1
[4]陈后金. 信号分析与处理实验. 高等教育出版社,2006.8
[5] 赵力. 语音信号处理. 机械工业出版社,2009.7
[6] 彭勇. LabVIEW虚拟仪器设计及分析.清华大学出版社,2011.9
语音信号处理系统。

相关文档
最新文档