基于MATLAB的语音信号滤波处理要点
如何在MATLAB中进行语音信号处理

如何在MATLAB中进行语音信号处理一、引言语音信号处理是一门充满挑战的学科,它涉及到声音的产生、捕捉、转换和处理等一系列过程。
在现代科技的支持下,MATLAB作为一种强大的工具,被广泛应用于语音信号处理领域。
本文将介绍如何使用MATLAB进行语音信号处理,包括信号预处理、语音分析和语音合成等方面。
二、信号预处理在进行语音信号处理之前,我们通常需要对信号进行预处理。
信号预处理的目标是将原始信号进行降噪、滤波和归一化等处理,以便后续的分析和处理。
在MATLAB中,我们可以使用一系列函数来实现信号预处理的过程。
首先,我们可以使用MATLAB提供的降噪算法对信号进行降噪处理。
常用的降噪算法有加性白噪声降噪算法、小波降噪算法等。
通过对原始信号进行降噪处理,可以有效提取出语音信号的有效信息。
其次,我们可以使用滤波技术对信号进行滤波处理。
滤波的目的是去除信号中的不必要成分,保留感兴趣的频率成分。
在MATLAB中,我们可以使用卷积和滤波函数来实现滤波过程。
最后,我们还可以对信号进行归一化处理。
归一化可以使信号的幅值范围在一个确定的范围内,方便后续的处理和比较。
在MATLAB中,我们可以使用归一化函数对信号进行归一化处理。
三、语音分析语音信号的分析是语音信号处理的关键步骤,它可以帮助我们了解信号的基本特征和结构。
在MATLAB中,我们可以使用一系列函数来实现语音信号的分析。
首先,我们可以使用MATLAB提供的时域分析函数对语音信号进行时域分析。
时域分析可以帮助我们了解信号的振幅、频率和相位等特征。
通过时域分析,我们可以得到语音信号的波形图、能谱图和自相关函数等。
其次,我们还可以使用频域分析函数对语音信号进行频域分析。
频域分析可以帮助我们了解信号的频率成分和频率分布等特征。
通过频域分析,我们可以得到语音信号的频谱图、功率谱密度图和谱线图等。
最后,我们还可以使用梅尔频率倒谱系数( MFCC)来提取语音信号的特征。
MFCC是一种广泛应用于语音识别领域的特征提取方法。
matlab triang函数滤波

一、概述matlab中的triang函数是一种常用的信号滤波方法,它可以对信号进行平滑处理,去除噪音等干扰,使得信号更加清晰和易于分析。
本文将对triang函数的原理、使用方法和实际应用进行详细介绍,以帮助读者更好地理解和应用这一滤波技术。
二、triang函数原理1. 三角滤波器triang函数是一种基于三角滤波器的信号滤波方法。
三角滤波器是一种低通滤波器,它的频率响应特性为三角形状,即在截止频率附近有较小的衰减,并在其他频率上有较大的衰减。
2. 原理分析triang函数通过对信号进行卷积运算,利用三角滤波器的频率响应特性对信号进行平滑处理。
具体而言,triang函数计算一个长度为n的三角形窗口,然后对信号进行卷积运算,将窗口在信号上滑动,取窗口内信号的加权平均值作为滤波后的输出值。
三、triang函数使用方法1. 函数格式在matlab中,triang函数的调用格式为:y = triang(N)其中N为窗口长度,y为滤波后的信号。
2. 参数说明窗口长度N的选择直接影响到滤波效果,通常可以根据信号的特点和需求进行调整。
较大的N可以获得更平滑的滤波效果,但会导致滤波延迟增加;较小的N可以获得更快的滤波响应,但会丢失一部分高频信息。
3. 实例演示以下是一个简单的实例演示,使用triang函数对一个含有噪音的信号进行滤波处理:```matlab生成含噪音的信号t = 0:0.01:1;x = sin(2*pi*5*t) + 0.5*randn(size(t));使用triang函数进行滤波n = 20;y = filter(triang(n), 1, x);绘制原始信号和滤波后的信号plot(t, x, t, y);legend('原始信号', '滤波后的信号');```四、triang函数实际应用1. 语音信号处理triang函数常常用于语音信号的处理和分析,可以去除噪音和杂音,使得语音信号更加清晰和准确。
使用Matlab进行信号滤波的基本流程

