Matlab滤波信号处理函数

合集下载

matlab滤波函数详解

matlab滤波函数详解

matlab滤波函数详解Matlab作为一种广泛应用于数值计算和数据处理的软件,提供了许多用于信号处理和图像处理的函数。

其中,滤波函数是其中非常重要的一部分,它们在许多应用中都起着关键的作用。

本文将详细介绍Matlab中常见的滤波函数,包括它们的用途、参数设置、使用方法和示例。

一、滤波函数概述滤波函数主要用于对信号进行滤波处理,以消除噪声、突出信号特征或实现其他特定的处理目标。

在Matlab中,常见的滤波函数包括低通、高通、带通、带阻等类型,它们可以根据不同的应用需求选择。

滤波器通常由一组数学函数组成,用于对输入信号进行加权和叠加,以达到滤波的目的。

二、低通滤波函数低通滤波函数用于消除高频噪声,保持低频信号的完整性。

在Matlab中,常用的低通滤波函数包括lfilter和filter等。

lfilter函数适用于线性滤波器,而filter函数适用于任意滤波器设计。

低通滤波函数的参数包括滤波器系数、输入信号和采样率等。

通过调整滤波器系数,可以实现不同的滤波效果。

三、高通滤波函数高通滤波函数用于消除低频噪声,突出高频信号特征。

在Matlab 中,常用的高通滤波函数包括hilbert和highpass等。

hilbert函数适用于频谱分析和高频信号提取,而highpass函数则适用于消除低频噪声。

高通滤波函数的参数包括滤波器系数、采样率和信号类型等。

通过调整滤波器系数,可以实现不同的高通效果。

四、带通滤波函数带通滤波函数用于选择特定频率范围内的信号进行过滤。

在Matlab中,常用的带通滤波函数包括bandpass和butter等。

bandpass函数适用于设计带通滤波器,而butter函数则适用于连续时间滤波器设计。

带通滤波函数的参数包括带外抑制值、带宽和采样率等。

通过调整带宽参数,可以实现不同的带通效果。

五、其他滤波函数除了以上三种常见的滤波函数外,Matlab还提供了其他一些滤波函数,如带阻、限幅、防混叠等类型。

matlab中freqz函数

matlab中freqz函数

matlab中freqz函数MATLAB中的freqz函数是数字信号处理中广泛使用的函数之一。

它可以展示数字滤波器的频率响应,并且支持实部频率响应和幅度响应的展示。

在本文中,将介绍如何使用freqz函数,并详细解释它的参数功能。

1. freqz函数的基本功能freqz函数(即频率响应函数)可以绘制数字滤波器的频率响应。

一般来说,数字滤波器的频率响应是一个复数函数,可以分解为实部和虚部。

freqz函数可以将这两个部分分别绘制在图像上。

2. freqz函数的语法freqz函数的语法如下:[H, w] = freqz(b, a, n, Fs)其中,b和a是数字滤波器的分子和分母系数,n是频率响应的离散点数,Fs是采样率。

在这里,H是频率响应值,w是对应的角频率。

通常情况下,n和Fs是可选参数。

如果没有指定它们,MATLAB会自动使用默认值:n=512,Fs=2*pi。

3. freqz函数的参数分别解释一下freqz函数中的参数:(1)b和a:它们是数字滤波器的分子和分母系数。

如果传入的b和a是向量,我们可以使用freqz函数来绘制滤波器的频率响应。

如果传入的b和a是矩阵,那么freqz函数将绘制多个滤波器的频率响应。

参数b和a在输入时需要符合matlab的格式限制。

(2)n:它是freqz函数展示频率响应的离散点数。

n越大,频率响应越精细。

如果未指定n值,则默认为512。

(3)Fs:它是采样率。

如果Fs值未指定,则默认为2*pi。

freqz函数的示例为了更好地理解freqz函数,可以通过以下示例演示:将以下代码输入到MATLAB命令行窗口,频率响应图将被生成:% 生成8阶Butterworth数字低通滤波器系数[b, a] = butter(8, 0.2);% 使用freqz函数绘制频率响应[H, w] = freqz(b, a);plot(w/pi, abs(H))grid on;xlabel('Normalized frequency');ylabel('Magnitude response');title('Frequency Response of 8th-order Butterworth Lowpass Filter');上述代码使用butter函数生成了8阶Butterworth数字低通滤波器的分子和分母系数,然后使用freqz函数对其进行频率响应绘制。

