文章目录

  • 前言
  • 一、使用kaiserord设计
  • 二、使用fir2设计
    • fir2函数设计实例
  • 三、使用firpm函数设计
    • kaiserord & firpm函数的设计实例

前言

本篇文章继续使用matlab设计FIR滤波器,采用kaiserord和fir2来设计滤波器

一、使用kaiserord设计

在前一篇文章中,我们使用了各种窗函数进行了滤波器的设计比较,凯塞窗因为具有可调参数选项,因此可以根据相关算法,先选择过渡带、纹波参数,根据这些参数计算出凯塞窗的β值,以及滤波器阶数
kaiserord函数:

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

各项参数的意义:

  1. f & fs:如果f是一个向量,其中的元素为待设计滤波器的过渡带的起始点和结束点;如果没有fs参数,f中元素的取值范围为0~1,为相对于fs/2的归一化频率;如果有fs参数,则fs为信号采样频率,f中元素即为实际的截止频率。
  2. a:一个向量,f确定了待设计滤波器的过滤带,向量a用于指定这些频率段的理想幅度值,如要求某个频带为通带,则设置为1,阻带则设置为0;其中a与f的对应关系为:a的第一个参数a1对应为f中的0~f1频段,第二个参数a2对应的是f中的f2-f3频段,以此类推。
  3. dev:是一个向量,用于指定通带或者阻带内的容许误差
  4. n:返回值n为函数根据滤波器要求,得到满足设计的最小阶数
  5. wn:返回值wn是一个向量,函数计算得到的滤波器截止频率点
  6. beta:返回值beta是计算得到的β值
  7. ftype:返回值ftype是获得的滤波器类型参数

二、使用fir2设计

使用fir1和kaiserord函数无法解决任意响应滤波器的设计;
任意相应滤波器:指滤波器的幅度频率响应在指定的频段范围内有不同的幅值。fir2函数首先根据要求的幅频响应的向量形式进行插值,而后进行傅里叶变换得到理想滤波器的单位脉冲响应,最后利用窗函数对理想滤波器的单位脉冲响应进行截短处理,获得滤波器的系数。
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)

参数意义:

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

fir2函数设计实例

eg:利用fir2函数设计120阶的FIR滤波器,要求设计的滤波器在归一化频率0-0.125范围内幅度为1,在0.125-0.25范围内幅度为0.5,在0.25-0.5范围内幅度为0.25,在0.5-1范围内幅度为0.125

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);               %绘制频率响应函数

频率响应曲线为:

三、使用firpm函数设计

firpm对应的是最优滤波器设计方法
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(...)

参数意义:

  1. w:长度为f的1/2的向量,表示设计滤波器时,实现对应频段幅度值的权值,w0对应f0-f1频段,w1对应f2-f3频段,依次类推。权值越高,实现时响应频段的幅值越接近理想状态
  2. ftype:用于指定滤波器的结构类型,如果没有设置该参数,则表示设计偶对称脉冲响应的滤波器;如设置为‘hilbert’,则表示设计及对称结构的滤波器,具有90°的相移特性;如设置为‘differentiator’,则表示设计奇对称结构的滤波器,且设计时针对非零幅度的频带进行了加权处理,使滤波器的频带越低,则幅值误差越小
  3. delta:返回的滤波器的最大纹波值

kaiserord & firpm函数的设计实例

eg:利用凯塞窗函数设计一个低通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;

幅度频率响应曲线

如图,使用kaiserord函数获得的滤波器的阶数为36,截止频率为0.3125,凯塞窗的β值为3.3953.

