使用MATLAB设计FIR滤波器

1.      采用fir1函数设计,fir1函数可以设计低通、带通、高通、带阻等多种类型的具有严格线性相位特性的FIR滤波器。语法形式:

b = fir1(n, wn)

b = fir1(n, wn, ‘ftype’)

b = fir1(n, wn, ‘ftype’, window)

b = fir1(n, wn, ‘ftype’, window, ‘noscale’)

参数的意义及作用:

  • b:返回的FIR滤波器单位脉冲响应,脉冲响应为偶对称,长度为n+1;
  • n:滤波器的介数;
  • wn:滤波器的截止频率,取值范围为0<wn<1,1对应信号采样频率一半。如果wn是单个数值,且ftype参数为low,则表示设计截止频率为wn的低通滤波器,如果ftype参数为high,则表示设计截止频率为wn的高通滤波器;如果wn是有两个数组成的向量[wn1 wn2],ftype为stop,则表示设计带阻滤波器,ftype为bandpass,则表示设计带通滤波器;如果wn是由多个数组成的向量,则根据ftype的值设计多个通带或阻带范围的滤波器,ftype为DC-1,表示设计的第一个频带为通带,ftype为DC-0,表示设计的第一个频带为阻带;
  • window:指定使用的窗函数,默认为海明窗;
  • noscale:指定是否归一化滤波器的幅度。

示例:


N=41;      %滤波器长度

fs=2000;   %采样频率

%各种滤波器的特征频率

fc_lpf=200;

fc_hpf=200;

fp_bandpass=[200 400];

fc_stop=[200 400];

%以采样频率的一半,对频率进行归一化处理

wn_lpf=fc_lpf*2/fs;

wn_hpf=fc_hpf*2/fs;

wn_bandpass=fp_bandpass*2/fs;

wn_stop=fc_stop*2/fs;

%采用fir1函数设计FIR滤波器

b_lpf=fir1(N-1,wn_lpf);

b_hpf=fir1(N-1,wn_hpf,‘high‘);

b_bandpass=fir1(N-1,wn_bandpass,‘bandpass‘);

b_stop=fir1(N-1,wn_stop,‘stop‘);

%求滤波器的幅频响应

m_lpf=20*log(abs(fft(b_lpf)))/log(10);

m_hpf=20*log(abs(fft(b_hpf)))/log(10);

m_bandpass=20*log(abs(fft(b_bandpass)))/log(10);

m_stop=20*log(abs(fft(b_stop)))/log(10);

%设置幅频响应的横坐标单位为Hz

x_f=0:(fs/length(m_lpf)):fs/2;

%绘制单位脉冲响应

subplot(421);stem(b_lpf);xlabel(‘n‘);ylabel(‘h(n)‘);

subplot(423);stem(b_hpf);xlabel(‘n‘);ylabel(‘h(n)‘);

subplot(425);stem(b_bandpass);xlabel(‘n‘);ylabel(‘h(n)‘);

subplot(427);stem(b_stop);xlabel(‘n‘);ylabel(‘h(n)‘);

%绘制幅频响应曲线

subplot(422);plot(x_f,m_lpf(1:length(x_f)));xlabel(‘频率(Hz)‘,‘fontsize‘,8);ylabel(‘幅度(dB)‘,‘fontsize‘,8);

subplot(424);plot(x_f,m_hpf(1:length(x_f)));xlabel(‘频率(Hz)‘,‘fontsize‘,8);ylabel(‘幅度(dB)‘,‘fontsize‘,8);

subplot(426);plot(x_f,m_bandpass(1:length(x_f)));xlabel(‘频率(Hz)‘,‘fontsize‘,8);ylabel(‘幅度(dB)‘,‘fontsize‘,8);

subplot(428);plot(x_f,m_stop(1:length(x_f)));xlabel(‘频率(Hz)‘,‘fontsize‘,8);ylabel(‘幅度(dB)‘,‘fontsize‘,8);

2.      采用fir2函数设计,函数算法是:首先根据要求的幅频响应向量形式进行插值,然后进行傅里叶变换得到理想滤波器的单位脉冲响应,最后利用窗函数对理想滤波器的单位脉冲响应激进型截断处理,由此得到FIR滤波器系数。fir2函数的语法形式:

b = fir2(n, f, m)

b = fir2(n, f, m, window)

b = fir2(n, f, m, npt)

b = fir2(n, f, m, npt, window)

b = fir2(n, f, m, npt, lap)

b = fir2(n, f, m, npt, lap, window)

各项参数的意义及作用:

  • n及b:滤波器的介数,返回值b为滤波器系数,长度为n+1。注意:当设计的滤波器在归一化频率为1处的幅度值不为0时,n不能为奇数;
  • f及m:f取值在0~1之间,对应为滤波器的归一化频率;m是长度与f相同的向量,用于设置对应频段范围内的理想幅值;
  • window:用于指定窗函数的种类,默认是海明窗;
  • npt:正整数,用于指定对幅度响应进行插值时的插值点个数,默认是512;
  • lap:正整数,用于指定对幅度响应进行插值时,对于不连续点转变成连续时的点数,默认25

