matlab中关于数字滤波器的函数介绍
- 格式:doc
- 大小:49.00 KB
- 文档页数:8
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滤波器的设计。
Matlab中FFT滤波1. 介绍在数字信号处理中,滤波是一种常见的信号处理技术,用于去除信号中的噪声或不需要的频率成分。
傅里叶变换(Fourier Transform)是一种将信号从时域转换到频域的方法,而FFT(Fast Fourier Transform)是一种高效的实现傅里叶变换的算法。
在Matlab中,我们可以利用FFT进行信号滤波,以去除噪声或选择特定的频率成分。
本文将详细介绍在Matlab中使用FFT进行滤波的步骤和相关知识。
2. FFT基本原理FFT是一种高效的算法,用于将离散时间域信号转换为离散频率域信号。
它基于傅里叶变换的思想,将一个信号分解为一系列正弦和余弦函数的加权和。
FFT的基本原理如下: 1. 将离散时间域信号分成偶数和奇数点序列。
2. 对偶数点序列进行FFT变换得到频域的偶数点序列。
3. 对奇数点序列进行FFT变换得到频域的奇数点序列。
4. 将偶数点序列和奇数点序列按照一定规则合并,得到完整的频域信号。
3. Matlab中的FFT函数在Matlab中,我们可以使用fft函数进行FFT变换。
fft函数的基本语法如下:Y = fft(X)其中,X是输入的离散时间域信号,Y是输出的离散频率域信号。
4. Matlab中的滤波器设计在进行FFT滤波之前,我们需要设计一个滤波器。
滤波器可以是低通滤波器、高通滤波器或带通滤波器,用于选择特定的频率成分或去除不需要的频率成分。
Matlab提供了多种方法来设计滤波器,包括IIR滤波器(Infinite Impulse Response)和FIR滤波器(Finite Impulse Response)。
其中,FIR滤波器是一种常用的线性相位滤波器,具有较好的频率响应和相位特性。
在Matlab中,我们可以使用fir1函数来设计FIR滤波器。
fir1函数的基本语法如下:b = fir1(N, Wn, type)其中,N是滤波器阶数,Wn是归一化的截止频率,type是滤波器类型(例如,’low’表示低通滤波器)。
利用MATLAB设计巴特沃斯低通数字滤波器引言数字滤波器是数字信号处理中的重要组成部分,可以用于去除信号中的噪音和不需要的频率成分。
巴特沃斯滤波器是一种常见的数字滤波器,被广泛应用于信号处理领域。
本文将介绍如何利用MATLAB设计巴特沃斯低通数字滤波器,并给出详细的步骤和示例代码。
设计步骤利用MATLAB设计巴特沃斯低通数字滤波器主要包括以下步骤:1.设计滤波器的参数2.计算滤波器的传递函数3.绘制滤波器的幅频响应曲线4.通过频域图像观察滤波器的性能下面将分别介绍每个步骤的详细操作。
设计滤波器的参数巴特沃斯低通数字滤波器的参数包括截止频率和阶数。
截止频率决定了滤波器的通频带,阶数决定了滤波器的陡峭程度。
通过MATLAB的butter()函数可以方便地设计巴特沃斯低通数字滤波器。
该函数的参数为滤波器的阶数和截止频率。
示例代码如下:order = 4; % 阶数cutoff_freq = 0.4; % 截止频率[b, a] = butter(order, cutoff_freq);计算滤波器的传递函数通过设计参数计算得到滤波器的传递函数。
传递函数是一个复数,包括了滤波器的频率响应信息。
使用MATLAB的freqz()函数可以计算滤波器的传递函数。
该函数的参数为滤波器的系数b和a,以及频率取样点的数量。
示例代码如下:freq_points = 512; % 频率取样点数量[h, w] = freqz(b, a, freq_points);绘制滤波器的幅频响应曲线经过计算得到的传递函数能够提供滤波器的幅频响应信息。
通过绘制幅频响应曲线,可以直观地观察滤波器的频率特性。
使用MATLAB的plot()函数可以绘制滤波器的幅频响应曲线。
该函数的参数为频率点和传递函数的幅值。
示例代码如下:magnitude = abs(h); % 幅值plot(w/pi, magnitude);xlabel('归一化频率');ylabel('幅值');title('巴特沃斯低通数字滤波器幅频响应');通过频域图像观察滤波器的性能通过绘制滤波器的频域图像,可以直观地观察滤波器对不同频率的信号的响应情况。
Matlab中产⽣信号滤波器的函数1 filter功能:直接II型滤波器。
格式:y = filter(b,a,x)[y,zf] = filter(b,a,x)[...] = filter(b,a,x,zi)[...] = filter(b,a,x,zi,dim)说明:y = filter(b,a,x)计算输⼊信号x的滤波输出y,b、a分别为滤波器传递函数的分⼦和分母系数向量(按降幂排列)。
[y,zf] = filter(b,a,x)返回最终的状态向量zf。
[...] = filter(b,a,x,zi)指定了滤波器的初始条件zi。
举例:计算低通滤波器的冲激响应x = [1 zeros(1,100)];[b,a] = butter(12,400/1000);y = filter(b,a,x);stem(y)2 filtic功能:为滤波器的直接II型实现选择初始条件。
格式:z = filtic(b,a,y,x)z = filtic(b,a,y)说明:z = filtic(b,a,y,x)为直接II型滤波器(b,a)选择初始条件z,b、a分别为滤波器传递函数的分⼦和分母系数向量(按降幂排列)。
x和y分别为以前的输⼊和输出。
z = filtic(b,a,y)中假定x为0。
3 fftfilt功能:基于FFT和重叠相加法的FIR滤波。
格式:y = fftfilt(b,x)y = fftfilt(b,x,n)说明:y = fftfilt(b,x)返回信号x经滤波器b滤波后的结果y。
b为滤波器的系数向量。
函数所采⽤的FFT长度为nfft = 2^nextpow2(n),数据块的长度为nfft –length(b)+1,其中nextpow2(n)函数返回⼤于n的最⼩2的幂。
4 filtfilt功能:零相位数字滤波。
格式:y = filtfilt(b,a,x)说明:y = filtfilt(b,a,x)对输⼊信号x做前向和反向处理,实现零相位数字滤波。
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中陷波滤波器是一种常用的数字滤波器类型,它可以在频率响应中实现零点和极点的传递函数形式。
在MATLAB中,我们可以通过不同的方法来表示陷波滤波器的传递函数,下面将详细介绍这些方法和表达形式。
一、传递函数的标准形式表示在MATLAB中,陷波滤波器的传递函数通常使用标准的二阶形式表示。
其传递函数表达形式如下所示:H(z) = (1 - a*exp(j*theta))/(1 - a*exp(-j*theta))其中,a是零点的半径,theta是零点的角度。
这种形式的传递函数可以很方便地在MATLAB中进行表达和处理。
二、传递函数的分子-分母形式表示除了标准形式之外,我们还可以使用传递函数的分子-分母形式来表示陷波滤波器的传递函数。
这种形式的传递函数可以更直观地表达零点和极点的位置,有助于分析滤波器的性能。
其表达形式如下:H(z) = b(z)/a(z)其中,b(z)表示传递函数的分子多项式,a(z)表示传递函数的分母多项式。
通过这种形式,我们可以方便地对滤波器进行频域和时域的分析。
三、传递函数的零极点形式表示另外,我们还可以使用传递函数的零极点形式来表示陷波滤波器的传递函数。
这种形式可以更直观地展示滤波器的零点和极点位置,方便我们对滤波器进行分析和设计。
其表达形式如下:[z, p, k] = tf2zp(b, a)其中,b和a分别表示传递函数的分子多项式和分母多项式,而[z, p, k]则分别表示滤波器的零点、极点和增益。
通过这种形式,我们可以清晰地了解滤波器在频域中的性能。
在MATLAB中,我们可以通过标准形式、分子-分母形式和零极点形式来表达陷波滤波器的传递函数,每种形式都有其特点和适用范围。
在实际应用中,我们可以根据需要选择合适的表达形式来分析和设计滤波器,以满足不同的工程需求。
希望本文介绍的内容能够帮助读者更好地理解和运用MATLAB中陷波滤波器的传递函数表达形式。
四、MATLAB中陷波滤波器的频域分析在MATLAB中,我们可以利用陷波滤波器的传递函数来进行频域分析。
matlab带通滤波函数-回复Matlab带通滤波函数可以用于处理信号中特定频率范围内的频率成分。
本文将介绍如何使用Matlab中的带通滤波函数进行信号处理,并一步一步回答相关问题。
第一步:了解带通滤波函数的基本原理带通滤波函数是一种常用的数字信号处理方法,用于消除信号中特定频率范围之外的频率成分。
在Matlab中,可以使用fir1或butter函数来实现带通滤波。
第二步:了解fir1函数和butter函数fir1函数是Matlab中的一个频率响应数列设计函数,用于设计n阶线性相位滤波器。
它可以通过指定滤波器类型、通带频率、阻带频率等参数来生成滤波器系数。
其中,通带频率由低截止频率和高截止频率确定。
butter函数是Matlab中的一个巴特沃斯滤波器设计函数,用于设计n阶巴特沃斯滤波器。
与fir1函数类似,butter函数也可以通过指定滤波器类型、通带频率、阻带频率等参数来生成滤波器系数。
第三步:使用fir1函数进行带通滤波在Matlab中,可以使用fir1函数对信号进行带通滤波处理。
其语法如下:h = fir1(n, [f1, f2], 'bandpass')其中,n表示滤波器的阶数,[f1, f2]表示带通滤波的频率范围,'bandpass'表示滤波器类型为带通滤波器。
需要注意的是,滤波器的阶数n越高,滤波效果越好,但计算复杂度也会增加。
选择合适的阶数需要在滤波效果和计算效率之间做出权衡。
第四步:使用butter函数进行带通滤波与fir1函数类似,可以使用butter函数对信号进行带通滤波处理。
其语法如下:[b, a] = butter(n, [f1, f2], 'bandpass')其中,n表示滤波器的阶数,[f1, f2]表示带通滤波的频率范围,'bandpass'表示滤波器类型为带通滤波器。
b和a分别表示滤波器的分子和分母多项式系数。
在MATLAB中,可以使用butter函数来设计模拟滤波器,然后使用bilinear函数将其转换为
数字滤波器。以下是一个简单的示例:
matlab
% 设计模拟滤波器
[b, a] = butter(order, cutoff, 'high');
% 转换为数字滤波器
[num, den] = bilinear(b, a, fs);
其中,order是滤波器的阶数,cutoff是滤波器的截止频率,fs是采样频率。butter函数返回
滤波器的分子和分母系数,然后使用bilinear函数将它们转换为数字滤波器的系数。
请注意,上述代码假定您已经定义了采样频率fs。如果没有定义,您可以使用fs = 1000;来
设置一个示例值。
一、概述Matlab 是一种用于算法开发、数据分析和可视化的高级技术计算语言和交互式环境。
在信号处理领域,Matlab 是一种非常强大的工具,可以用来设计和实现数字滤波器。
本文将重点介绍如何使用 Matlab 过FIR (Finite Impulse Response) 数字滤波器设计。
二、FIR 数字滤波器概述FIR 数字滤波器是一种常见的数字滤波器,它的特点是其单位脉冲响应有限,并且没有反馈。
FIR 滤波器的频率响应可以通过其线性相位特性来描述,因此在许多应用中非常有用。
三、Matlab 中的 FIR 数字滤波器设计工具Matlab 中提供了许多用于数字滤波器设计的工具,其中包括 fdatool 和 fir1 函数。
1. fdatoolfdatool 是 Matlab 中的一个交互式工具,可以帮助用户设计各种类型的数字滤波器。
用户可以通过图形界面选择滤波器类型、滤波器阶数、截止频率等参数,并实时查看滤波器的频率响应和单位脉冲响应。
使用 fdatool 可以快速方便地设计出所需的 FIR 数字滤波器。
2. fir1 函数fir1 函数是 Matlab 中用于设计标准的低通、高通、带通和带阻 FIR数字滤波器的函数。
用户可以通过指定滤波器类型、截止频率、滤波器阶数等参数来调用 fir1 函数,从而得到所需的数字滤波器的系数。
四、利用 Matlab 设计 FIR 数字滤波器的步骤1. 确定滤波器类型首先要确定所需的数字滤波器的类型,包括低通滤波器、高通滤波器、带通滤波器和带阻滤波器。
2. 确定滤波器的频率特性根据具体的应用需求,确定滤波器的截止频率、通带和阻带的大小,以及过渡带的宽度等参数。
3. 计算滤波器的系数根据所需的滤波器类型、频率特性和滤波器阶数等参数,使用 fdaool 工具或 fir1 函数计算出滤波器的系数。
4. 应用滤波器将得到的滤波器系数应用到需要滤波的信号上,即可得到滤波后的信号。
如何在Matlab中实现数字滤波器设计数字滤波器是一种用于信号处理和数据处理的重要工具,可以帮助我们去除噪声、增强信号等。
在Matlab这个强大的软件平台上,实现数字滤波器设计变得相对简单。
本文将从数字滤波器的原理入手,介绍如何在Matlab中使用不同的设计方法来实现数字滤波器设计。
第一部分:数字滤波器的基本原理数字滤波器是对离散时间信号进行滤波处理的一种系统,其基本原理是通过去除频率响应中不需要的频率分量来实现滤波效果。
数字滤波器可以分为两种类型:有限长冲激响应(FIR)滤波器和无限长冲激响应(IIR)滤波器。
FIR滤波器是一种以线性时不变(LTI)系统为基础的滤波器,其特点是相对稳定,不会产生极点,因此设计相对简单。
而IIR滤波器由于其非线性特性,可以实现更复杂的频率响应,但相应的设计也更加复杂。
第二部分:数字滤波器设计方法2.1 频率采样法频率采样法是一种常用的数字滤波器设计方法,它通过在模拟频域上选择一组点,然后将这些点映射到数字频域上,从而实现频率响应的采样。
在Matlab中可以使用freqz函数来实现频率采样法设计数字滤波器。
2.2 窗函数法窗函数法是一种简单有效的数字滤波器设计方法,它通过将理想滤波器的频率响应与窗函数相乘,来实现数字滤波器的设计。
常用的窗函数包括矩形窗、汉宁窗、汉明窗等。
在Matlab中可以使用fir1函数来实现窗函数法设计FIR滤波器。
2.3 最小均方误差法最小均方误差法是一种优化方法,通过最小化滤波器的输出与期望输出之间的均方误差来设计数字滤波器。
在Matlab中可以使用firls函数来实现最小均方误差法设计FIR滤波器。
2.4 IRLS法IRLS法是一种通过迭代重新加权最小二乘法来设计数字滤波器的方法。
在Matlab中可以使用firls函数来实现IRLS法设计FIR滤波器。
第三部分:示例演示接下来,我们将通过一个具体的示例来演示如何使用Matlab来实现数字滤波器设计。
MATLAB下的数字信号处理实现示例一信号、系统和系统响应1、理想采样信号序列(1)首先产生信号x(n),0<=n<=50n=0:50; %定义序列的长度是50A=444.128; %设置信号有关的参数a=50*sqrt(2.0)*pi;T=0.001; %采样率w0=50*sqrt(2.0)*pi;x=A*exp(-a*n*T).*sin(w0*n*T); %pi是MATLAB定义的π,信号乘可采用“.*”close all %清除已经绘制的x(n)图形subplot(3,1,1);stem(x); %绘制x(n)的图形title(‘理想采样信号序列’);(2)绘制信号x(n)的幅度谱和相位谱k=-25:25;W=(pi/12.5)*k;X=x*(exp(-j*pi/12.5)).^(n’*k);magX=abs(X); %绘制x(n)的幅度谱subplot(3,1,2);stem(magX);title(‘理想采样信号序列的幅度谱’);angX=angle(X); %绘制x(n)的相位谱subplot(3,1,3);stem(angX) ; title (‘理想采样信号序列的相位谱’)(3)改变参数为:1,0734.2,4.0,10==Ω==TAαn=0:50; %定义序列的长度是50A=1; %设置信号有关的参数a=0.4;T=1; %采样率w0=2.0734;x=A*exp(-a*n*T).*sin(w0*n*T); %pi是MATLAB定义的π,信号乘可采用“.*”close all %清除已经绘制的x(n)图形subplot(3,1,1);stem(x); %绘制x(n)的图形title(‘理想采样信号序列’);k=-25:25;W=(pi/12.5)*k;X=x*(exp(-j*pi/12.5)).^(n’*k);magX=abs(X); %绘制x(n)的幅度谱subplot(3,1,2);stem(magX);title(‘理想采样信号序列的幅度谱’);angX=angle(X); %绘制x(n)的相位谱subplot(3,1,3);stem(angX) ; title (‘理想采样信号序列的相位谱’)2、单位脉冲序列在MatLab中,这一函数可以用zeros函数实现:n=1:50; %定义序列的长度是50x=zeros(1,50); %注意:MATLAB中数组下标从1开始x(1)=1;close all;subplot(3,1,1);stem(x);title(‘单位冲击信号序列’);k=-25:25;X=x*(exp(-j*pi/12.5)).^(n’*k);magX=abs(X); %绘制x(n)的幅度谱subplot(3,1,2);stem(magX);title(‘单位冲击信号的幅度谱’);angX=angle(X); %绘制x(n)的相位谱subplot(3,1,3);stem(ang X) ; title (‘单位冲击信号的相位谱’)3、矩形序列n=1:50x=sign(sign(10-n)+1);close all;subplot(3,1,1);stem(x);title(‘单位冲击信号序列’);k=-25:25;X=x*(exp(-j*pi/25)).^(n’*k);magX=abs(X); %绘制x(n)的幅度谱subplot(3,1,2);stem(magX);title(‘单位冲击信号的幅度谱’);angX=angle(X); %绘制x(n)的相位谱su bplot(3,1,3);stem(angX) ; title (‘单位冲击信号的相位谱’)4、特定冲击串:)3()2(5.2)1(5.2)()(−+−+−+=nnnnnxδδδδn=1:50; %定义序列的长度是50x=zeros(1,50); %注意:MATLAB中数组下标从1开始x(1)=1;x(2)=2.5;x(3)=2.5;x(4)=1;close all;subplot(3,1,1);stem(x);title(‘单位冲击信号序列’);k=-25:25;X=x*(exp(-j*pi/12.5)).^(n’*k);magX=abs(X); %绘制x(n)的幅度谱subplot(3,1,2);stem(magX);title(‘单位冲击信号的幅度谱’);angX=angle(X); %绘制x(n)的相位谱subplot(3,1,3);stem(angX) ; title (‘单位冲击信号的相位谱’)5、卷积计算:Σ+∞−∞=−=∗=mmnhmxnhnxny)()()()()(在MATLAB中。
提供了卷积函数conv,即y=conv(x,h),调用十分方便。
例如:系统:)3()2(5.2)1(5.2)()(−+−+−+=nnnnnhbδδδδ信号:500),sin()(0<≤Ω=−nnTAetxnTaαn=1:50; %定义序列的长度是50hb=zeros(1,50); %注意:MATLAB中数组下标从1开始hb(1)=1;hb(2)=2.5;hb(3)=2.5;hb(4)=1;close all;subplot(3,1,1);stem(hb);title(‘系统hb[n]’);m=1:50; %定义序列的长度是50A=444.128; %设置信号有关的参数a=50*sqrt(2.0)*pi;T=0.001; %采样率w0=50*sqrt(2.0)*pi;x=A*exp(-a*m*T).*sin(w0*m*T); %pi是MATLAB定义的π,信号乘可采用“.*”subplot(3,1,2);stem(x);title(‘输入信号x[n]’);y=conv(x,hb);subplot(3,1,3);stem(y);title(‘输出信号y[n]’);6、卷积定律验证k=-25:25;X=x*(exp(-j*pi/12.5)).^(n’*k);magX=abs(X); %绘制x(n)的幅度谱subplot(3,2,1);stem(magX);title(‘输入信号的幅度谱’);angX=angle(X); %绘制x(n)的相位谱subplot(3,2,2);stem(angX) ; title (‘输入信号的相位谱’)Hb=hb*(exp(-j*pi/12.5)).^(n’*k);magHb=abs(Hb); %绘制hb(n)的幅度谱subplot(3,2,3);stem(magHb);title(‘系统响应的幅度谱’);angHb=angle(Hb); %绘制hb(n)的相位谱subplot(3,2,4);stem(angHb) ; title (‘系统响应的相位谱’)n=1:99;k=1:99;Y=y*(exp(-j*pi/12.5)).^(n’*k);magY=abs(Y); %绘制y(n)的幅度谱subplot(3,2,5);stem(magY);title(‘输出信号的幅度谱’);angY=angle(Y); %绘制y(n)的相位谱subplot(3,2,6);stem(angY) ; title (‘输出信号的相位谱’)%以下将验证的结果显示XHb=X.*Hb;Subplot(2,1,1);stem(abs(XHb));title(‘x(n)的幅度谱与hb(n)幅度谱相乘’);Subplot(2,1,2);stem(abs(Y);title(‘y(n)的幅度谱’);axis([0,60,0,8000])附录二用FFT进行信号的频谱分析1、高斯序列:⎪⎩⎪⎨⎧≤≤=−−elsenenxqpna,0150,)(2)(n=0:15; %定义序列的长度是15p=8;q=2;x=exp(-1*(n-p).^2/q);close all;subplot(3,1,1);stem(abs(fft(x)))p=8;q=4;x=exp(-1*(n-p).^2/q);subplot(3,1,2);stem(abs(fft(x)))p=8;q=8;x=exp(-1*(n-p).^2/q);subplot(3,1,3);stem(abs(fft(x)))2、衰减正弦序列:⎩⎨⎧≤≤=−elsenfnenxnb,0150,2sin)(παn=0:15; %定义序列的长度是15a=0.1;f=0.0625;x=exp(-a*n).*sin(2*pi*f*n);close all;subplot(2,1,1);stem(x);subplot(2,1,2);stem(abs(fft(x)))3、三角波序列:⎪⎩⎪⎨⎧≤≤−≤≤+=elsennnnnxc,074,830,1)( for i=0:3x(i)=i+1;x(i+4)=8-(i+4);endfor i=8:15x(i)=0;endclose all;subplot(2,1,1);stem(x);subplot(2,1,2);stem(abs(fft(x,16)))4、反三角序列:⎪⎩⎪⎨⎧≤≤−≤≤−=elsennnnnxd,074,330,4)(附录三窗函数法设计FIR滤波器一、在MATLAB中产生窗函数十分简单:(1)矩形窗(Rectangle Window)调用格式:w=boxcar(n),根据长度n产生一个矩形窗w。
(2)三角窗(Triangular Window)调用格式:w=triang(n) ,根据长度n产生一个三角窗w。
(3)汉宁窗(Hanning Window)调用格式:w=hanning(n) ,根据长度n产生一个汉宁窗w。
(4)海明窗(Hamming Window)调用格式:w=hamming(n) ,根据长度n产生一个海明窗w。
(5)布拉克曼窗(Blackman Window)调用格式:w=blackman(n) ,根据长度n产生一个布拉克曼窗w。
(6)恺撒窗(Kaiser Window)调用格式:w=kaiser(n,beta) ,根据长度n和影响窗函数旁瓣的β参数产生一个恺撒窗w。
数值信号处理实例(续)基于窗函数的FIR滤波器设计利用MATLAB提供的函数firl 来实现调用格式:firl (n,Wn,’ftype’,Window),n为阶数、Wn是截止频率(如果输入是形如[W1 W2]的矢量时,本函数将设计带通滤波器,其通带为W1<ω<W2)、ftype是滤波器的类型(低通-省略该参数、高通-ftype=high、带阻-ftype=stop)、Window是窗函数。
[例] 设计一个长度为8的线性相位FIR滤波器。
其理想幅频特性满足⎩⎨⎧≤≤=elseeHjd,04.00,1|)(|πωωWindow=boxcar(8);b=fir1(7,0.4,Window);freqz(b,1)Window=blackman(8);b=fir1(7,0.4,Window);freqz(b,1)[例] 设计线性相位带通滤波器,其长度N=15,上下边带截止频率分别为W1= 0.3π,w2=0.5πWindow=blackman(16);b=fir1(15,[0.3 0.5],Window);freqz(b,1)设计指标为:ωp=0.2π Rp=0.25dB ωa=0.3π As=50dB的低通数字FIR滤波器wp=0.2*pi;ws=0.3*pi;tr_width=ws-wp;M=ceil(6.6*pi/tr_width)+1;N=[0:1:M-1];wc=(ws+wp)/2;hd=ideal_lp(wc,M);w_ham=(boxcar(M))’;h=hd.*w_ham;[db,mag,pha,grd,w]=freqz_m(h,[1]);delta_w=2*pi/1000;Rp=-(min(db(1:1:wp/delta_w+1)));As=-round(max(db(ws/delta_w+1:1:501)));Close all;subplot(2,2,1);stem(hd);title(‘理想冲击响应’)axis([0 M-1 –0.1 0.3]);ylabel(‘hd[n]’);subplot(2,2,2);stem(w_ha m);title(‘汉明窗’);axis([0 M-1 0 1.1]);ylabel(‘w[n]’);subplot(2,2,3);stem(h);title(‘实际冲击响应’);axis([0 M-1 –0.1 0.3]);ylabel(‘h[n]’);subplot(2,2,4);plot(w/pi,db); title(‘衰减幅度’);axis([0 1 -100 10]);ylabel(‘Decibles’);IIR滤波器的实现MATLAB中滤波器的分析和实现1、freqs函数:模拟滤波器的频率响应[例] 系统传递函数为14.013.02.0)(22++++=sssssH 的模拟滤波器,在MATLAB 中可以用以下程序来实现:a=[1 0.4 1];b=[0.2 0.3 1];%w=logspace(-1,1); %产生从到之间地0个等间距点,即50个频率点110−110 freqs(b,a,w) %根据输入的参数绘制幅度谱和相位谱2、freqz函数:数字滤波器的频率响应[例] 系统传递函数为224.013.02.0)(−−++++=zzzzzH 的模拟滤波器,在MATLAB 中可以用以下程序来实现:a=[1 0.4 1];b=[0.2 0.3 1];%根据输入的参数绘制幅度谱和相位谱,得到0到π之间128个点处的频率响应freqz(b,a,128)3、ButterWorth模拟和数字滤波器(1)butterd函数:ButterWorth滤波器阶数的选择。