基于MATLAB的语音分析处理系统设计

语音即语言的声音,是语言符号系统的载体。它由人的发音器官发出,负载着一定的语言意义。语言依靠语音实现它的社会功能。语言是音义结合的符号系统,语言的声音和语言的意义是紧密联系着的,因此,语言虽是一种声音,但又与一般的声音有着本质的区别。语音是人类发音器官发出的具有区别意义功能的声音,不能把语音看成纯粹的自然物质;语音是最直接地记录思维活动的符号体系,是语言交际工具的声音形式。

语音信号在现实生活中有着广泛的应用,因而对语音信号的分析和处理,让人们更方便的使用语音信号有着很大的意义!

语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。 

Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。信号处理是Matlab重要应用的领域之一。 

    语音,作为一种典型的非平稳随机信号,是人类交流信息最自然、最有效、最方便的手段,在人类文明和社会进步中起着重要的作用。随着电子通信业的出现和计算机技术的发展,人们开始可以从数字信号处理的角度来了解语音。语音信号的研究可以从时域和频域两个方面来进行。其中时域的分析处理有两种方法:一种是进行语音信号分析,这属于线性处理的范畴,主要是通过信号的加减、时移、倍乘、卷积、求相关函数等来实现;另一种是生成和变换成各种调制信号,这属于非线性的范畴,主要是对信号平均累加器的动态范围进行压缩扩张,用门限方法对噪声的抑制。对频域分析处理,即对信号的频率特性在频谱中加以分析研究,这拓展了信号分析的范围,是对不确定信号分析的主要方法。

    随着计算机技术和信息技术的发展,语音交互已经成为人机交互的必要手段,而语音信号的采集和处理是人机交互的前提和基础。声卡是计算机对语音信号进行加工的重要部件,它具有对信号滤波、放大、采样保持、A/D和D/A转换等功能。尽管在Windows附件的娱乐中带有一个录音机,通过它可以驱动声卡采集语音信号并保存为语音文档。但是要对采集的信号进一步分析处理就必须另外编程或通过其它软件,而且Windows附件中的录音机功能极其有限且不能扩展。

Matlab是美国Math Works公司推出的一种面向工程和科学计算的交互式计算软件,它以矩阵运算为基础,把计算、可视化、程序设计融合到了一个简单易用的交互式工作环境中。在Matlab环境中,可以通过多种编程方法驱动声卡,实现对语音信号的采集和回放。同时由于Matlab是一个数据分析和处理功能十分强大的工程实用软件,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。

    语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科,它是一门新兴的学科,同时又是综合性的多学科领域和涉及面很广的交叉学科。

2.2.1 Wavread函数介绍

    选取一段语音信号,然后在Matlab软件平台下,利用wavread函数对语音信号进行采样,记住采样频率和采样点数。通过使用wavread函数,理解采样频率、采样位数等概念。 

    wavread函数调用格式: 

                        y=wavread(file)

    读取file所规定的wav文件,返回采样值放在响亮y中。 [y,fs,nbits]=wavread(file),采样值放在向y中,sf表示采样频率(Hz),nbits表示采样位数。 

                       y=wavread(file,N)

     读取前N点的采样值放在向量y中。 

                       y=wavread(file,[1N,2N])

     读取从1N到2N点的采样值放在向量y中。

对语音信号nm.wav进行采样其程序如下:

                        [y,fs,nbits]=wavread('mm.wav');

其中:

                        fs=44100;

                        nbits=16;

                        y=wavread(file,[-1,0.9235]);

 

 

2.2.2其他相关函数

1.fft函数调用

 在MATLAB的信号处理工具箱中函数FFT用于序列快速傅立叶变换, 是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的FFT算法图(Bufferfly算法)发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。FFT函数的一种调用格式为: 

                             y=fft(x)        

其中:x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT。且和x相同长度。 

FFT函数的另一种调用格式为:

                             y=fft(x,N)

式中:,y意义同前,N为正整数。

2.函数sound的调用 

   函数sound的调用,该函数的输入参量是音频数据向量、采样频率和转换位数。可以对声音进行回放,其调用格式为:

                            Sound(x,fs,bits)   

     向量y则就代表了一个信号,也就是说可以像处理一个信号表达式一样处理这个声音信号。

 

