课程设计---基于MATLAB的FIR滤波器设计
- 格式:doc
- 大小:109.50 KB
- 文档页数:10
matlabfir滤波器设计MATLAB是一个高级编程语言和交互式环境,被广泛应用于各种科学和工程问题的数值分析、数据可视化和编程开发等领域。
FIR滤波器是数字信号处理中经常使用的一种滤波器,它是基于有限长冲激响应的滤波器。
在MATLAB平台上,我们可以使用fir1函数来设计FIR滤波器。
一、FIR滤波器设计基础1.1 什么是FIR滤波器FIR滤波器是有限长冲激响应滤波器,由于其具有线性相位特性和可控阶数等优点,在数字信号处理中得到了广泛的应用。
一般来说,FIR滤波器的频率响应特性由滤波器的系数函数确定。
FIR滤波器的设计一般采用窗函数法、最小二乘法、频率抽取法等方法。
窗函数法是最常见的一种方法,大部分情况下选择的是矩形窗、汉宁窗、布莱克曼窗等。
1.3 fir1函数介绍fir1函数是MATLAB中用于FIR滤波器设计的函数,用法为:h = fir1(N, Wn, type)N为滤波器的阶数,Wn是用于指定滤波器截止频率的参数,type指定滤波器类型,可以是低通、高通、带通、带阻等。
二、使用fir1函数设计FIR滤波器2.1 设计要求采样率为300Hz;滤波器阶数为50;截止频率为50Hz。
2.2 实现步骤(1)计算规范化截止频率规范化截止频率是指在数字滤波器设计中使用的无单位量,通常范围为0到1。
在本例中,我们需要将50Hz的截止频率转化为规范化截止频率。
Wn = 2*50/300 = 1/3根据计算出的规范化截止频率和滤波器阶数,我们可以使用fir1函数来进行滤波器设计。
此处滤波器的阶数为50,规范化截止频率为1/3,类型为低通。
(3)绘制滤波器的幅频响应图为了验证设计的低通FIR滤波器是否符合要求,我们需要绘制其幅频响应图。
freqz(h,1,1024,300)经过上述步骤后,我们就得到了一张低通FIR滤波器的幅频响应图,如下图所示:图1.低通FIR滤波器的幅频响应图三、总结通过上述例子,我们可以看出在MATLAB中与fir1函数可以非常方便的进行FIR滤波器的设计。
EDA课程设计报告滤波器设计参数:根据要求,要设计一个输入8位,输出8位的17阶线性相位FIR滤波器,所以采用图2(a)的方式,其中输入信号范围为:[±99,0,0,0,±70,0,0,0,±99,0,0,0,±70,…],此滤波器Fs为44kHz,Fc 为10.4kHz。
(一)FIR数字滤波器理论简述有限冲激响应(FIR)数字滤波器和无限冲激响应(IIR)数字滤波器广泛应用于数字信号处理系统中。
IIR数字滤波器方便简单,但它相位的非线性,要求采用全通网络进行相位校正,且稳定性难以保障。
FIR滤波器具有很好的线性相位特性,使得它越来越受到广泛的重视。
有限冲击响应(FIR)滤波器的特点:1 既具有严格的线性相位,又具有任意的幅度;2 FIR滤波器的单位抽样响应是有限长的,因而滤波器性能稳定;3只要经过一定的延时,任何非因果有限长序列都能变成因果的有限长序列,因而能用因果系统来实现;4 FIR滤波器由于单位冲击响应是有限长的,因而可用快速傅里叶变换(FFT)算法来实现过滤信号,可大大提高运算效率。
5 FIR也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要。
6 FIR滤波器比较大的缺点就是阶次相对于IIR滤波器来说要大很多。
FIR数字滤波器是一个线性时不变系统(LTI),N阶因果有限冲激响应滤波器可以用传输函数H(z)来描述,0()()N k k H z h k z -==∑(0.1)在时域中,上述有限冲激响应滤波器的输入输出关系如下:0[][][][][]N k y n x n h n x k h n k ==*=-∑(0.2)其中,x [n ]和y [n ]分别是输入和输出序列。
N 阶有限冲激响应滤波器要用N +1个系数描述,通常要用N+1个乘法器和N 个两输入加法器来实现。
乘法器的系数正好是传递函数的系数,因此这种结构称为直接型结构,可通过式(1.2)来实现,如图1。
一、引言数字滤波器是数字信号处理中至关重要的组成部分,它能够对数字信号进行滤波处理,去除噪音和干扰,提取信号中的有效信息。
其中,fir数字滤波器作为一种常见的数字滤波器类型,具有稳定性强、相位响应线性等特点,在数字信号处理领域得到了广泛的应用。
本文将基于matlab软件,探讨fir数字滤波器的设计原理、方法和实现过程,以期能够全面、系统地了解fir数字滤波器的设计流程。
二、fir数字滤波器的基本原理fir数字滤波器是一种有限长冲激响应(finite impulse response, FIR)的数字滤波器,其基本原理是利用线性相位特性的滤波器来实现对数字信号的筛选和处理。
fir数字滤波器的表达式为:$$y(n) = \sum_{k=0}^{M}h(k)x(n-k)$$其中,y(n)为输出信号,x(n)为输入信号,h(k)为滤波器的系数,M为滤波器的长度。
fir数字滤波器的频率响应特性由其系数h(k)决定,通过设计合适的系数,可以实现对不同频率成分的滤波效果。
三、fir数字滤波器的设计方法fir数字滤波器的设计方法主要包括窗函数法、频率抽样法、最小最大法等。
在matlab中,可以通过信号处理工具箱提供的fir1函数和firls函数等来实现fir数字滤波器的设计。
下面将分别介绍这两种设计方法的基本原理及实现步骤。
1. 窗函数法窗函数法是fir数字滤波器设计中最为常见的方法之一,其基本原理是通过对理想滤波器的频率响应进行窗函数加权来满足设计要求。
在matlab中,可以使用fir1函数实现fir数字滤波器的设计,其调用格式为:h = fir1(N, Wn, type)其中,N为滤波器的阶数,Wn为滤波器的截止频率,type为窗函数的类型。
通过调用fir1函数,可以灵活地设计出满足特定要求的fir数字滤波器。
2. 频率抽样法频率抽样法是fir数字滤波器设计中的另一种重要方法,其基本原理是在频域上对理想滤波器的频率响应进行抽样,并拟合出一个最优的滤波器。
FIR滤波器设计一.设计思路录取一个音频,导入MATLAB中。
然后,在MATLAB程序输入时加入一个噪声信号,利用窗函数法设计FIR滤波器低通滤波器把这个噪声滤去。
得到的图形有加噪前音频的时域图、频域图;加噪后音频的时域图、频域图;滤波器的增益响应图;滤波后的时域图、频域图。
具体的工作流程如下图所示:二.具体步骤第一步:采集语音信号用Windows 自带的录音程序录音:“开始--程序--附件--录音机”,随便播放一段音频(一般为5~6秒),并保存。
将此音频在千千静听中打开,并以W A V格式转换保存,以便在MATLAB中使用。
本设计采用的音频是陈奕迅的爱情转移(文件名aqzy),格式保存为W A V,时间为8秒。
第二步:输出加噪前的音频、及加噪后的音频f=5000;[Y,fs,bits]=wavread('F:\aqzy.wav');%利用wavread产生音频的函数及采样频率L=length(Y);t=0:1/fs:(L-1)/fs;%定义时间的范围及步长y=0.005*sin(3*pi*f*t);; n1=floor(L/3);%所加噪声f1=(0:n1)*fs/L;Y=Y(:,1);sound(Y,fs);%输出加噪前音频Y1=y+Y';%给音频加噪声FY1=abs(fft(Y1,L));FY=abs(fft(Y,L));sound(Y1,fs);%输出加噪后的音频第三部:加噪前音频的时域图、频域图figure(1)subplot(211)plot(t(1:1000),Y(1:1000)); grid on;%加噪前音频的时域图xlabel('时间(t)');ylabel('幅度(Y)');title('加噪前录音波形的时域图');subplot(212)plot(f1,FY(1:n1+1)); grid on;%加噪前音频的频域图 xlabel('频率(f)');ylabel('幅度(FY)'); title('加噪前录音波形的频域图'); figure(2)0.0050.010.0150.020.025-1-0.500.51时间(t)幅度(Y )加噪前录音波形的时域图050001000015000200040006000频率(f)幅度(F Y )加噪前录音波形的频域图第四步:加噪后音频的时域图、频域图subplot(211)plot(t(1:1000),Y1(1:1000)); grid on;%加噪后音频的时域图 xlabel('时间(t)');ylabel('幅度(Y1)'); title('加噪声后录音波形的时域图'); subplot(212)plot(f1,FY1(1:n1+1)); grid on;%加噪后音频的频域图 xlabel('频率(f)');ylabel('幅度(FY1)'); title('加噪声后录音波形的频域图');00.0050.010.0150.020.025-55x 10-3时间(t)幅度(Y 1)加噪声后录音波形的时域图050001000015000200040006000频率(f)幅度(F Y 1)加噪声后录音波形的频域图第五步:滤波器的增益响应图m=0.03; M=round(8/m); N=M-1;%定义滤波器的阶数 b=fir1(N,0.6); figure(3)[h,f]=freqz(b,1,512);%滤波器的幅频特性图plot(f*fs/(2*pi),20*log10(abs(h)))%参数分别是频率与幅值xlabel('频率/赫兹');ylabel('增益/分贝');title('滤波器的增益响应'); figure(4)00.511.522.5x 104-140-120-100-80-60-40-20020频率/赫兹增益/分贝滤波器的增益响应第六步:滤波后的时域图、频域图及滤波后的音频sf=filter(b,1,Y1);%使用filter 函数对信号进行滤波 Fsf=abs(fft(sf,L)); subplot(211)plot(t(1:1000),sf(1:1000)); grid on;%滤波后音频的时域图 xlabel('时间(t)');ylabel('幅度(sf)'); title('滤波后录音波形的时域图'); axis([0.01 0.05 -0.002 0.002]) subplot(212)plot(f1,Fsf(1:n1+1)); grid on;%滤波后音频的频域图 xlabel('频率(f)');ylabel('幅度(Fsf)');title('滤波后录音波形的频域图');sound(sf,fs);0.010.0150.020.0250.030.0350.040.0450.05-3时间(t)幅度(s f )滤波后录音波形的时域图050001000015000200040006000频率(f)幅度(F s f )滤波后录音波形的频域图三.小结用窗函数设FIR 滤波器的基本思路:从时域出发设计 h(n)逼近理想 hd(n)。
基于MATLAB设计FIR滤波器FIR(Finite Impulse Response)滤波器是一种数字滤波器,它具有有限的冲激响应长度。
基于MATLAB设计FIR滤波器可以使用signal工具箱中的fir1函数。
fir1函数的语法如下:b = fir1(N, Wn, window)其中,N是滤波器的阶数,Wn是截止频率,window是窗函数。
要设计一个FIR低通滤波器,可以按照以下步骤进行:步骤1:确定滤波器的阶数。
阶数决定了滤波器的截止频率的陡峭程度。
一般情况下,阶数越高,滤波器的陡峭度越高,但计算复杂度也会增加。
步骤2:确定滤波器的截止频率。
截止频率是指在滤波器中将信号的频率限制在一定范围内的频率。
根据应用的需求,可以选择适当的截止频率。
步骤3:选择窗函数。
窗函数是为了在时域上窗口函数中心增加频率衰减因子而使用的函数。
常用的窗函数有Hamming、Hanning等。
窗函数可以用来控制滤波器的幅度响应特性,使得它更平滑。
步骤4:使用fir1函数设计滤波器。
根据以上步骤确定滤波器的阶数、截止频率和窗函数,可以使用fir1函数设计FIR滤波器。
具体代码如下:N=50;%设定阶数Wn=0.5;%设定截止频率window = hanning(N + 1); % 使用Hanning窗函数步骤5:使用filter函数对信号进行滤波。
设计好FIR滤波器后,可以使用filter函数对信号进行滤波。
具体代码如下:filtered_signal = filter(b, 1, input_signal);其中,input_signal是输入信号,filtered_signal是滤波后的信号。
以上,便是基于MATLAB设计FIR滤波器的简要步骤和代码示例。
根据具体需求和信号特性,可以进行相应的调整和优化。
基于MATLAB的FIR和IIR数字滤波器的设计一、本文概述随着数字信号处理技术的飞速发展,数字滤波器作为其中的核心组件,已经广泛应用于通信、音频处理、图像处理、生物医学工程等诸多领域。
在数字滤波器中,有限脉冲响应(FIR)滤波器和无限脉冲响应(IIR)滤波器是最常见的两种类型。
它们各自具有独特的优点和适用场景,因此,对这两种滤波器的深入理解和设计掌握是工程师和研究人员必备的技能。
本文旨在通过MATLAB这一强大的工程计算工具,详细介绍FIR 和IIR数字滤波器的设计原理、实现方法以及对比分析。
我们将简要回顾数字滤波器的基本概念和分类,然后重点阐述FIR和IIR滤波器的设计理论,包括窗函数法、频率采样法、最小均方误差法等多种设计方法。
接下来,我们将通过MATLAB编程实现这些设计方法,并展示如何根据实际应用需求调整滤波器参数以达到最佳性能。
本文还将对FIR和IIR滤波器进行性能对比,分析它们在不同应用场景下的优缺点,并提供一些实用的设计建议。
我们将通过几个典型的应用案例,展示如何在MATLAB中灵活应用FIR和IIR滤波器解决实际问题。
通过阅读本文,读者将能够深入理解FIR和IIR数字滤波器的设计原理和实现方法,掌握MATLAB在数字滤波器设计中的应用技巧,为未来的工程实践和研究工作打下坚实的基础。
二、FIR滤波器设计有限脉冲响应(FIR)滤波器是一种数字滤波器,其特点是其脉冲响应在有限的时间后为零。
因此,FIR滤波器是非递归的,没有反馈路径,从而保证了系统的稳定性。
在设计FIR滤波器时,我们主要关注的是滤波器的阶数、截止频率和窗函数的选择。
在MATLAB中,有多种方法可以用来设计FIR滤波器。
其中,最常用的方法是使用fir1函数,该函数可以设计一个线性相位FIR滤波器。
该函数的基本语法是b = fir1(n, Wn),其中n是滤波器的阶数,Wn是归一化截止频率,以π为单位。
该函数返回一个长度为n+1的滤波器系数向量b。
基于MATLAB与CCS的FIR滤波器设计与实现FIR滤波器(Finite Impulse Response Filter)是一种常用的数字滤波器,特点是系统的冲激响应为有限长度,所以也称为有限冲激响应滤波器。
FIR滤波器具有线性相位特性、较好的频率响应控制以及稳定性等优点。
在MATLAB和CCS软件中,我们可以使用不同的方法来设计和实现FIR滤波器。
首先,我们来介绍如何在MATLAB中设计和实现FIR滤波器。
MATLAB 提供了fir1函数来设计FIR滤波器。
该函数可以根据给定的滤波器阶数和截止频率来生成FIR滤波器系数。
例如,如果我们想设计一个截止频率为0.2的10阶低通FIR滤波器,可以使用以下代码:```MATLABorder = 10; % 滤波器阶数cutoff = 0.2; % 截止频率b = fir1(order, cutoff); % 设计FIR滤波器```生成的滤波器系数b可以用于过滤输入信号。
例如,我们可以使用filter函数将一个输入信号x通过滤波器进行滤波:```MATLABx=...;%输入信号y = filter(b, 1, x); % 通过滤波器滤波```在CCS软件中,我们可以使用DSP/BIOS中提供的模块来实现FIR滤波器。
首先,我们需要在CCS中创建一个新的项目,然后配置DSP/BIOS Kernel环境。
接下来,我们可以使用DSP/BIOS中的算法库或者自定义算法实现FIR滤波器。
使用DSP/BIOS的算法库有两种方式,分别是使用C语言和使用Simulink。
如果我们选择使用C语言,可以使用DSPLIB函数库中的fir 函数来实现FIR滤波器。
fir函数需要提供滤波器系数和输入信号,然后它会返回滤波后的输出信号。
例如,以下是使用C语言实现FIR滤波器的示例代码:```C#include <dsplib.h>float x[N]; // 输入信号float b[M]; // 滤波器系数float y[N]; // 输出信号FIR_firGen(M, b); // 生成滤波器系数for (int i = 0; i < N; i++)y[i] = FIR_fir(x[i], b, M); // 滤波```如果我们选择使用Simulink,可以使用Simulink中提供的滤波器模块构建FIR滤波器。
基于Matlab的FIR滤波器设计与实现⼀、摘要 前⾯⼀篇⽂章介绍了通过FDATool⼯具箱实现滤波器的设计,见“”,这⾥通过⼏个例⼦说明采⽤Matlab语⾔设计FIR滤波器的过程。
⼆、实验平台 Matlab7.1三、实验原理 以低通滤波器为例,其常⽤的设计指标有:1. 通带边缘频率f p(数字频率为Ωp)2. 阻带边缘频率f st (数字频率为Ωst)3. 通带内最⼤纹波衰减δp=-20log10(1-αp),单位为 dB4. 阻带最⼩衰减αs=-20log10(αs),单位为 dB5. 阻带起伏αs6. 通带峰值起伏αp 其中,以1、2、3、4条最为常⽤。
5、6条在程序中估算滤波器阶数等参数时会⽤到。
数字频率 = 模拟频率/采样频率四、实例分析例1 ⽤凯塞窗设计⼀FIR低通滤波器,通带边界频率Ωp=0.3pi,阻带边界频率Ωs=0.5pi,阻带衰减δs不⼩于50dB。
⽅法⼀:⼿动计算滤波器阶数N和β值,之后在通过程序设计出滤波器。
第⼀步:通过过渡带宽度和阻带衰减,计算滤波器的阶数B和β值。
第⼆步:通过程序设计滤波器。
程序如下:b = fir1(29,0.4,kaiser(30,4.55));[h1,w1]=freqz(b,1);plot(w1/pi,20*log10(abs(h1)));axis([0,1,-80,10]);grid;xlabel('归⼀化频率/p') ;ylabel('幅度/dB') ;波形如下:⽅法⼆:采⽤[n,Wn,beta,ftype] = kaiserord(f,a,dev)函数来估计滤波器阶数等,得到凯塞窗滤波器。
这⾥的函数kaiserord(f,a,dev)或者kaiserord(f,a,dev,f s): f为对应的频率,f s为采样频率;当f⽤数字频率表⽰时,f s则不需要写。
a=[1 0]为由f指定的各个频带上的幅值向量,⼀般只有0和1表⽰;a和f长度关系为(2*a的长度)- 2=(f的长度) devs=[0.05 10^(-2.5)]⽤于指定各个频带输出滤波器的频率响应与其期望幅值之间的最⼤输出误差或偏差,长度与a相等,计算公式:阻带衰减误差=αs,通带衰减误差=αp,可有滤波器指标中的3、4条得到。
FIR滤波器的MATLAB设计与实现FIR滤波器(Finite Impulse Response Filter)是一种数字滤波器,其特点是其响应仅由有限长度的序列决定。
在MATLAB中,我们可以使用信号处理工具箱中的函数来设计和实现FIR滤波器。
首先,需要明确FIR滤波器的设计目标,包括滤波器类型(低通、高通、带通、带阻)、通带和阻带的频率范围、通带和阻带的增益等。
这些目标将决定滤波器的系数及其顺序。
在MATLAB中,我们可以使用`fir1`函数来设计FIR滤波器。
该函数的使用方式如下:```matlabh = fir1(N, Wn, type);```其中,`N`是滤波器长度,`Wn`是通带边缘频率(0到0.5之间),`type`是滤波器的类型('low'低通、'high'高通、'bandpass'带通、'stop'带阻)。
该函数会返回一个长度为`N+1`的滤波器系数向量`h`。
例如,如果要设计一个采样频率为10kHz的低通滤波器,通带截止频率为2kHz,阻带频率为3kHz,可以使用以下代码:```matlabfc = 2000; % 通带截止频率h = fir1(50, fc/(fs/2), 'low');```上述代码中,`50`表示滤波器的长度。
注意,滤波器的长度越大,滤波器的频率响应越陡峭,但计算成本也更高。
在设计完成后,可以使用`freqz`函数来分析滤波器的频率响应。
例如,可以绘制滤波器的幅度响应和相位响应曲线:```matlabfreqz(h);```除了使用`fir1`函数外,MATLAB还提供了其他函数来设计FIR滤波器,如`fir2`、`firpm`、`firls`等,具体使用方式可以参考MATLAB的文档。
在实际应用中,我们可以将FIR滤波器应用于音频处理、图像处理、信号降噪等方面。
例如,可以使用FIR滤波器对音频信号进行去噪处理,或者对图像进行锐化处理等。
《基于MATLAB的FIR滤波器设计》
课程设计报告
专业:通信工程
班级:
学号:
姓名:
指导教师:
2010 年6 月30 日
目录
一、概述 (3)
1、设计目的 (3)
2、设计要求 (3)
3、系统功能 (3)
二、滤波器原理 (3)
三、软件设计流程 (5)
1、语音信号的采集 (5)
2、语音信号的频谱分析 (5)
3、用滤波器对语音信号进行分析 (5)
4、回放语音信号 (6)
四、源程序代码及整体波形 (6)
五、总结 (8)
一、概述
1)设计目的
通过对课程设计任务的完成,使我们进一步巩固数字信号处理的基本概念、理论、分析方法和实现方法;使掌握的基本理论和分析方法方面的知识得到进一步扩展;能有效地将理论和实际紧密结合;增强学生软件编程实现能力和解决实际问题的能力。
2)设计要求
1、认真独立的完成课程设计。
2、通过课程设计,加深对所学知识的理解和认识。
3、仿真调试通过,达到预期效果。
4、写出设计报告。
3)系统功能
因对语音信号加噪后如不进行滤波会产生很大的失真,滤波器的作用会把滤波器工作频率以外的频谱成分滤除掉,可较好的回复原语音信号,滤波器的作用在实际工作中的作用也如此,如要传输的信号通过信道后会叠加上高斯白噪声,在解调之前可先通过BPF滤除BPF以外的噪声。
二、滤波器原理
1)FIR和IIR数字滤波器的选择
数字滤波器根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即无限冲击响应IIR滤波器和有限冲击响应FIR滤波器。
IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。
其设计步骤是:先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。
FIR滤波器必须采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。
对于线性相位滤波器,经常采用FIR滤波器。
FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在极点处收敛,极点全部在z = 0处(因果系统),因而只能用较高
的阶数达到高的选择性。
FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频率分量的信号经过FIR滤波器后他们的时间差不变,这是很好的性质。
FIR数字滤波器是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要。
FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通带(或多阻带)滤波器等优点收到人们的青睐。
IIR滤波器采用递归型结构,即结构上带有反馈环路。
IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。
同时,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
本次设计中采用的是IIR滤波器,IIR数字滤波器的幅频特性精度较高,且阶数较FIR低,同时,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等。
本次设计中接住了巴特沃斯滤波器的设计。
2)FIR滤波器的程序设计
由频谱图可以看出信号能量集中在低频部分,为了减少无用的高频分量我设计了以下的FIR低通滤波器将其滤除。
该设计采用窗函数法来完成以下指标的低通滤波器。
通带截频fp=3000Hz,阻带截频fs=3500Hz,通带最大衰减0.3dB,阻带最小衰减50dB,采样频率fs为信号源采样频率22050Hz。
源程序如下:
fs=22050;%信号的采样频率
fc1=1500;%基带信号频率
wc1=2*pi*fc1/fs;%相对角频率
wp1=2*pi*1000/fs;ws1=2*pi*1200/fs;
N1=ceil(200*2*pi/ws1-wp1);
Window=boxcar(N1+1); %长度为N1的矩形窗Window
b1=fir1(N1,wc1/pi,Window);
figure(1);
freqz(b1,1,512); %绘制滤波器的幅频响应图
title('低通滤波器的频率响应');
00.10.20.30.40.50.60.70.80.91
x 10
4Normalized Frequency (⨯π rad/sample)P h a s e (d e g r e e s )0
0.10.20.30.40.50.60.70.80.91
-150-100
-50
50
Normalized Frequency (⨯π rad/sample)M a g n i t u d e (d B )低通滤波器的频率响应
三、软件设计流程
1、语音信号的采集
利用Windows 下的录音机, 录制一段自己的话音, 时间在几秒内。
然后在Matlab 软件平台下, 利用函数wavread 对语音信号进行采样, 记住采样频率和采样点数。
[x,fs,bits]=wavread();
2、语音信号的频谱分析
首先画出语音信号的时域波形, 然后对语音信号进行频谱分析。
在Matlab 中, 可以利用函数fft 对信号进行快速傅里叶变换, 得到信号的频谱特性。
3、用滤波器对语音信号进行滤波
设计滤波器对采集的信号进行滤波, 比较滤波前后语音信号的波形及频谱。
要求自己确定滤波器的性能指标,用冲激响应不变法、双线性变换法或窗函数法设计低通滤波器。
4、回放语音信号
在Matlab中, 函数sound 可以对声音进行回放,其调用格式: sound (x, fs, bits);
四、源程序代码及整体波形
1.程序代码:
fs=8000;
fc1=1500;
wc1=2*pi*fc1/fs;
wp1=2*pi*1000/fs;ws1=2*pi*1200/fs;
N1=ceil(200*2*pi/ws1-wp1);
Window=boxcar(N1+1); %长度为N1的矩形窗Window
b1=fir1(N1,wc1/pi,Window);
figure(1);
freqz(b1,1,512);
title('低通滤波器的频率响应');
[x,fs,bits]=wavread('D:/音乐/录音.wav');%信号读取
N= length (x) ; %求出语音信号的长度
%sound(x,fs,nbits); %回放语音信号
X=fft(x,N);
figure(2)%傅里叶变换
subplot(211);
plot(x);title('原始信号波形');
subplot(212);
plot(abs(X));
title('原始信号频谱')
sound(x,fs);
Si=awgn(x,40)
figure(3)
subplot(211);
plot(Si)
title('加噪语音信号的时域波形');
y1=fft(Si);
subplot(212)
plot(abs(y1));
title('加噪信号的频谱');
y=filter(b1,1,Si); %滤波输出figure(4)
%绘制输入信号
subplot(2,1,1); plot(Si),title('输入信号')
%绘制输出信号
subplot(2,1,2);plot(y)
title('输出信号')
sound(y,fs);
%输入输出频谱
X=fft(Si);
Y=fft(y);
figure(5);
subplot(2,1,1);plot(abs(X));
xlabel('频率');ylabel('幅度');
title('输入信号频谱');grid on;
subplot(2,1,2);plot(abs(Y));
xlabel('频率');ylabel('幅度');
title('输出信号频谱');grid on;
2.图形:
五、设计总结
通过此次课程设计,让我了解到数字滤波是数字信号分析中最重要的组成部分之一,它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等优点。
同时了解到MATLAB具有许多的优点比如:语言简洁紧凑,使用方便灵活,库函数极其丰富;以及面向对象编程的特性。