matlab滤波函数详解 -回复

matlab滤波函数详解 -回复

matlab滤波函数详解-回复Matlab滤波函数详解在信号处理领域中,滤波是一项常用技术,用于去除噪声、平滑数据、增强信号等。

Matlab作为一种功能强大的科学计算软件,提供了丰富的滤波函数来帮助用户处理信号。

本文将详细介绍Matlab中常用的滤波函数,包括低通滤波、高通滤波、带通滤波以及无限冲激响应滤波器等。

同时,将逐步回答一系列问题,以帮助读者全面理解和使用这些滤波函数。

一、低通滤波器1. 什么是低通滤波器?低通滤波器是一种能够通过允许低频信号通过,而抑制高频信号的滤波器。

通过低通滤波器可以实现信号平滑、去噪以及降低信号带宽等目标。

2. Matlab中如何使用低通滤波?在Matlab中,可以使用函数`lowpass`来实现低通滤波。

例如,若要对信号`x`进行低通滤波,可以使用以下代码:matlabfs = 1000; 采样率Hzfc = 100; 截止频率Hzorder = 4; 滤波器阶数filtered_x = lowpass(x, fc, fs, order);上述代码中,`fs`表示信号的采样率,`fc`表示低通滤波器的截止频率,`order`表示滤波器阶数。

函数`lowpass`返回滤波后的信号`filtered_x`。

二、高通滤波器1. 什么是高通滤波器?高通滤波器是一种能够通过允许高频信号通过,而抑制低频信号的滤波器。

通过高通滤波器可以实现丢弃信号中的低频成分、突出信号中的高频特征等目标。

2. Matlab中如何使用高通滤波?在Matlab中,可以使用函数`highpass`来实现高通滤波。

以下代码演示了如何对信号`x`进行高通滤波:fs = 1000; 采样率Hzfc = 100; 截止频率Hzorder = 4; 滤波器阶数filtered_x = highpass(x, fc, fs, order);上述代码中,`fs`表示信号的采样率,`fc`表示高通滤波器的截止频率,`order`表示滤波器阶数。

matlab中fft滤波

matlab中fft滤波

matlab中fft滤波傅里叶变换(FFT)是一种广泛应用于信号处理和图像处理的数学技术。

在MATLAB中,使用fft函数可以对信号进行快速傅里叶变换。

而滤波操作是通过在频域对信号进行处理来去除噪声或者筛选特定频率的成分。

在MATLAB中,可以通过以下步骤进行FFT滤波:1. 导入信号数据:首先需要导入要进行滤波的信号数据。

可以使用MATLAB中的load命令或者其他文件读取的函数来导入数据。

导入的数据一般是一个时间序列,例如 [x, Fs] = audioread('signal.wav'),其中x为采样的信号数据,Fs为采样率。

2. FFT变换:使用fft函数对信号进行傅里叶变换。

FFT函数的基本语法是 Y = fft(X), 其中X为输入的信号数据,Y为傅里叶变换后的频域数据。

通常,X的长度应为2的幂,为了确保等长,可以通过取信号数据长度的下一个2的幂次来进行填充(例如使用nextpow2函数)。

3. 频率和振幅计算:计算FFT结果的频率和振幅。

由于FFT 结果是一个对称的复数数组,只需要计算前半部分的频率和振幅,并使用abs函数获取振幅的绝对值。

频率可以通过采样率以及FFT结果的大小来计算。

4. 滤波操作:为了进行滤波,可以选择要去除的频率范围或者振幅阈值。

根据具体的需求,可以选择低通滤波或者高通滤波方法。

低通滤波可以通过将高于某个阈值的频率成分置零来实现,高通滤波则是将低于某个阈值的频率成分置零。

5. 逆FFT变换:对滤波后的频域数据进行逆傅里叶变换,使用ifft函数可以将频域数据转换回时域。

6. 结果可视化:可以使用MATLAB的绘图函数来可视化滤波后的信号。

例如plot函数可以绘制时域信号,而stem函数可以绘制频域信号的振幅谱图。

最后,需要注意的是信号的采样率,滤波的带宽以及选择的滤波方法都会对滤波效果产生影响。

合理选择这些参数可以得到滤波后的信号满足实际需求的结果。