2.3设计理论依据

2.3.1采样定理

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

   1924年奈奎斯特(Nyquist)就推导出在理想低通信道的最高大码元传输速率的公式:理想低通信道的最高码元传输速率:

                           B=2W Baud

其中:W是带宽,理想通道的极限速率:

    C = B * log2 N ( bps )

采样过程所应遵循的规律,又称取样定理、抽样定理。采样定理说明采样频率与信号频谱之间的关系,是连续信号离散化的基本依据。采样定理是1928年由美国电信工程师H.奈奎斯特首先提出来的,因此称为奈奎斯特采样定理。1933年由苏联工程师科捷利尼科夫首次用公式严格地表述这一定理,因此在苏联文献中称为科捷利尼科夫采样定理。1948年信息论的创始人C.E.香农对这一定理加以明确地说明并正式作为定理引用,因此在许多文献中又称为香农采样定理。采样定理有许多表述形式,但最基本的表述方式是时域采样定理和频域采样定理。采样定理在数字式遥测系统、时分制遥测系统、信息处理、数字通信和采样控制理论等领域得到广泛的应用。

 2.3.2 采样频率

采样频率,也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔。通俗的讲采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡采样频率只能用于周期性采样的采样器,对于非周期性采样的采样器没有规则限制。采样频率的常用的表示符号是fs。

通俗的讲采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质音调,衡量声卡、声音文件的质量标准。采样频率越高,即采样的间隔时间越短,则在单位时间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。采样频率与声音频率之间有一定的关系,根据奈奎斯特理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原成为原来的声音。这就是说采样频率是衡量声卡采集、记录和还原声音文件的质量标准。

2.3.3 采样位数

采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。

采样位数和采样率对于音频接口来说是最为重要的两个指标,也是选择音频接口的两个重要标准。无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度范围。每增加一个采样位数相当于力度范围增加了6dB。采样位数越多则捕捉到的信号越精确。对于采样率来说你可以想象它类似于一个照相机,44.1kHz意味着音频流进入计算机时计算机每秒会对其拍照达441000次。显然采样率越高,计算机摄取的图片越多,对于原始音频的还原也越加精确。

2.4 语音信号的分语音信号的分析及处理方法

2.4.1语音的录入与打开