基于FPGA的FIR滤波器的实现(2)—采用kaiserord fir2 firpm函数设计相关推荐

  1. FIR_01 基于FPGA的FIR滤波器 (FDATOOL ISE ) 第一篇:初步认识和应用

    1 简介 对于FIR滤波器的理论部分,在本系列博客中不做论述,或许在后续更新的文章中会对其理论进行讨论. 本文为该系列博客的第一篇文章,将以最简单直观的方式让初学者体会到FIR滤波器的作用,采用最傻瓜 ...

  2. 基于fpga的fir滤波器设计,通过matlab代码设计滤波器参数,最终通过fpga实现

    基于fpga的fir滤波器设计,通过matlab代码设计滤波器参数,最终通过fpga实现,modelsim仿真,最后在开发板上实现,两路adc采集的掺杂高频信号经过低通滤波器之后,由dac输出,由si ...

  3. 基于FPGA的FIR滤波器的实现(5)— 并行结构FIR滤波器的FPGA代码实现

    书接上回 三.并行结构的FPGA实现 设计实例 1.matlab参数与数据 2.使用Verilog编写并行结构的FIR滤波器 3.使用matlab将产生的程序进行仿真验证 三.并行结构的FPGA实现 ...

  4. 数字信号处理相关4(FPGA实现FIR滤波器)

    来自:https://blog.csdn.net/u014783685/article/details/74466107 1.FIR滤波器总体设计 本设计是基于FPGA实现一个8阶的FIR数字低通滤波 ...

  5. 基于xilinx-IP的FIR滤波器多通道实现

    前言 作为一个有一定工作经验(划水好多年)的FPGA工程师,很多模块都已经学习过或者使用过,但是如果让我重新实现,感觉又是一脸懵.因此,这是我发文档的原因.对于自己来说,这是一个总结归纳的过程,对读者 ...

  6. 【 FPGA 】FIR滤波器的采样速率与系统时钟速率不同时的资源消耗分析

    目录 MATLAB操作 Vivado操作 MATLAB操作 在matlab中命令窗口中输入:filterDesigner,设计如下参数的带通滤波器: 在左侧第三个功能设置:Set quantizati ...

  7. 【 FPGA 】FIR滤波器目录

    国庆七天的假期过完了,这短时间我一直在放松,本来想花两天时间把导师让我查看的Xilinx官方数据手册之FIR滤波器相关内容看完,可之后的实践过程发现我好像小看这部分内容在FPGA设计中的分量了,细节很 ...

  8. 【 FPGA 】FIR 滤波器结构和优化(二)之系数填充(Coefficient Padding)

    赛灵思官方文档中在讲乘累加器(MAC)(也就是在这篇博文中的乘累加器:[ FPGA ]FIR 滤波器的架构)时,有一段话是对系数填充的简单叙述,当时我没有写进那篇博文中去,我觉得放到那里会让我的博文变 ...

  9. 【 FPGA 】FIR滤波器开篇之传统抽头延迟线FIR滤波器实现介绍

    滤波器原理:滤波器就是对特定的频率或者特定频率以外的频率进行消除的电路,被广泛用于通信系统和信号处理系统中.从功能角度,数字滤波器对输入离散信号的数字代码进行运算处理,以达到滤除频带外信号的目的. 有 ...

最新文章

  1. TypeError: Input 'b' of 'MatMul' Op has type float32 that does not match type int32 of argument 'a'.
  2. linux相等路径,关于linux:如何检查Bash中两条路径是否相等?
  3. All about OpenGL ES 2.x – (part 2/3)(转载)
  4. 45页的NAS神经网络搜索的综述,请查收!
  5. oracle中调试存储过程,详解Oracle调试存储过程
  6. 硒测试中所需的功能和示例
  7. Java DB中的Java用户定义类型(UDT)
  8. Python Cookbook手记II
  9. leetcode链表中的两数相加问题
  10. (转)cd命令为何要实现成shell内建命令
  11. 16进制 转为图片 php_PHP实现简单RPC
  12. Java多线程编程之Active Object模式
  13. 高考为什么考计算机信息,信息技术是否应该进入高考?
  14. 有钱任性的农夫山泉,被迫踏上IPO?
  15. AutoCAD Civil 3D-加宽与超高
  16. VA_X的EnterKey解决
  17. 黑马程序员——java基础之抽象与接口
  18. 系统定时重启服务脚本案例
  19. 世界上最神奇的数字 算法求解
  20. spring源码框架

热门文章

  1. 运动设施管理系统er图
  2. android 8.1 Launcher3 去掉抽屉式,显示所有 app
  3. Pearson(皮尔逊)相关系数
  4. 杰理之如何离线安装杰理编译器?【篇】
  5. C4D无法修改参数?所有参数都是灰色无法修改?
  6. mysql5.5.27安装设置_mysql 5.5.27 winx64安装配置方法图文教程
  7. STM32实现双通道ADC采集电压电流值
  8. 进位计数制(思维导图)
  9. Android视频播放器Google Exoplayer
  10. 机器学习--线性回归3(使用LAR算法进行求解Lasso算法)