Matlab中产生信号滤波器的函数

Matlab中产生信号滤波器的函数

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做前向和反向处理,实现零相位数字滤波。

使用MATLAB进行信号处理与滤波

使用MATLAB进行信号处理与滤波

使用MATLAB进行信号处理与滤波信号处理与滤波是数字信号处理领域中的重要技术,而MATLAB是一种广泛应用于信号处理的工具。

本文将介绍如何使用MATLAB进行信号处理与滤波,包括信号采样、信号重构、频谱分析以及常用的滤波器设计和应用。

首先,我们先了解一下信号处理的基本概念。

信号处理是对信号进行采样、重构、滤波、增强、压缩等操作的过程。

信号可以是连续的或离散的,常常通过采样将连续信号转换为离散信号进行处理。

在MATLAB中,可以使用`plot`函数来绘制信号的波形图。

假设有一个正弦信号,我们可以通过以下代码绘制其波形图:```matlabfs = 1000; % 采样率为1000Hzt = 0:1/fs:1; % 时间向量,从0到1sf = 10; % 正弦信号的频率为10Hzx = sin(2*pi*f*t); % 构造正弦信号plot(t, x); % 绘制波形图xlabel('Time (s)'); % x轴标签ylabel('Amplitude'); % y轴标签title('Sinusoidal Signal'); % 图片标题```这段代码中,首先定义了采样率`fs`、时间向量`t`和信号频率`f`,然后使用`sin`函数构造了正弦信号`x`,最后通过`plot`函数绘制出信号的波形图。

在进行信号处理时,经常需要进行频谱分析来研究信号的频率特性。

MATLAB 提供了多种函数来计算信号的频谱,其中最常用的是`fft`函数。

以下代码演示了如何计算信号的频谱,并绘制频谱图:```matlabFs = 1000; % 采样率为1000HzT = 1/Fs; % 采样间隔L = 1000; % 信号长度为1000t = (0:L-1)*T; % 时间向量x = sin(2*pi*50*t) + 0.5*sin(2*pi*120*t); % 构造含有两个频率成分的信号Y = fft(x); % 对信号进行傅里叶变换P2 = abs(Y/L); % 计算双边频谱P1 = P2(1:L/2+1); % 取单边频谱P1(2:end-1) = 2*P1(2:end-1); % 幅度归一化f = Fs*(0:(L/2))/L; % 频率向量plot(f,P1); % 绘制频谱图title('Single-Sided Amplitude Spectrum of x(t)'); % 图片标题xlabel('Frequency (Hz)'); % x轴标签ylabel('Amplitude'); % y轴标签```这段代码中,首先定义了采样率`Fs`、采样间隔`T`、信号长度`L`和时间向量`t`,然后使用两个正弦信号相加的方式构造了含有两个频率成分的信号`x`,接着使用`fft`函数对信号进行傅里叶变换得到频谱`Y`,最后根据频谱进行幅度归一化并绘制频谱图。

fftfilt函数的用法matlab

fftfilt函数的用法matlab

fftfilt函数的用法matlabfftfilt函数是MATLAB中一个用于进行FIR滤波的函数。

它通过使用快速傅里叶变换(FFT)来实现滤波操作,能够提供高效的信号滤波功能。

该函数可以应用于各种信号处理和通信系统建模任务,例如音频处理、图像处理和信号恢复等。

y = fftfilt(b, x)其中,b是滤波器的系数向量,x为待滤波的输入信号,y是输出的滤波结果。

fftfilt函数以时间域的方式进行FIR滤波。

具体来说,它首先将输入信号x和滤波器系数b分别进行FFT,再将它们的频域表示相乘,最后进行IFFT以得到最终的滤波结果。

fftfilt函数有效地利用了FFT算法的高效性质,可以大大加快滤波的速度。

使用fftfilt函数的一般步骤如下:1.定义滤波器系数b:滤波器系数决定了滤波过程中的频率响应。

可以通过各种设计方法,如窗函数法、频率采样法或优化法来获得。

滤波器系数向量b的长度决定了滤波器的阶数。

通常,滤波器的阶数越高,滤波器的性能越好,但计算成本也会增加。

2.准备待滤波的输入信号x:输入信号可以是任意时域信号,例如音频数据、图像数据或电子信号等。

3. 调用fftfilt函数进行滤波:使用fftfilt函数对输入信号x进行滤波,得到滤波结果y。