MATLAB中,[y,fs,bits]=wavread('Blip',[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz)bits表示采样位数。[N1 N2]表示读取从N1点到N2点的值,若只有一个N的点则表示读取前N点的采样值。

                           sound(x,fs,bits)

用于对声音的回放,向量y则就代表了一个信号,也即一个复杂的“函数表达式”,也就是说可以像处理一个信号表达式一样处理这个声音信号。

2.4.2时域信号的FFT分析

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

在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。函数FFT用于序列快速傅立叶变换,其调用格式y=fft(x)其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT且和x相同长度;若x为一矩阵,则y是对矩阵的每一列向量进行FFT。如果x长度是2的幂次方,函数fft执行高速基-2FFT算法,否则fft执行一种混合基的离散傅立叶变换算法,计算速度较慢。函数FFT的另一种调用格式y=fft(x,N)式中,xy意义同前,N为正整数。函数执行N点的FFTx为向量且长度小于N,则函数将x补零至长度N若向量x的长度大于N,则函数截短x使之长度为Nx 为矩阵,按相同方法对x进行处理。

2.4.3 数字滤波器设计原理

数字滤波(digital filtering:用数字设备,通过一定的算法,对信号进行处理,将某个频段的信号进行滤除,得到新的信号的这一过程叫做数字滤波。数字滤波器可以分为两大部分:即经典滤波器和现代滤波器。经典滤波器就是假定输入信号x(n)中的有用成分和希望滤除成分分别位于不同的频带,因而我们通过一个线性系统就可以对噪声进行滤除,如果噪声和信号的频谱相互混叠,则经典滤波器得不到滤波的要求。

通常有高通滤波器,低通滤波器,带通滤波器,带阻滤波器。现代滤波器是从含有噪声的信号估计出有用的信号和噪声信号。这种方法是把信号和噪声本身都视为随机信号,利用其统计特征,如自相关函数,互相关函数,自功率谱,互功率谱等引导出信号的估计算法,然后利用数字设备实现。目前主要有维纳滤波卡尔曼滤波自适应滤波数字滤波器

2.4.4 数字滤波器的设计步骤

不论是IIR滤波器还是FIR滤波器的设计都包括三个步骤:

1.按照实际任务的要求,确定滤波器的性能指标。

2.用一个因果、稳定的离散线性时不变系统的系统函数去逼近这一性能指标。根据不同的要求可以用IIR系统函数,也可以用FIR系统函数去逼近。

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

 2.4.5 IIR滤波器与FIR滤波器的性能比较

              FIR:Finite Impulse response,有限冲击响应

              IIR:Infinite Impulse response,无限冲击响应

从性能上来说,IIR滤波器传输函数的极点可位于单位圆内的任何地方,因此可用较低的阶数获得高的选择性,所用的存贮单元少,所以经济而效率高。但是这个高效率是以相位的非线性为代价的。选择性越好,则相位非线性越严重。

相反的从FIR滤波器却可以得到严格的线性相位,然而由于FIR滤波器传输函数的极点固定在原点,所以只能用较高的阶数达到高的选择性;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可以比IIR滤波器高5~10倍,结果,成本较高,信号延时也较大;如果按相同的选择性和相同的线性要求来说,则IIR滤波器就必须加全通网络进行相位较正,同样要大增加滤波器的节数和复杂性。

3.1 语音信号的采集与读取

 语音信号采集与分析是以语音语言学和数字信号处理为基础而形成的一门涉及面很广的综合性学科,与心理学、生理学通信与信息科学计算机科学以及模式识别和人工智能等学科都有着非常密切的关系,对语音信号进行采集与分析的研究一直是数字信号处理技术发展的重要推动力量。这是因为许多新的处理方法的提出,首先是在语音信号处理中获得成功,然后再推广到其他领域!语音信号的分析与处理作为一个重要的研究领域,随着通信技术的发展,语音采集和分析仪器的数字化、智能化、小型化和多功能化的发展越来越快,其分析速度也有了大幅度的提高!

    下面的一段程序是语音信号在MATLAB中的最简单表现形式,它实现了语音的读取打开,以及绘出了语音信号的波形频谱图

[x,fs,bits]=wavread('mm.wav',[1024 5120]);

sound(x,fs,bits);

X=fft(x,4096);

magX=abs(X);

angX=angle(X);

subplot(221);plot(x);title('原始信号波形');

subplot(222);plot(X); title('原始信号频谱');

subplot(223);plot(magX);title('原始信号幅值');

subplot(224);plot(angX);title('原始信号相位');

 

图3-1 语音信号的读入与打开

 

3.2 语音信号的定点分析

已知一个语音信号,数据采样频率为100Hz,试分别绘制N128DFT的幅频图和N1024DFT幅频图。编程如下:

x=wavread('mm.wav');

sound(x);fs=100;N=128;

y=fft(x,N);

magy=abs(y);

f=(0:length(y)-1)'*fs/length(y);

subplot(221);plot(f,magy);

xlabel('频率(Hz)');ylabel('幅值');

title('N=128(a)');grid

subplot(222);plot(f(1:N/2),magy(1:N/2));

xlabel('频率(Hz)');ylabel('幅值');

fs=100;N=1024;

y=fft(x,N);

magy=abs(y);

f=(0:length(y)-1)'*fs/length(y);

subplot(223);plot(f,magy);

xlabel('频率(Hz)');ylabel('幅值');

title('N=1024(c)');grid

subplot(224);plot(f(1:N/2),magy(1:N/2));

xlabel('频率(Hz)');ylabel('幅值');

title('N=1024(d)');grid

 

3.3 数字滤波器的设计实例

3.3.1  N阶高通滤波器

在这里,以5阶为例,其中wc为其3dB边缘频率,程序设计如下:

x=wavread('mm.wav');

sound(x);

N=5;wc=0.3;

[b,a]=butter(N,wc,'high');

X=fft(x);

subplot(321);plot(x);title('滤波前信号的波形');

subplot(322);plot(X);title('滤波前信号的频谱');

y=filter(b,a,x);

Y=fft(y);

subplot(323);plot(y);title('IIR滤波后信号的波形');

subplot(324);plot(Y);title('IIR滤波后信号的频谱');

z=fftfilt(b,x);

Z=fft(z);

subplot(325);plot(z);title('FIR滤波后信号的波形');

subplot(326):ploi(Z);title(‘FIR滤波后信号的频谱’);

 

3.3.2  N阶低通滤波器

在这里,同样以5阶为例,其中wc为其3dB边缘频率,程序设计如下:

x=wavread('mm.wav');

sound(x);

N=5;wc=0.3;

[b,a]=butter(N,wc);

X=fft(x);

subplot(321);plot(x);title('滤波前信号的波形');

subplot(322);plot(X);title('滤波前信号的频谱');

y=filter(b,a,x);

Y=fft(y);(y);title('IIR滤波后信号的波形');

subplot(324);plot(Y);title('IIR滤波后信号的频谱');

z=fftfilt(b,x);

Z=fft(z);

subplot(325);plot(z);title('FIR滤波后信号的波形');

subplot(326):plot(Z);title(‘FIR滤波后信号的频谱’);

 

图3-4 N阶低通滤波器

2N阶带通滤波器的设计(在这里,以10阶为例,其中wc为其3dB边缘频率,wc=[w1,w2],w1 wc w2),程序设计如下:

x=wavread('mm.wav');

sound(x);N=5;wc=[0.3,0.6];

[b,a]=butter(N,wc);

X=fft(x);

subplot(321);plot(x);title('滤波前信号的波形');

subplot(322);plot(X);title('滤波前信号的频谱');

y=filter(b,a,x);

Y=fft(y);

subplot(323);plot(y);title('IIR滤波后信号的波形');

subplot(324);plot(Y);title('IIR滤波后信号的频谱');

z=fftfilt(b,x);

Z=fft(z);

subplot(325);plot(z);title('FIR滤波后信号的波形');

subplot(326):plot(Z);title(‘FIR滤波后信号的频谱’);

 

   图3-5 带通滤波器

  2N阶带阻滤波器的设计(在这里,以10阶为例,其中wc为其3dB边缘频率,wc=[w1,w2],w1 wc w2),程序设计如下:

x=wavread('mm.wav');

sound(x);

N=5;wc=[0.2,0.7];

[b,a]=butter(N,wc,'stop');

X=fft(x);

subplot(321);plot(x);title('滤波前信号的波形');

subplot(322);plot(X);title('滤波前信号的频谱');

y=filter(b,a,x);

Y=fft(y);

subplot(323);plot(y);title('IIR滤波后信号的波形');

subplot(324);plot(Y);title('IIR滤波后信号的频谱');

z=fftfilt(b,x);

Z=fft(z);

subplot(325);plot(z);title('FIR滤波后信号的波形');

subplot(326);plot(Z);title('FIR滤波后信号的频谱');

 

图3-6 带阻滤波器

 

 

% NM M-file for nm.fig

%      NM, by itself, creates a new NM or raises the existing

%      singleton*.

%

%      H = NM returns the handle to a new NM or the handle to

%      the existing singleton*.

%

%      NM('CALLBACK',hObject,eventData,handles,...) calls the local

%      function named CALLBACK in NM.M with the given input arguments.

%

%      NM('Property','Value',...) creates a new NM or raises the

%      existing singleton*.  Starting from the left, property value pairs are

%      applied to the GUI before nm_OpeningFcn gets called.  An

%      unrecognized property name or invalid value makes property application

%      stop.  All inputs are passed to nm_OpeningFcn via varargin.

%

%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one

%      instance to run (singleton)".

%

% See also: GUIDE, GUIDATA, GUIHANDLES

 

% Edit the above text to modify the response to help nm

 

% Last Modified by GUIDE v2.5 14-Apr-2014 13:08:45

 

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name',       mfilename, ...

                   'gui_Singleton',  gui_Singleton, ...

                   'gui_OpeningFcn', @nm_OpeningFcn, ...

                   'gui_OutputFcn',  @nm_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

% End initialization code - DO NOT EDIT

 

 

% --- Executes just before nm is made visible.

function nm_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

% hObject    handle to figure

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% varargin   command line arguments to nm (see VARARGIN)

handles.output = hObject;

 

% Update handles structure

guidata(hObject, handles);

 

% UIWAIT makes nm wait for user response (see UIRESUME)

% uiwait(handles.figure1);

 

 

% --- Outputs from this function are returned to the command line.

function varargout = nm_OutputFcn(hObject, eventdata, handles)

% varargout  cell array for returning output args (see VARARGOUT);

% hObject    handle to figure

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

 

% Get default command line output from handles structure

handles.output = hObject;

varargout{1} = handles.output;

 

 

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton1 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

guidata(hObject, handles);

global I;

global X;

global magX;

global angX;

H={'*.wav'};

[filename,pathname]=uigetfile(H,'请选择打开文件');

file=strcat(pathname,filename);

I=wavread(file);

X=fft(I,4096);

magX=abs(X);

angX=angle(X);

axes(handles.axes1)

plot(I);title('原始信号波形');

 

 

 

 

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton2 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

guidata(hObject, handles);

global I;

sound(I);

 

function pushbutton3_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton3 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

guidata(hObject, handles);

global I;

global X;

global magX;

global angX;

X=fft(I,4096);

magX=abs(X);

angX=angle(X);

axes(handles.axes1)

plot(X); title('原始信号频谱');

 

 

% --- Executes on button press in pushbutton4.

function pushbutton4_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton4 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

global I;

global X;

global magX;

global angX;

X=fft(I,4096);

magX=abs(X);

angX=angle(X);

axes(handles.axes1)

plot(magX);title('原始信号幅值');

 

 

% --- Executes on button press in pushbutton5.

function pushbutton5_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton5 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

guidata(hObject, handles);

global I;

global X;

global magX;

global angX;

X=fft(I,4096);

magX=abs(X);

angX=angle(X);

axes(handles.axes1)

plot(angX);title('原始信号相位');

 

% --- Executes on button press in pushbutton7.

function pushbutton7_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton7 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

guidata(hObject, handles);

guidata(hObject, handles);

global Y;

global I;

global magY;

global angY;

Y=wavread('mm.wav');

y=real(fft(Y,4096));

magY=abs(y);

angY=angle(y);

Y=Y+I;

axes(handles.axes1)

plot(Y);title('加噪后信号波形');

 

% --- Executes on button press in pushbutton6.

function pushbutton6_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton6 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

guidata(hObject, handles);

global x;

global y;

global magy;

global fs;

global N;

 

x=wavread('mm.wav');

fs=str2double(get(handles.f1_input,'String'));

N=str2double(get(handles.f2_input,'String'));

y=fft(x,N);

magy=abs(y);

f=(0:length(y)-1)'*fs/length(y);

axes(handles.axes1)

plot(f,magy);

xlabel('频率(Hz');ylabel('幅值');

title('定点分析');

grid

 

 

% --- Executes on button press in pushbutton8.

function pushbutton8_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton8 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

guidata(hObject, handles);

global Y;

global I;

global magY;

global angY;

y=real(fft(Y,4096));

magY=abs(y);

angY=angle(y);

Y=Y+I;

axes(handles.axes1)

plot(y); title('加噪后信号频谱');

 

% --- Executes on button press in pushbutton9.

function pushbutton9_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton9 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

guidata(hObject, handles);

global Y;

global I;

global magY;

global angY;

y=real(fft(Y,4096));

magY=abs(y);

angY=angle(y);

Y=Y+I;

axes(handles.axes1)

plot(magY);title('加噪后信号幅值');

 

 

% --- Executes on button press in pushbutton10.

function pushbutton10_Callback(hObject,eventdata,  handles)

% hObject    handle to pushbutton10 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

guidata(hObject, handles);

global Y;

global I;

global magY;

global angY;

y=real(fft(Y,4096));

magY=abs(y);

angY=angle(y);

Y=Y+I;

axes(handles.axes1)

plot(angY);title('加噪后信号相位');

 

 

% --- Executes on button press in pushbutton11.

function pushbutton11_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton11 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

global Y;

global Z;

global magZ;

global angZ;

b=100;a=5;

z=filter(a,b,Y);

Z=fft(z,4096);

magZ=abs(Z);

angZ=angle(Z);

axes(handles.axes1)

plot(z);title('FIR滤波后信号波形');

 

 

% --- Executes on button press in pushbutton12.

function pushbutton12_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton12 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

global Y;

global Z;

global magZ;

global angZ;

b=100;a=5;

z=filter(a,b,Y);

Z=fft(z,4096);

magZ=abs(Z);

angZ=angle(Z);

axes(handles.axes1)

plot(Z); title('FIR滤波后信号频谱');

 

 

% --- Executes on button press in pushbutton13.

function pushbutton13_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton13 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

global Y;

global Z;

global magZ;

global angZ;

b=100;a=5;

z=filter(a,b,Y);

Z=fft(z,4096);

magZ=abs(Z);

angZ=angle(Z);

axes(handles.axes1)

plot(magZ);title('FIR滤波后信号幅值');

 

% --- Executes on button press in pushbutton14.

function pushbutton14_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton14 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

global Y;

global Z;

global magZ;

global angZ;

b=100;a=5;

z=filter(a,b,Y);

Z=fft(z,4096);

magZ=abs(Z);

angZ=angle(Z);

axes(handles.axes1)

plot(angZ);title('FIR滤波后信号相位');

 

 

% --- Executes on button press in pushbutton15.

function pushbutton15_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton15 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

global Y;

global Z;

global magZ;

global angZ;

global b;

global z;

Y=wavread('mm.wav');

b=4;

z=fftfilt(b,Y);

Z=fft(z,4096);

magZ=abs(Z);

angZ=angle(Z);

axes(handles.axes1)

plot(z);title('IIR滤波后信号波形');

 

 

% --- Executes on button press in pushbutton16.

function pushbutton16_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton16 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

global Y;

global Z;

global magZ;

global angZ;

global z;

b=4;

z=fftfilt(b,Y);

Z=fft(z,4096);

magZ=abs(Z);

angZ=angle(Z);

axes(handles.axes1)

plot(Y);title('IIR滤波后信号的频谱');

 

 

% --- Executes on button press in pushbutton17.

function pushbutton17_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton17 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

global Y;

global Z;

global magZ;

global angZ;

global z;

b=4;

z=fftfilt(b,Y);

Z=fft(z,4096);

magZ=abs(Z);

angZ=angle(Z);

axes(handles.axes1)

plot(magZ);title('IIR滤波后信号幅值');

 

 

% --- Executes on button press in pushbutton18.

function pushbutton18_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton18 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

 

global Y;

global Z;

global magZ;

global angZ;

global z;

b=4;

z=fftfilt(b,Y);

Z=fft(z,4096);

magZ=abs(Z);

angZ=angle(Z);

axes(handles.axes1)

plot(angZ);title('IIR滤波后信号相位');

 

 

function f1_input_Callback(hObject, eventdata, handles)

% hObject    handle to f1_input (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

 

% Hints: get(hObject,'String') returns contents of f1_input as text

%        str2double(get(hObject,'String')) returns contents of f1_input as a double

 

 

% --- Executes during object creation, after setting all properties.

function f1_input_CreateFcn(hObject, eventdata, handles)

% hObject    handle to f1_input (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    empty - handles not created until after all CreateFcns called

 

% Hint: edit controls usually have a white background on Windows.

%       See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

end

 

 

 

function f2_input_Callback(hObject, eventdata, handles)

% hObject    handle to f2_input (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

 

% Hints: get(hObject,'String') returns contents of f2_input as text

%        str2double(get(hObject,'String')) returns contents of f2_input as a double

 

 

% --- Executes during object creation, after setting all properties.

function f2_input_CreateFcn(hObject, eventdata, handles)

% hObject    handle to f2_input (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    empty - handles not created until after all CreateFcns called

 

% Hint: edit controls usually have a white background on Windows.

%       See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

end