使用Matlab进行信号滤波的基本流程引言:信号滤波在信号处理中起着重要的作用,可以去除噪声、增强信号特征等。
而Matlab作为一种功能强大的数学软件,提供了丰富的信号处理工具,使得信号滤波的操作更加简便和高效。
本文将介绍使用Matlab进行信号滤波的基本流程。
一、信号滤波的概念和分类信号滤波是指通过改变信号的频率特性,实现对信号进行去噪、增强等操作的过程。
根据滤波器的特性,可以将信号滤波分为时域滤波和频域滤波。
时域滤波是指在时域上通过加权各个时刻的信号值来改变信号的频率特性;频域滤波则是通过将信号转换到频域上,在频域上对信号进行操作。
二、Matlab中的信号滤波工具箱Matlab提供了成熟的信号处理工具箱,其中包含了众多用于信号滤波的函数和算法。
使用这些函数和算法,可以方便地进行信号滤波操作。
下面介绍几个常用的信号滤波函数:1. filter函数:该函数实现时域滤波的功能,通过设计一个滤波器,将信号与该滤波器进行卷积操作得到滤波后的信号。
2. fft函数:该函数实现频域滤波的功能,通过将信号进行傅里叶变换,将信号从时域转换到频域。
在频域上对信号进行操作后,再通过傅里叶逆变换将信号转换回时域。
3. fir1函数:该函数用于设计FIR滤波器,即有限脉冲响应滤波器。
可以根据自定义的滤波器特性,生成一个用于滤波的滤波器。
三、信号滤波的基本流程使用Matlab进行信号滤波的基本流程如下:1. 导入信号数据:首先,需要将待滤波的信号数据导入到Matlab中。
可以通过读取文件或者手动输入的方式获取信号数据。
将信号数据存储在Matlab的变量中。
2. 可视化信号数据:为了更好地了解信号的特征,可以将信号数据进行可视化显示。
Matlab提供了多种绘图函数,可以实现信号的时域和频域的绘图。
3. 设计滤波器:根据滤波的要求,选择合适的滤波器类型和参数。
在Matlab 中,可以使用fir1函数或者设计工具箱进行滤波器的设计。
MATLAB语音信号处理

MATLAB语⾳信号处理数字信号处理课设,我们使⽤MATLAB对语⾳信号进⾏了⼀系列处理,并将其所有功能集中于下图界⾯中:这个界⾯涉及功能众多,其中包括语⾳信号的观察分析、⾳⾊变换、AM调制解调、减抽样、加噪去噪、相频分析和幅频滤波等,最重要的是对MATLAB中函数的掌握,通过不同函数的组合实现你想要实现的功能。
本篇不会给出整个界⾯的程序,下⾯会分块给出每个功能的程序,整个界⾯只需GUI设计界⾯⽂件、定义结构体并把对应键程序打进去即可。
1、语⾳信号的采集1.1题⽬要求使⽤windows下的录⾳机录制⼀段语⾳信号、⾳乐信号或者采⽤其他软件截取⼀段⾳乐信号(要求:时间不超过5s,⽂件格式为WAV。
)①请每位同学都参与录⾳,内容⾃定。
②使⽤wavread语句读取语⾳/⾳乐信号获取抽样率;(注意:读取的信号是双声道信号,即为双列向量,需要分列处理);③输出时域语⾳/⾳乐信号的波形。
④实现对录⾳信号的声⾳⼤⼩的调节。
⑤实现对两种语⾳/⾳乐信号的混⾳⾳效。
⑥实现⾳乐信号的回⾳⾳效。
1.2设计内容及⽅案①读取⾳频信号:我是通过wavread函数读取.wav⽂件的⽅式来获得,当然⾸先要⾃⼰创建⼀个.wav⾳频,我是通过电脑录⾳⽣成.mp3然后格式⼯⼚转成.wav的,需保存到同⼀⽂件夹下。
②分声道处理:⼀般⾳乐和语⾳信号都是双声道信号,时域和频谱图会有两个颜⾊,所以要取单列来分析,通过x1=x(:,1)语句来实现。
③画时域波形图:⽤plot函数来画图,注意横坐标为时间t。
④⾳量⼤⼩调节:通过将⾳频直接乘⼀个系数来实现调⾳量。
⑤混⾳和回声:混⾳即将两个⾳频相加,要相加就得保证矩阵⼀样,所以要通过截取并补零矩阵来实现;回声是把三个信号叠加,这三个信号在不同位置补零⾳量也逐渐变⼩,就可以实现回声。
⑥播放声⾳:本题我使⽤wavplay来播放声⾳,会有警告,后⾯的题我⽤sound⽐较好。
1.3程序源码及注释clear[x,fs] = wavread('beautiful.wav');%⾳乐信号[y,fs1]= wavread('1.wav');%⼥⽣声⾳[z,fs2]= wavread('2.wav');%男⽣声⾳%输出频率fsfs1fs2%⾳乐语⾳信号分声道处理x1=x(:,1);y1=y(:,1);z1=z(:,1);%画⾳乐信号时域图n1=length(x1);%length取数列长度即元素个数figure(1)t1=(0:(n1-1))/fs;plot(t1,x1);axis([0,5,-1,1]);xlabel('时间t');title('⾳乐信号时域波形');%画语⾳信号时域图n2=length(y1);figure(2)subplot(2,1,1);t2=(0:(n2-1))/fs1;plot(t2,y1);%⼥⽣axis([0,4,-0.5,0.5]);xlabel('时间t');ylabel('幅度');title('⼥⽣语⾳信号时域波形');n3=length(z1);subplot(2,1,2);t3=(0:(n3-1))/fs2;plot(t3,z1);%男⽣axis([0,4,-0.5,0.5]);xlabel('时间t');ylabel('幅度');title('男⽣语⾳信号时域波形');%对语⾳信号声⾳⼤⼩调节wavplay(y,fs1); %播放原语⾳y11=10*y;wavplay(y11,fs1); %加⼤⾳量播放y22=0.5*y;wavplay(y22,fs1); %减⼩⾳量播放%两种语⾳信号的混⾳[m,n]=size(y1);%size取矩阵的⾏列数[m0,n0]=size(z1);a=zeros(abs(m-m0),n);%两矩阵⾏数差为零矩阵⾏数if length(y1)<length(z1)y2=[y1;a];y3=y2+z1;%两个矩阵⾏数⼀样才能相加,所以要补零elsey2=[z1;a];y3=y2+y1;%y1和z1中长的那个不变,短的那个补零end;wavplay(y3,fs1) ;%播放混⾳语⾳%画混⾳波形figure(3)subplot(2,1,1);t4=(0:(max(n2,n3)-1))/fs1;plot(t4,y3);axis([0,4.5,-0.5,0.5]);xlabel('时间');ylabel('幅度');title('两语⾳信号叠加后时域波形');%⾳乐信号的回⾳x11=x1(1:200000);%截取部分x11=x11';%因为输出为⼀列所以要转置成⼀⾏int0=zeros(1,20000);%1⾏2000列的零矩阵temp1=[x11,int0,int0];temp2=[int0,0.6*x11,int0];temp3=[int0,int0,0.3*x11];%通过补零实现延时,同时声⾳⼀个⽐⼀个⼩hui=temp1+temp2+temp3;%三重声⾳相加实现回声N=length(hui);wavplay(hui,fs1);%播放回⾳⾳乐%画回声波形subplot(2,1,2);t1=(0:(N-1))/fs;plot(t1,hui);axis([0,4.5,-1,1]);xlabel('时间');ylabel('幅度');title('回声时域波形');1.4运⾏结果仿真结果分析:我听到了原声和⾳量放⼤减⼩的声⾳,也听到了混⾳和回声的效果,变化明显;本题我画了⾳乐和两个语⾳信号的时域波形以及混⾳回声的时域波形,⾳乐信号幅度⽐语⾳信号⾼且连贯性⾼,混⾳之后幅度叠加,回声之后幅度也增⼤,波形有很明显的变化。
matlab对语音信号的处理及分析