滤波器系数b会被用于对输入信号进行滤波。

4.分析和处理滤波结果:根据具体的应用需求,对滤波结果进行分析和处理。

可以使用MATLAB提供的各种工具来进行进一步的信号处理和分析,例如绘图、频谱分析或特征提取等。

1. 滤波器系数b的选择非常重要,它决定了滤波器的特性和性能。

根据应用需求,需要选择适当的滤波器类型和参数。

MATLAB提供了一些滤波器设计函数,如fir1和fir2等,可以用于生成合适的滤波器系数。

2. 输入信号x和滤波器系数b的长度应该相等或有关系,否则会引发尺寸不匹配的错误。

可以使用MATLAB的函数padarray或resample来调整信号的长度。

matlab triang函数滤波

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函数常常用于语音信号的处理和分析,可以去除噪音和杂音,使得语音信号更加清晰和准确。

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

Matlab滤波信号处理函数2009-12-04 19:32:22| 分类:matlab方法| 标签:|字号大中小订阅1 conv功能:求卷积。

格式:c = conv(a,b)说明:c = conv(a,b)返回向量a、b的卷积c。

举例:a = [1 2 3]b = [4 5 6]c = conv(a,b)c=4 13 28 27 182 impz功能:数字滤波器的冲激响应。

格式:[h,t] = impz(b,a)[h,t] = impz(b,a,n)[h,t] = impz(b,a,n,Fs)impz(b,a)impz(...)说明:[h,t] = impz(b,a)返回系统(b,a)的冲激响应h和相应的时间轴向量t,b、a分别为系统传递函数的分子和分母系数向量。

[h,t] = impz(b,a,n)返回指定的n点冲激响应[h,t] = impz(b,a,n,Fs)指定了冲激响应采样点的频率间隔1/Fs。

Fs 为相对频率,缺省值为1。

impz(b,a)和impz(...)绘制冲激响应的图形。

举例:计算线性系统(b,a)的冲激响应,结果见图1.4.1。

b =[0.2 0.1 0.3 0.1 0.2];a =[1 ?.1 1.55 ?.7 0.3];impz(b,a,50)3 zplane功能:离散系统的零极点图。

格式:zplane(z,p)zplane(b,a)说明:zplane(z,p)和zplane(b,a)绘制系统的零极点图,用“o”表示零点,“x”表示极点。

z、p分别为零点和极点向量,b、a分别为系统传递函数的分子和分母系数向量。

举例:计算线性系统(b,a)的零点和极点,结果见图1.4.2。

b =[0.2 0.1 0.3 0.1 0.2];a =[1.0 -1.1 1.5 -0.7 0.3];zplane(b,a)4 abs功能:求幅值。

格式:y = abs(x)说明:y = abs(x)返回复数向量x的幅值向量y。

举例计算一个谐波信号(由几个单一频率信号组成的信号)傅立叶变换的幅值,结果见图1.4.3。

t = (0:99)/100;x = sin(2*pi*15*t) + sin(2*pi*40*t);y = fft(x);m = abs(y);f = (0:length(y)-1)'/length(y)*100;plot(f,m),grid5 angle功能:求复数的相角。

格式:p = angle(h)说明:p = angle(h)返回复数向量h的相位向量p。

举例:计算谐波信号的相位,结果见图1.4.4。

t = (0:99)/100;x = sin(2*pi*15*t) + sin(2*pi*40*t);y = fft(x);p = unwrap(angle(y));f = (0:length(y)-1)?length(y)*100;plot(f,p)6 freqs功能:模拟滤波器的频率响应(幅频和相频)。

格式:h = freqs(b,a,w)[h,w] = freqs(b,a)[h,w] = freqs(b,a,n)freqs(b,a)说明:h = freqs(b,a,w)计算系统(b,a)在指定频率点向量w上的频率响应h,b、a分别为系统传递函数的分子和分母系数向量。

[h,w] = freqs(b,a)自动选取200个频率点计算频率响应h,w 为频率点向量。

[h,w] = freqs(b,a,n)计算n个点的频率响应。

freqs(b,a)绘制频率响应曲线。

magnitude————幅度phase(degrees)————相位frequency---------------------------频率举例:计算模拟滤波器(b,a)的频率响应,结果见图1.4.5。