示例:


N=120;                  %滤波器阶数

fc=[0 0.125 0.125 0.25 0.25 0.5 0.5 1];   %截止频率

mag=[1 1 0.5 0.5 0.25 0.25 0.125 0.125 ]; %理想滤波器幅度

b=fir2(N,fc,mag);      %设计海明窗滤波器

freqz(b);              %绘制频率响应曲线

3.      采用kaiserord函数设计,凯塞窗具有可调参数选项,可根据相关算法,先选择过渡带、容限参数,并根据这些参数计算出凯塞窗的值,以及滤波器阶数,语法形式:

[n, wn, beta, filtype] = kaiserord(f, a, dev, fs)

各项参数的意义和作用:

  • f及fs:如果f是一个向量,则其中的元素是待设计的过渡带的起始点和结束点;如果没有fs参数,f中元素的取值范围是0~1,即相对于采样频率一半的归一化频率;如果有fs参数,则fs为信号采样频率,f中元素即为实际的截止频率;
  • a:是一个向量,用于指定过渡带频率段的理想幅度值;
  • dev:是一个向量,用于指定通带或阻带内的容许误差;
  • n:设计的最小阶数;
  • wn:向量,计算得到的滤波器截止频率点;
  • beta:计算得到的值;
  • ftype:根据设计要求得到的滤波器类型参数

4.      采用firpm函数设计,采用最大误差最小准则进行滤波器设计,语法形式:

b = firpm(n, f, a)

b = firpm(n, f, a,w)

b = firpm(n, f, a,’ftype’)

b = firpm(n, f, a, w, ‘ftype’)

[b, delta] = firpm(…)

各项参数的意义及作用:

  • n及b:滤波器阶数;
  • f及a:两个长度相同向量,f取值0~1之间,对应滤波器的归一化频率,a用于设置对应频段范围内的理想幅值;
  • w:长度为f的一半,实现对应频段幅度值的权值;
  • ftype:指定滤波器结构类型,如果没有设置该参数,表示设计偶对称脉冲响应滤波器;如果设置为hilbert,则表示设计奇对称结构的滤波器,具有相移特性;
  • delta:返回滤波器最大容限值

示例:

利用凯塞窗函数设计低通FIR滤波器,过渡带为1000~1500Hz,采样频率为8000Hz,通带容限最大为0.01,阻带容限最大为0.05.利用海明窗及firpm函数设计相同的低通滤波器,截止频率为1500Hz,滤波器阶数为凯塞窗函数求取的值。


fs=8000;         %采样频率

fc=[1000 1500];  %过渡带

mag=[1 0];       %窗函数的理想滤波器幅度

dev=[0.01 0.05]; %纹波

[n,wn,beta,ftype]=kaiserord(fc,mag,dev,fs);  %获取凯塞窗参数

fpm=[0 fc(1)*2/fs fc(2)*2/fs 1];  %firpm函数的频段向量

magpm=[1 1 0 0];                  %firpm函数的幅值向量

%设计凯塞窗及海明窗滤波器

h_kaiser=fir1(n,wn,ftype,kaiser(n+1,beta));

h_hamm=fir1(n,fc(2)*2/fs);

%设计最优滤波器

h_pm=firpm(n,fpm,magpm);

%求滤波器的幅频响应

m_kaiser=20*log(abs(fft(h_kaiser,1024)))/log(10);

m_hamm=20*log(abs(fft(h_hamm,1024)))/log(10);

m_pm=20*log(abs(fft(h_pm,1024)))/log(10);

%设置幅频响应的横坐标单位为Hz

x_f=[0:(fs/length(m_kaiser)):fs/2];

%只显示正频率部分的幅频响应

m1=m_kaiser(1:length(x_f));

m2=m_hamm(1:length(x_f));

m3=m_pm(1:length(x_f));

%绘制幅频响应曲线

plot(x_f,m1,‘-‘,x_f,m2,‘-.‘,x_f,m3,‘--‘);

xlabel(‘频率(Hz)‘);ylabel(‘幅度(dB)‘);

legend(‘凯塞窗‘,‘海明窗‘,‘最优滤波器‘);

grid;

原文地址:https://www.cnblogs.com/xuexizhe/p/9215290.html

时间: 2024-10-11 02:50:21

使用MATLAB设计FIR滤波器的相关文章

Quartus设计FIR滤波器的系数文件格式(适用于FIR II的IP核)