Matlab对语音信号的处理及分析摘要:Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波,时域和频谱分析等,他的信号处理与分析工具箱为语音信号的处理和分析提供了十分丰富的功能函数,利用这些函数可以快捷而又方便地完成语音信号的处理和分析。
关键词:Matlab、语音信号、数字滤波、信号处理Matlab for speech signal processing and analysisZhu hao(College of Physics and Electronic Engineering Information Wenzhou university)Abstract:Matlab language is a data analysis and processing functions are very powerful computer application software, sound files which can be transformed into discrete data files, then use its powerful ability to process the data matrix operations, such as digital filtering,when domain and frequency domain analysis and so on. Its signal processing and analysis toolkit for voice signal analysis provides a very rich feature function, use of these functions can be quick and convenient features complete voice signal processing and analysis.Keywords: Matlab,Voice Signal,Digital filtering,The signal processing正文:1.引言随着社会文化的进步和科学技术的发展,人类开始进入了信息化时代,用现代手段研究语音处理技术,使人们能更加有效地产生、传输、存储、和获取语音信息,这对于促进社会的发展具有十分重要的意义,因此,语音信号处理正越来越受到人们的关注和广泛的研究。
应用Matlab对含噪声的语音信号进行频谱分析及滤波

应用Matlab对含噪声的语音信号进行频谱分析及滤波实验目的1.巩固所学的数字信号处理理论知识,理解信号的采集、处理、传输、显示和存储过程;2.综合运用专业及基础知识,解决实际工程技术问题的能力;3.学习资料的收集与整理,学会撰写课程设计报告。
实验环境1.微型电子计算机(PC);2.安装Windows 10操作系统,MATLAB7.0,FormatFactory等开发工具。
实验原理:在MATLAB环境中,有关声音(wave)录制、播放、存储和读取的函数有:●y=wavrecord(N,fs,Dtype)利用系统音频输入设备录音,以fs为采样频率,默认值为11025,即以11025Hz 进行采样。
Dtype为采样数据的存储格式,用字符串指定,可以是:‘double’、‘single’、’int16’、‘int8’其中只有int8是采用8位精度进行采样,其它三种都是16位采样结果转换为指定的MATLAB数据;●wavplay(y,fs)利用系统音频输出设备播放,以fs为播放频率,播放语音信号y;●wavwrite(y,fs,wavfile)创建音频文件;●wavread()读取wav格式的音频文件。
例如:[x,fs,bits]=wavread('myrecordsound.wav')x=x(:,1); %假设声音是双声道,只取单声道作分析上述语句表示读入存放在当前工作目录下的声音文件myrecordsound.wav,并以fs 为采样频率进行采样后存储在数组x中。
其中nbit是采样精度,比如16就是指16位精度的采样。
取单声道后,得到的数值x是一个列向量。
●sound();该函数的输入参量是音频数据向量、采样频率和转换位数。
例如:sound(sin(2*pi*25*(1:4000)/100));响两声就是:sound(sin(2*pi*25*(1:4000)/100));sleep(1);sound(sin(2*pi*25*(1:4000)/100));实验内容和任务要求1.采集语音信号并进行频谱分析2.对加入噪声的语音信号进行频谱分析3. 设计数字滤波器对加入噪声的语音信号进行滤波问题分析本实验要求设计IIR和FIR两种形式的滤波器对带有噪音的信号进行滤波。
基于MATLAB语音信号检测分析及处理
第一章绪论Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括Matlab和Simulink两大部分。
1.1 Matlab简介MATLAB是英文MATrix LABoratory(矩阵实验室)的缩写。
早期的MATLAB 是用FORTRAN语言编写的,尽管功能十分简单,但作为免费软件,还是吸引了大批使用者。
经过几年的校际流传,在John Little。
Cleve Moler和Steve Banger 合作,于1984年成立MathWorks公司,并正式推出MATLAB第一版版。
从这时起,MATLAB的核心采用C语言编写,功能越来越强大,除原有的数值计算功能外,还新增了图形处理功能。
MathWorks公司于1992年推出了具有划时代意义的4.0版;1994年推出了4.2版扩充了4.0版的功能,尤其在图形界面设计方面提供了新方法;1997年春5.0版问世,5.0版支持了更多的数据结构,使其成为一种更方便、更完善的编程语言;1999年初推出的MATLAB5.3版在很多方面又进一步改进了MATLAB语言的功能,随之推出的全新版本的最优化工具箱和Simulink3.0达到了很高水平;2000年10月,MATLAB6.0版问世,在操作页面上有了很大改观,为用户的使用提供了很大方便,在计算机性能方面,速度变的更快,性能也更好,在图形界面设计上更趋合理,与C语言接口及转换的兼容性更强,与之配套的Simulink4.0版的新功能也特别引人注目;2001年6月推出的MATLAB6.1版及Simulink4.1版,功能已经十分强大;2002年6月推出的MATLAB6.5版及Simulink5.0版,在计算方法、图形功能、用户界面设计、编程手段和工具等方面都有了重大改进;2004年,MathWorks公司推出了最新的MA TLAB7.0版,其中集成了最新的MATLAB7编译器、Simumlink6.0仿真软件以及很多工具箱。
MATLAB处理语音信号
MATLAB处理语⾳信号⼀、实验项⽬名称语⾳信号的处理⼆、实验⽬的综合运⽤数字信号处理课程的理论知识进⾏频谱分析以及滤波器设计,通过理论推导得出相应结论,并进⾏计算机仿真,从⽽复习巩固了课堂所学的理论知识,提⾼了对所学知识的综合应⽤能⼒。
三、实验内容1. 语⾳信号的采集2. 语⾳信号的频谱分析3. 设计数字滤波器和画出频率响应4. ⽤滤波器对信号进⾏滤波5. ⽐较滤波前后语⾳信号的波形及频谱6. 回放语⾳信号四、实验具体⽅案1.语⾳信号采集录制⼀段语⾳信号并保存为⽂件,长度控制在1秒,并对录制的信号进⾏采样;录制时使⽤Windows⾃带的录⾳机。
采样是将⼀个信号(即时间或空间上的连续函数)转换成⼀个数值序列(即时间或空间上的离散函数)。
采样定理指出,如果信号是带限的,并且采样频率⾼于信号带宽的两倍,那么,原来的连续信号可以从采样样本中完全重建出来。
如果信号带宽不到采样频率的⼀半(即奈奎斯特频率),那么此时这些离散的采样点能够完全表⽰原信号。
⾼于或处于奈奎斯特频率的频率分量会导致混叠现象。
⼤多数应⽤都要求避免混叠,混叠问题的严重程度与这些混叠频率分量的相对强度有关。
⽤Windows⾃带录⾳机录⼊⼀段⾳乐,2秒钟,⽤audioread读取⾳频内容,这⾥不使⽤waveread是因为他要求⾳频⽂件格式为.wav ,并且我进⾏了尝试但没有成功,画出⾳频信号的时域波形图[y1,fs]=audioread('F:\MATLAB\ren.m4a');figure(1);plot( y1 );title('Ô原语⾳信号时域波形图');xlabel('单位');ylabel('幅度');2.语⾳信号频谱分析⾸先画出语⾳信号的时域波形,然后对语⾳信号进⾏频谱分析。
在matlab中利⽤fft对信号进⾏快速傅⾥叶变换,得到信号的频谱特性。
Matlab的信号处理⼯具箱中的函数FFT可⽤于对序列的快速傅⾥叶变换分析,其调⽤格式是y=fft(x,N),其中,x是序列,y是序列的FFT变换结果,N为整数,代表做N点的FFT,若x为向量且长度⼩于N,则函数将x补零⾄长度N;若向量x长度⼤于N,则截断x使之长度为N。
如何使用Matlab技术进行信号滤波
如何使用Matlab技术进行信号滤波信号滤波是信号处理中的一个重要环节,其目的是去除噪声、干扰,提取出所关心的信号成分。
Matlab作为一种广泛应用于科学和工程领域的数值分析工具,提供了丰富的信号处理功能和工具包,可以通过编程和算法实现各种信号滤波方法。
本文将介绍如何使用Matlab技术进行信号滤波,包括滤波原理、常用滤波方法和Matlab代码实现等内容。
一、滤波原理信号滤波的基本原理是通过滤波器对信号进行加工处理,使得滤波后的信号具有更好的特性。
滤波器通过一系列的运算来调整信号的幅度、频率和相位等属性,以达到滤除或增强某些特定频率分量的目的。
常见的滤波器类型包括有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器。
FIR滤波器的主要特点是稳定性好、相位线性等,而IIR滤波器具有更高的滤波器阶数和更高的性能指标。
根据信号的特点和需求,选择适当的滤波器类型和参数非常重要。
二、常用滤波方法1. 低通滤波器低通滤波器是常用的一种滤波器,可以使得低于某个截止频率的信号成分通过,而高于该频率的信号成分则被滤除。
在Matlab中,可以使用`designfilt`函数设计低通滤波器。
例如,设计一个截止频率为1000Hz的低通滤波器代码如下:```matlabFs = 10000; % 采样频率Fc = 1000; % 截止频率N = 100; % FIR滤波器阶数h = designfilt('lowpassfir','FilterOrder',N,'CutoffFrequency',Fc,'SampleRate',Fs);```该代码中,`Fs`代表采样频率,`Fc`代表截止频率,`N`代表FIR滤波器的阶数。
设计完成后,可以使用`filter`函数对信号进行滤波处理。
2. 高通滤波器高通滤波器与低通滤波器相反,它只允许高于某个截止频率的信号成分通过,而低于该频率的信号成分则被滤除。
基于MATLAB的语音信号去噪(完整版)
基于MATLAB的语音信号去噪基于MATLAB的语音信号去噪h(n)= hd(n)(n)( 1-2 )(4)验算技术指标是否满足要求。
1]1.2.2窗函数法设计FIR滤波器的要求在使用窗函数法设计FIR滤波器时要满足以下两个条件:(1)窗谱主瓣尽可能地窄,以获得较陡的过渡带;(2)尽量减少窗谱的最大旁瓣的相对幅度,也就是使能量尽量集中于主瓣,减小峰肩和纹波,进而增加阻带的衰减。
在实际工程中常用的窗函数有五种,即矩形窗(Retangular)、三角窗(Triangular)、汉宁窗(Hanning)、汉明窗(Haing)及凯塞窗(Kaiser)。
.2.3常用窗函数的性质和特点(1)矩形窗矩形窗属于时间变量的零次幂窗。
矩形窗使用最多,习惯上不加窗就是使信号通过了矩形窗。
这种窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣,导致变换中带进了高频干扰和泄露漏,甚至出现负谱现象。
(2)三角形窗三角形窗又称费杰窗,是幂窗的一次文形式。
与矩形窗比较,主瓣宽约等于矩形窗的两倍,但旁瓣小,而且无负旁瓣。
(3)汉宁窗汉宁窗又称升余弦窗,汉宁窗可以看作是3个矩形时间窗的频谱之和。
汉宁窗优于矩形窗,但汉宁窗主瓣加宽,相当于分析带宽加宽,频率分辨力下降。
(4)哈明窗哈明窗与汉宁窗都是余弦窗,只是加权系数不同,哈明窗加权的系数能使旁瓣达到更小,所以哈明窗又称为改进的升余弦窗。
它的能量更加集中在主瓣中主瓣的能量约占99.96%第一主瓣的峰值比主瓣小dB,但主瓣宽度和汉宁窗相同仍为8*π/N,哈明窗与汉宁窗都是很有用的窗函数。
(5)凯塞窗以上几种窗函数是各以一定主瓣加宽为代价,来换取某种程度的旁瓣抑制,窗函数的主瓣宽度和旁瓣峰值衰耗是矛盾的,一项指标的提高总是以另一项指标的下降为代价,窗口选择实际上是对两项指标作权衡。
而两项指标是跳变的,于是有人提出可调整窗,适当修改参数,可在这两项指标间作连续的选择。
常用的可调整窗是凯塞(Kaiser)窗。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MATLAB的语音信号滤波处理题目:基于MATLAB的语音信号滤波处理课程:数字信号处理学院:电气工程学院班级:学生:指导教师:二O一三年十二月目录CONTENTS摘要一、引言二、正文1.设计要求2.设计步骤3.设计内容4.简易GUI设计三、结论四、收获与心得五、附录一、引言随着Matlab仿真技术的推广,我们可以在计算机上对声音信号进行处理,甚至是模拟。
通过计算机作图,采样,我们可以更加直观的了解语音信号的性质,通过matlab编程,调用相关的函数,我们可以非常方便的对信号进行运算和处理。
二、正文2.1 设计要求在有噪音的环境中录制语音,并设计滤波器去除噪声。
2.2 设计步骤1.分析原始信号,画出原始信号频谱图及时频图,确定滤波器类型及相关指标;2.按照类型及指标要求设计出滤波器,画出滤波器幅度和相位响应,分析该滤波器是否符合要求;3.用所设计的滤波器对原始信号进行滤波处理,画出滤波后信号的频谱图及时频图;4.对滤波前的信号进行分析比对,评估所设计滤波器性能。
2.3 设计内容1.原始信号分析分析信号的谱图可知,噪音在1650HZ和3300HZ附近的能量较高,而人声的能量基本位于1000HZ以下。
因此,可以设计低通滤波器对信号进行去噪处理。
2.IIR滤波器设计用双线性变换法分别设计了巴特沃斯低通滤波器和椭圆低通滤波器和带阻滤波器:①巴特沃斯滤波器fp=800;fs=1300;rs=35;rp=0.5;程序代码如下:fp=800;fs=1300;rs=35;rp=0.5;Fs=44100;wp=2*Fs*tan(2*pi*fp/(2*Fs));ws=2*Fs*tan(2*pi*fs/(2*Fs));[n,wn]=buttord(wp,ws,rp,rs,'s');[b,a]=butter(n,wn,'s');[num,den]=bilinear(b,a,Fs);[h,w]=freqz(num,den,512,Fs);②椭圆低通滤波器fp=1300;fs=1600;rs=60;rp=0.5; 程序代码如下:fp=1300;fs=1600;rs=60;rp=0.5;Fs=44100;wp=2*Fs*tan(2*pi*fp/(2*Fs));ws=2*Fs*tan(2*pi*fs/(2*Fs)); [n,wn]=ellipord(wp,ws,rp,rs,'s');[b,a]=ellip(n,rp,rs,wn,'s');[num,den]=bilinear(b,a,Fs);[h,w]=freqz(num,den,512,Fs);③带阻滤波器fp1=800;fp2=2300;fs1=1300;fs2=1800;rs=30;rp=0.6 fp3=2800;fp4=4000;fs3=3200;fs4=3700;rs=30;rp=0.6 程序代码如下:fp1=800;fp2=2300;fs1=1300;fs2=1800;rs=30;rp=0.6;Fs=44100; fp=[fp1,fp2];fs=[fs1,fs2];wp=2*Fs*tan(2*pi*fp/(2*Fs));ws=2*Fs*tan(2*pi*fs/(2*Fs));[n,wn]=buttord(wp,ws,rp,rs,'s');[b,a]=butter(n,wn,'stop','s');[num,den]=bilinear(b,a,Fs);[h,w]=freqz(num,den,512,Fs);fp3=2800;fp4=4000;fs3=3200;fs4=3700;rs=30;rp=0.6;Fs=44100; fp1=[fp3,fp4];fs1=[fs3,fs4];wp1=2*Fs*tan(2*pi*fp1/(2*Fs));ws1=2*Fs*tan(2*pi*fs1/(2*Fs));[n1,wn1]=buttord(wp1,ws1,rp,rs,'s');[b1,a1]=butter(n1,wn1,'stop','s');[num1,den1]=bilinear(b1,a1,Fs);[h1,w1]=freqz(num1,den1,512,Fs);3.FIR滤波器①加hamming窗n=100;fp=1000;Fs=44100;b=fir1(n,fp/(Fs/2),Hamming(n+1)); [h,w]=freqz(b,1,512,Fs);②加hanning窗n=;fp=1000;Fs=44100;b=fir1(n,fp/(Fs/2),Hanning(n+1)); [h,w]=freqz(b,1,512,Fs);③加blackman窗n=100;fp=1000;Fs=44100;b=fir1(n,fp/(Fs/2),blackman(n+1));[h,w]=freqz(b,1,512,Fs);4.滤波前后比对①巴特沃斯低通滤波器滤波后②椭圆低通滤波器滤波后③带阻滤波器④加hamming窗⑤加hanning窗⑥加blackman窗2.4简易GUI界面设计为了便于操作和演示,设计了如下的简易GUI界面。
三、结论由以上谱图分析可知,经过滤波器滤波后,信号中的高频杂音明显被抑制,而人声成分大部分被保留,起到了预期的滤波作用。
对比所设计的两种滤波器,椭圆滤波器在过渡带相对较窄的情况下,能满足相对较高阻带衰减。
四、收获与心得本次设计大概进行了一周的时间,语音信号处理的是目前比较流行且十分有趣的,在编程实现的过程中还是遇到了很多困难。
在前期的准备工作中,查阅了大量资料,以完善我们的理论知识。
我们为了完成本次设计,我们通过查阅相关书籍以及matlab中的帮助,选用不同的matlab函数,尝试不同的参数。
经过接近一个礼拜的反复调试,最终基本的实现了设计任务。
虽然遇到了很多困难,但是我们在设计过程中都有收获很大。
本次设计将信号与系统课上学习的知识用于实践,让我们对对语音信号处理更深入的了解,也让我们加深了对滤波器相关内容的理解,同时也使得我们的Matlab能力有了很大的提高。
参考文献《应用matlab实现信号分析和处理》科学出版社附录1 巴特沃斯低通滤波器fp=800;fs=1300;rs=35;rp=0.5;Fs=44100; wp=2*Fs*tan(2*pi*fp/(2*Fs));ws=2*Fs*tan(2*pi*fs/(2*Fs));[n,wn]=buttord(wp,ws,rp,rs,'s');[b,a]=butter(n,wn,'s');[num,den]=bilinear(b,a,Fs);[h,w]=freqz(num,den,512,Fs);figure(1)%subplot(3,1,1)plot(w,abs(h));xlabel('频率/Hz');ylabel('幅值');title('巴特沃斯低通滤波器幅度特性');axis([0,5000,0,1.2])grid on;figure(2)%subplot(3,1,2)plot(w,20*log10(abs(h)));xlabel('频率/Hz');ylabel('幅值db');title('巴特沃斯低通滤波器幅度特性db'); axis([0,5000,-90,10]);grid on;figure(3)plot(w,180/pi*unwrap(angle(h))); xlabel('频率/Hz');ylabel('相位');title('巴特沃斯低通滤波器相位特性');axis([0,5000,-1000,10])grid on;[s1,Fs,bits]=wavread('D:\222.wav');x1=s1(:,1);sound(x1,Fs,bits);N1=length(x1);Y1=fft(x1,N1);f1=Fs*(0:N1-1)/N1;t1=(0:N1-1)/Fs;figure(4)plot(f1,abs(Y1))xlabel('频率/Hz');ylabel('幅度');title('原始信号频谱');grid on;axis([0 6000 0 400])y=filter(num,den,x1);sound(y,Fs,bits);N2=length(y);Y2=fft(y,N2);f2=Fs*(0:N2-1)/N2;t2=(0:N2-1)/Fs;figure(5)plot(f2,abs(Y2))xlabel('频率/Hz');ylabel('幅度');title('过滤后信号的频谱');grid on;axis([0 6000 0 100])2椭圆低通滤波器fp=1300;fs=1600;rs=60;rp=0.5;Fs=44100; wp=2*Fs*tan(2*pi*fp/(2*Fs));ws=2*Fs*tan(2*pi*fs/(2*Fs));[n,wn]=ellipord(wp,ws,rp,rs,'s');[b,a]=ellip(n,rp,rs,wn,'s');[num,den]=bilinear(b,a,Fs);[h,w]=freqz(num,den,512,Fs);figure(1)plot(w,abs(h));xlabel('频率/Hz');ylabel('幅值');title('椭圆低通滤波器幅度特性');axis([0,5000,0,1.2])grid on;figure(2)plot(w,20*log10(abs(h)));xlabel('频率/Hz');ylabel('幅值db');title('椭圆低通滤波器幅度特性db');axis([0,5000,-90,10]);grid on;figure(3)plot(w,180/pi*unwrap(angle(h)));xlabel('频率/Hz');ylabel('相位');title('椭圆低通滤波器相位特性');axis([0,5000,-1000,10])grid on;[s1,Fs,bits]=wavread('D:\222.wav');x1=s1(:,1);sound(x1,Fs,bits);N1=length(x1);Y1=fft(x1,N1); %对信号做N点FFT变换f1=Fs*(0:N1-1)/N1;t1=(0:N1-1)/Fs;figure(4)plot(f1,abs(Y1))xlabel('频率/Hz');ylabel('幅度');title('原始信号频谱');grid on;axis([0 6000 0 400])y=filter(num,den,x1);sound(y,Fs,bits);N2=length(y);Y2=fft(y,N2); %对信号做N点FFT变换f2=Fs*(0:N2-1)/N2;t2=(0:N2-1)/Fs;figure(5)plot(f2,abs(Y2))xlabel('频率/Hz');ylabel('幅度');title('过滤后信号的频谱');grid on;axis([0 6000 0 100])3.带阻滤波器fp1=800;fp2=2300;fs1=1300;fs2=1800;rs=30;rp=0.6;Fs=44100; fp=[fp1,fp2];fs=[fs1,fs2];wp=2*Fs*tan(2*pi*fp/(2*Fs));ws=2*Fs*tan(2*pi*fs/(2*Fs));%wap=2*tan(wp/2)/Ts[n,wn]=buttord(wp,ws,rp,rs,'s');[b,a]=butter(n,wn,'stop','s');[num,den]=bilinear(b,a,Fs);[h,w]=freqz(num,den,512,Fs);fp3=2800;fp4=4000;fs3=3200;fs4=3700;rs=30;rp=0.6;Fs=44100; fp1=[fp3,fp4];fs1=[fs3,fs4];wp1=2*Fs*tan(2*pi*fp1/(2*Fs));ws1=2*Fs*tan(2*pi*fs1/(2*Fs));%wap=2*tan(wp/2)/Ts[n1,wn1]=buttord(wp1,ws1,rp,rs,'s');[b1,a1]=butter(n1,wn1,'stop','s');[num1,den1]=bilinear(b1,a1,Fs);[h1,w1]=freqz(num1,den1,512,Fs);figure(1)plot(w,abs(h));xlabel('频率/Hz');ylabel('幅值');title('巴特沃斯带阻滤波器幅度特性');axis([0,5000,0,1.2])grid on;figure(2)plot(w,20*log10(abs(h)));xlabel('频率/Hz');ylabel('幅值db');title('巴特沃斯带阻滤波器幅度特性db');axis([0,5000,-90,10]);grid on;figure(3)plot(w,180/pi*unwrap(angle(h)));xlabel('频率/Hz');ylabel('相位');title('巴特沃斯带阻滤波器相位特性');axis([0,5000,-1000,10])grid on;figure(4)plot(w1,abs(h1));xlabel('频率/Hz');ylabel('幅值');title('巴特沃斯带阻滤波器幅度特性');axis([0,5000,0,1.2])grid on;figure(5)plot(w1,20*log10(abs(h1)));xlabel('频率/Hz');ylabel('幅值db');title('巴特沃斯带阻滤波器幅度特性db');axis([0,5000,-90,10]);grid on;figure(6)plot(w1,180/pi*unwrap(angle(h1)));xlabel('频率/Hz');ylabel('相位');title('巴特沃斯带阻滤波器相位特性');axis([0,5000,-1000,10])grid on;[s1,Fs,bits]=wavread('D:\222.wav'); x1=s1(:,1);sound(x1,Fs,bits);N1=length(x1);Y1=fft(x1,N1); %对信号做N点FFT变换f1=Fs*(0:N1-1)/N1;t1=(0:N1-1)/Fs;figure(7)plot(f1,abs(Y1))xlabel('频率/Hz');ylabel('幅度');title('原始信号频谱');grid on;axis([0 6000 0 400])y1=filter(num,den,x1);y=filter(num1,den1,y1);sound(y,Fs,bits);N2=length(y);Y2=fft(y,N2);f2=Fs*(0:N2-1)/N2;t2=(0:N2-1)/Fs;figure(8)plot(f2,abs(Y2))xlabel('频率/Hz');ylabel('幅度');title('过滤后信号的频谱');grid on;axis([0 6000 0 100])4.加hamming窗n=100;fp=1000;Fs=44100;b=fir1(n,fp/(Fs/2),Hamming(n+1)); [h,w]=freqz(b,1,512,Fs);a=num2str(a);[s1,Fs,bits]=wavread('D:\222.wav'); x1=s1(:,1);sound(x1,Fs,bits);N1=length(x1);Y1=fft(x1,N1);f1=Fs*(0:N1-1)/N1;y=fftfilt(b,x1);sound(y,Fs,bits);N2=length(y);Y2=fft(y,N2);f2=Fs*(0:N2-1)/N2;figure(4)subplot(2,1,1)plot(f1,abs(Y1))xlabel('频率/Hz');ylabel('幅度');title('原始信号频谱');grid on;axis([0 6000 0 400])subplot(2,1,2)plot(f2,abs(Y2));xlabel('频率/Hz');ylabel('幅度');title('过滤后信号的频谱');grid on;axis([0 6000 0 100])5.加hanning窗n=100;fp=1000;Fs=44100;b=fir1(n,fp/(Fs/2),Hanning(n+1)); [h,w]=freqz(b,1,512,Fs);a=num2str(a);[s1,Fs,bits]=wavread('D:\222.wav'); x1=s1(:,1);sound(x1,Fs,bits);N1=length(x1);Y1=fft(x1,N1);f1=Fs*(0:N1-1)/N1;y=fftfilt(b,x1);sound(y,Fs,bits);N2=length(y);Y2=fft(y,N2);f2=Fs*(0:N2-1)/N2;figure(4)subplot(2,1,1)plot(f1,abs(Y1))xlabel('频率/Hz');ylabel('幅度');title('原始信号频谱');grid on;axis([0 6000 0 400])subplot(2,1,2)plot(f2,abs(Y2));xlabel('频率/Hz');ylabel('幅度');title('过滤后信号的频谱');grid on;axis([0 6000 0 100])6.加blackman窗n=100;fp=1000;Fs=44100;b=fir1(n,fp/(Fs/2),blackman(n+1));[h,w]=freqz(b,1,512,Fs);a=num2str(a);[s1,Fs,bits]=wavread('D:\222.wav');x1=s1(:,1);sound(x1,Fs,bits);N1=length(x1);Y1=fft(x1,N1);f1=Fs*(0:N1-1)/N1;y=fftfilt(b,x1);sound(y,Fs,bits);N2=length(y);Y2=fft(y,N2);f2=Fs*(0:N2-1)/N2;figure(4)subplot(2,1,1)plot(f1,abs(Y1))xlabel('频率/Hz');ylabel('幅度');title('原始信号频谱');grid on;axis([0 6000 0 400])subplot(2,1,2)plot(f2,abs(Y2));xlabel('频率/Hz');ylabel('幅度');title('过滤后信号的频谱');grid on;axis([0 6000 0 100])7.巴特沃斯低通滤波时频分析clearFs=44100;[s1,Fs,bits]=wavread('D:\222.wav');x=s1(:,1);x1=x(40001:64576)l=length(x1);N=6;m=downsample(x1,N);%降抽样后 Fs=7350hzz=length(m);%4096[tfr, t, f] = tfrstft(m);figure(13)contour(t,(Fs/N)*(0:z/2-1)/z,abs(tfr(1:z/2,:)).^2); xlabel('时间t');ylabel('频率f');title('等高线图(滤波前)');grid on;figure(14)mesh(t,(Fs/N)*(0:z/2-1)/z,abs(tfr(1:z/2,:)).^2);xlabel('时间t');ylabel('频率f');zlabel('幅值A');title('三维图(滤波前)');grid on;fp=1300;fs=1600;rs=60;rp=0.5;Fs=44100;wp=2*Fs*tan(2*pi*fp/(2*Fs));ws=2*Fs*tan(2*pi*fs/(2*Fs)); [n,wn]=ellipord(wp,ws,rp,rs,'s');[b,a]=ellip(n,rp,rs,wn,'s');[num,den]=bilinear(b,a,Fs);[h,w]=freqz(num,den,512,Fs);y=filter(num,den,x);x1=y(40001:64576)l=length(x1);N=6;m=downsample(x1,N);%降抽样后 Fs=7350hzz=length(m);%4096[tfr,t,f] = tfrstft(m);figure(15)contour(t,(Fs/N)*(0:z/2-1)/z,abs(tfr(1:z/2,:)).^2); xlabel('时间t');ylabel('频率f');title('等高线图(滤波后)');grid on;figure(16)mesh(t,(Fs/N)*(0:z/2-1)/z,abs(tfr(1:z/2,:)).^2);xlabel('时间t');ylabel('频率f');zlabel('幅值A');title('三维图(滤波后)');grid on;。