a = [1 0.4 1];b = [0.2 0.3 1];w = logspace(-1,1);freqs(b,a,w)7 freqz功能:数字滤波器的频率响应(幅频和相频)。

格式:[h,w] = freqz(b,a,n)[h,f] = freqz(b,a,n,Fs)[h,w] = freqz(b,a,n,'whole')[h,f] = freqz(b,a,n,'whole',Fs)h = freqz(b,a,w)h = freqz(b,a,f,Fs)freqz(b,a)说明:[h,w] = freqz(b,a,n)计算数字滤波器(b,a)的n点频率响应h,w为相应的频率点向量。

[h,f] = freqz(b,a,n,Fs)指定采样频率Fs,根据采样定理,h在[0,Fs/2]之间均匀选取n个频率点,f为频率点向量。

[h,w] = freqz(b,a,n,'whole')在[0,2π]之间选取n个频率点。

[h,f] = freqz(b,a,n,'whole',Fs) 在[0,Fs]之间均匀选取n个频率点。

h = freqz(b,a,w)和h = freqz(b,a,f,Fs)计算指定频率点向量的频率响应。

freqz(b,a)绘制频率响应曲线。

(计算并且赋值时不绘曲线)magnitude————幅度phase(degrees)————相位frequency---------------------------频率举例:计算数字滤波器(b,a)的频率响应,结果见图1.4.6。

b =[0.2 0.3 1];a =[1 0.4 1];freqz(b,a,128)8 freqspace功能:设置频率响应中的频率间隔。

格式:f = freqspace(n)f = freqspace(n,'whole')[f1,f2] = freqspace(n)[f1,f2] = freqspace([m n])说明:f = freqspace(n)返回[0,1]中均匀分布的点[0:2/n:1]。

f = freqspace(n,'whole')返回单位圆上n个均匀分布的点,[0:2/n:2*(n–1)/n]。

[f1,f2] = freqspace(n)产生二维频率点向量。

[f1,f2] = freqspace([m n])产生m×n的频率点向量f1、f2。

9 grpdelay功能:计算滤波器的群延迟。

格式:[gd,w] = grpdelay(b,a,n)[gd,f] = grpdelay(b,a,n,Fs)[gd,w] = grpdelay(b,a,n,'whole')[gd,f] = grpdelay(b,a,n,'whole',Fs)gd = grpdelay(b,a,w)gd = grpdelay(b,a,f,Fs)grpdelay(b,a)说明:[gd,w] = grpdelay(b,a,n)返回滤波器(b,a)的n点群延迟gd,w为相应的频率点向量。

[gd,f] = grpdelay(b,a,n,Fs) 计算[0,Fs/2]之间n个频率点的群延迟gd,f为频率点向量。

[gd,w] = grpdelay(b,a,n,'whole')计算[0,2π]间n个频率点的群延迟。

[gd,f] = grpdelay(b,a,n,'whole',Fs) 计算[0,Fs]间n个频率点的群延迟。

gd = grpdelay(b,a,w)和gd = grpdelay(b,a,f,Fs)计算指定频率点的群延迟。

grpdelay(b,a)绘制群延迟的曲线。