对常用的FIR,我们使用MATLAB的fdatool(或者filterDesigner) 设计滤波器,给定指标,生成系数.为了方便,我们将系数保存到文件,其保存格式比较简介,在此进行说明. 1.FIR II可以读取的文件,格式为系数+逗号,例如下面的3个系数的文件: -0.5,3.0,-0.5 2.注意事项: (1)逗号后面不要加换行.根据FIR II ip核使用手册,两个系数的分隔用逗号(comma)或者空格(space)完成.滤波器bank的分隔用换行(new line)完成.(bank是什

FIR滤波器设计

FIR滤波器的优越性: 相位相应为严格的线性,不存在延迟失真,只有固定的时间延迟: 由于不存在稳定性问题,设计相对简单: 只包含实数算法,不涉及复数算法,不需要递推运算,长度为M,阶数为M-1,计算值约为M/2. 关于FIR滤波器的幅频特性和相频特性.在人们不关心相位时,可以让幅频特性常为正,原来为负的部分只需相位加上pi来补偿. 但当相位很重要,不允许随便增减时,幅频特性就必须区分正负.我们这里称为符幅特性. 符幅特性负值部分向上反褶就和我们平时看到的幅频特性一样,还是满足对称性的. 4类FI

基于MATLAB的IIR滤波器设计与实现

基于MATLAB的IIR滤波器设计与实现 IIR滤波器的设计主要有经典设计法.直接设计法和最大平滑滤波器设计法三种方法. 1.经典设计法是基于模拟滤波器的变换原理,首先根据滤波器的技术指标设计出相应的模拟滤波器,然后再离散化为满足给定技术指标的数字滤波器.对应的工具函数由完全设计函数——butter.cheby1.cheby2.ellip.besself:阶数估计函数——buttord.cheb1ord.cheb2ord.ellipord:低通模拟原型滤波器函数——buttap.cheb1ap.

记录。8,23之fir滤波器设计。

尝试设计FIR滤波器(低通,高通,带通),由5种频率组成的信号,傅里叶变换后的频谱上看,这个滤波器貌似很好. 滤波前信号频谱 低通滤波 高通滤波 带通滤波

转载论文关于fir滤波器的fpga实现

摘 要 本文讨论的FIR滤波器因其具有严格的线性相位特性而得到广泛的应用.在工程实践中,往往要求信号处理具有实时性和灵活性,本论文研究FIR的FPGA解决方案正体现了电子系统的微型化和单片化. 本论文主要讨论了以下的问题: 首先,以FIR滤波器的基本理论为依据,研究适应工程实际的数字滤波器的设计方法,确定了直接型网络结构.窗函数设计法的设计方案: 然后,讨论了FPGA的原理与结构特点,总结FPGA的设计流程与设计原则,并用Verilog HDL语言根据设计方案编写出FIR滤波器程序: 接着,采用

MATLAB设计不同结构的FIR或IIR滤波器

网上很多教程都是使用MATLAB的FDATool工具设计滤波器,然后将系数导出,放到IP核中,由IP核根据数据速率核主处理时钟来决定滤波器的结构.这种设计方式很方便但是不灵活,有时会碰到这种情况:我们需要一个FIR滤波器,数据速率和主处理时钟速率都很高,甚至一样,且滤波器的阶数又很高,这个时候由IP自己来生成滤波器时,会生成全并行滤波器,会占用大量资源,甚至资源都不够用.此时我们希望能自己决定滤波器的结构,从而达到资源和效率相匹配的目的.高手可以自己动手用HDL语言来实现自己所需结构的滤波器,本

数字信号处理实验(六)&mdash;&mdash;FIR滤波器的设计

一.四种线性相位FIR滤波器的振幅响应 1.自编函数 [Hr,w,a,L]=hr_type1(h)(P256) % h偶对称,N为奇数,h(n)=h(N-1-n) [Hr,w,a,L]=hr_type2(h) (P257) % h偶对称,N为偶数,h(n)=h(N-1-n) [Hr,w,a,L]=hr_type3(h) (P257) % h奇对称,N为奇数,h(n)=-h(N-1-n) [Hr,w,a,L]=hr_type4(h) (P257) % h奇对称,N为偶数,h(n)=-h(N-1-n

VIVADO FIR滤波器设计与仿真(二)

VIVADO FIR滤波器设计与仿真(二) 在VIVADO FIR滤波器设计与仿真(一)中产生了两路正弦信号,频率分别为4MHz和5MHz,今天要进行FIR滤波器设计,在进行滤波器设计之前,需要对滤波器的参数进行设置,需要借助MATLAB软件或者Filter Solutions软件,这次使用Filter Solutions来进行参数设定. 关于Filter Solutions软件的使用,这里有一篇博客比较详细的介绍了它的用法,可以作为参考: Filter Solutions之滤波器设计 滤波器参

IIR滤波器和FIR滤波器的区别与联系zz

  -------------------------------------------------------------------------------------------------- 1.两种滤波器都是数字滤波器.根据冲激响应的不同,将数字滤波器分为有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器.对于FIR滤波器,冲激响应在有限时间内衰减为零,其输出仅取决于当前和过去的输入信号值.对于IIR滤波器,冲激响应理论上应会无限持续,其输出不仅取决于当前和过去的输入信号值,