%写上标题%设计低通滤波器:[N,Wc]=buttord()%估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc[a,b]=butter(N,Wc); %设计Butterworth低通滤波器[h,f]=freqz(); %求数字低通滤波器的频率响应figure(2); % 打开窗口2subplot(221); %图形显示分割窗口plot(f,abs(h)); %绘制Butterworth低通滤波器的幅频响应图title(巴氏低通滤波器'');grid; %绘制带网格的图像sf=filter(a,b,s); %叠加函数S经过低通滤波器以后的新函数subplot(222);plot(t,sf); %绘制叠加函数S经过低通滤波器以后的时域图形xlabel('时间 (seconds)');ylabel('时间按幅度');SF=fft(sf,256); %对叠加函数S经过低通滤波器以后的新函数进行256点的基—2快速傅立叶变换w= %新信号角频率subplot(223);plot()); %绘制叠加函数S经过低通滤波器以后的频谱图title('低通滤波后的频谱图');%设计高通滤波器[N,Wc]=buttord()%估算得到Butterworth高通滤波器的最小阶数N和3dB截止频率Wc[a,b]=butter(N,Wc,'high'); %设计Butterworth高通滤波器[h,f]=freqz(); %求数字高通滤波器的频率响应figure(3);subplot(221);plot(f,abs(h)); %绘制Butterworth高通滤波器的幅频响应图title('巴氏高通滤波器');grid; %绘制带网格的图像sf=filter(); %叠加函数S经过高通滤波器以后的新函数subplot(222);plot(t,sf); ;%绘制叠加函数S经过高通滤波器以后的时域图形xlabel('Time(seconds)');ylabel('Time waveform');w; %新信号角频率subplot(223);plot()); %绘制叠加函数S经过高通滤波器以后的频谱图title('高通滤波后的频谱图');%设计带通滤波器[N,Wc]=buttord([)%估算得到Butterworth带通滤波器的最小阶数N和3dB截止频率Wc[a,b]=butter(N,Wc); %设计Butterworth带通滤波器[h,f]=freqz(); %求数字带通滤波器的频率响应figure(4);subplot(221);plot(f,abs(h)); %绘制Butterworth带通滤波器的幅频响应图title('butter bandpass filter');grid; %绘制带网格的图像sf=filter(a,b,s); %叠加函数S经过带通滤波器以后的新函数subplot(222);plot(t,sf); %绘制叠加函数S经过带通滤波器以后的时域图形xlabel('Time(seconds)');ylabel('Time waveform');SF=fft(); %对叠加函数S经过带通滤波器以后的新函数进行256点的基—2快速傅立叶变换w=( %新信号角频率subplot(223);plot(')); %绘制叠加函数S经过带通滤波器以后的频谱图title('带通滤波后的频谱图');实例应用:matlab设计的带通滤波器方法改变参数就行了cheb1%wp1=0.45*pi;wp2=0.65*pi;ws1=0.3*pi;ws2=0.75*pi;Rp=1;Rs=40% =============双线型变换法=========================================wp1=0.45*pi; wp2=0.65*pi;ws1=0.3*pi; ws2=0.75*pi;Rp=1; Rs=40;Wp1=tan(wp1/2); Wp2=tan(wp2/2);Ws1=tan(ws1/2); Ws2=tan(ws2/2);BW=Wp2-Wp1; W0=Wp1*Wp2; W00=sqrt(W0);WP=1; WS=WP*(W0^2-Ws1^2)/(Ws1*BW);[N,Wn]=cheb1ord(WP,WS,Rp,Rs,'s');[B,A]=cheby1(N,Rp,Wn,'s');[BT,AT]=lp2bp(B,A,W00,BW);[num,den]=bilinear(BT,AT,0.5);[h,omega]=freqz(num,den,64);subplot(2,2,1);stem(omega/pi,abs(h));xlabel('\omega/\pi');ylabel('|H(z)|');subplot(2,2,2);stem(omega/pi,20*log10(abs(h)));xlabel('\omega/\pi');ylabel('增益.dB');%=============双线性变化法2=================================ws=0.6*pi;Ap=1;As=25;wp=0.4*pi;T=0.001;Fs=1/T;wp=wp/T;ws=ws/T;N=buttord(wp,ws,Ap,As,'s');fprintf('\nN=%d\n',N);wc=wp/((10^(0.1*Ap)-1)^(1/2/N));fprintf('\nwc=%.4e\n',wc);[numa,dena]=butter(N,wc,'s');fprintf('\n');disp('A numerator polynomial');fprintf('%.4e\n',numa);fprintf('\n');disp('A Denominator polynomial');fprintf('%.4e\n',dena);[numd,dend]=bilinear(numa,dena,Fs);w=linspace(0,pi,512);h=freqz(numd,dend,w);norm=max(abs(h));numd1=abs(h)/norm;plot(w/pi,20*log10(numd1));grid;%xlable('Normalized frequency');%ylable('Gain,dB');fprintf('\n');disp('D numerator polynomial');fprintf('%.4e\n',numd);fprintf('\n');disp('D numerator polynomial');fprintf('%.4e\n',dend);% =============直接法=================================wp1=0.45*pi; wp2=0.65*pi;ws1=0.3*pi; ws2=0.75*pi;Rp=1; Rs=40;Wp=[wp1/pi,wp2/pi]; Ws=[ws1/pi,ws2/pi];[N,Wn]=cheb1ord(Wp,Ws,Rp,Rs);[B,A]=cheby1(N,Rp,Wn);[h,omega]=freqz(B,A,64);subplot(2,2,3);stem(omega/pi,abs(h));xlabel('\omega/\pi');ylabel('|H(z)|');subplot(2,2,4);stem(omega/pi,20*log10(abs(h)));xlabel('\omega/\pi');ylabel('增益.dB');%cheby2%%wp1=0.45*pi;wp2=0.65*pi;ws1=0.3*pi;ws2=0.75*pi;Rp=1;Rs=40% =============脉冲响应不变法的程序================================= wp=0.4*pi;ws=0.6*pi;Ap=1;As=25;wp=0.4*pi;T=0.001;Fs=1/T;wp=wp/T;ws=ws/T;N=buttord(wp,ws,Ap,As,'s');fprintf('\nN=%d\n',N);wc=wp/((10^(0.1*Ap)-1)^(1/2/N));fprintf('\nwc=%.4e\n',wc);[numa,dena]=butter(N,wc,'s');fprintf('\n');disp('A numerator polynomial');fprintf('%.4e\n',numa);fprintf('\n');disp('A Denominator polynomial');fprintf('%.4e\n',dena);[numd,dend]=impinvar(numa,dena,Fs);w=linspace(0,pi,512);h=freqz(numd,dend,w);norm=max(abs(h));numd1=abs(h)/norm;plot(w/pi,-20*log10(numd1));grid;%xlable('Normalized frequency');%ylable('Gain,dB');fprintf('\n');disp('D numerator polynomial');fprintf('%.4e\n',numd);fprintf('\n');disp('D numerator polynomial');fprintf('%.4e\n',dend);各种滤波器形式的MATLAB参考程序和仿真内容%*******************************************************************%%mode: 1--巴特沃斯低通;2--巴特沃斯高通;3--巴特沃斯带通;4--巴特沃斯带阻% 5--契比雪夫低通;6--契比雪夫高通;7--契比雪夫带通;8--契比雪夫带阻%fp1,fp2:通带截止频率,当高通或低通时只有fp1有效%fs1, fs2:阻带截止频率,当高通或低通时只有fs1有效%rp: 通带波纹系数%as: 阻带衰减系数%sample: 采样率%h: 返回设计好的滤波器系数%*******************************************************************% function[b,a]=iirfilt(mode,fp1,fp2,fs1,fs2,rp,as,sample)wp1=2*fp1/sample;wp2=2*fp2/sample;ws1=2*fs1/sample;ws2=2*fs2/sample;%得到巴特沃斯滤波器的最小阶数N和3bd频率wnif mode<3[N,wn]=buttord(wp1,ws1,rp,as);elseif mode<5[N,wn]=buttord([wp1wp2],[ws1 ws2],rp,as);%得到契比雪夫滤波器的最小阶数N和3bd频率wnelseifmode<7[N,wn]=cheb1ord(wp1,ws1,rp,as);else[N,wn]=cheblord([wp1 wp2],[ws1ws2],rp,as);end%得到滤波器系数的分子b和分母aif mode= =1[b,a]=butter(N,wn);endif mode= =2[b,a]=butter(N,wn,/high/);endif mode= =3[b,a]=butter(N,wn);endif mode= =4[b,a]=butter(N,wn,/stop/);endif mode= =5[b,a]=cheby1(N,rp,wn);endif mode= =6[b,a]=cheby1(N,rp,wn,/high/);endif mode= =7[b,a]=cheby1(N,rp,wn);endif mode= =8[b,a]=cheby1(N,rp,wn,/stop/);endset(gcf,/menubar/,menubar);freq_response=freqz(b,a);magnitude=20*log10(abs(freq_response));m=0:511;f=m*sample/(2*511);subplot(3,1,1);plot(f,magnitude);grid; %幅频特性axis([0 sample/2 1.1*min(magnitude)1.1*max(magnitude)]); ylabel('Magnitude');xlabel('Frequency-->');phase=angle(freq_response);subplot(3,1,2);plot(f,phase);grid; %相频特性axis([0 sample/2 1.1*min(phase)1.1*max(phase)]);ylabel('Phase');xlabel('Frequency-->');h=impz(b,a,32); %32点的单位函数响应t=1:32;subplot(3,1,3);stem(t,h);grid;axis([0 32 1.2*min(h) 1.1*max(h)]);ylabel('h(n)');xlabel('n-->');。

相关文档
最新文档