基于FPGA的FIR滤波器的实现(2)—采用kaiserord fir2 firpm函数设计
文章目录
- 前言
- 一、使用kaiserord设计
- 二、使用fir2设计
- fir2函数设计实例
- 三、使用firpm函数设计
- kaiserord & firpm函数的设计实例
前言
本篇文章继续使用matlab设计FIR滤波器,采用kaiserord和fir2来设计滤波器
一、使用kaiserord设计
在前一篇文章中,我们使用了各种窗函数进行了滤波器的设计比较,凯塞窗因为具有可调参数选项,因此可以根据相关算法,先选择过渡带、纹波参数,根据这些参数计算出凯塞窗的β值,以及滤波器阶数
kaiserord函数:
[n,wn,beta,filtype]=kaiserord(f,a,dev,fs)
各项参数的意义:
- f & fs:如果f是一个向量,其中的元素为待设计滤波器的过渡带的起始点和结束点;如果没有fs参数,f中元素的取值范围为0~1,为相对于fs/2的归一化频率;如果有fs参数,则fs为信号采样频率,f中元素即为实际的截止频率。
- a:一个向量,f确定了待设计滤波器的过滤带,向量a用于指定这些频率段的理想幅度值,如要求某个频带为通带,则设置为1,阻带则设置为0;其中a与f的对应关系为:a的第一个参数a1对应为f中的0~f1频段,第二个参数a2对应的是f中的f2-f3频段,以此类推。
- dev:是一个向量,用于指定通带或者阻带内的容许误差
- n:返回值n为函数根据滤波器要求,得到满足设计的最小阶数
- wn:返回值wn是一个向量,函数计算得到的滤波器截止频率点
- beta:返回值beta是计算得到的β值
- 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)
参数意义:
- n和b:滤波器的阶数,与fir1函数类似,返回值b为滤波器系数,长度为n+1,当设计的滤波器在归一化频率为1处的幅度值不为0时,n不能为奇数
- f和m:f是一个向量,取值为0-1之间,对应为滤波器的归一化频率,m是与f长度相同的向量,用于设置对应频段范围内的理想幅值。
- window:指定窗函数的种类
- npt:正整数,用于指定在对幅度响应进行插值时的插值点个数,默认值为512
- 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(...)
参数意义:
- w:长度为f的1/2的向量,表示设计滤波器时,实现对应频段幅度值的权值,w0对应f0-f1频段,w1对应f2-f3频段,依次类推。权值越高,实现时响应频段的幅值越接近理想状态
- ftype:用于指定滤波器的结构类型,如果没有设置该参数,则表示设计偶对称脉冲响应的滤波器;如设置为‘hilbert’,则表示设计及对称结构的滤波器,具有90°的相移特性;如设置为‘differentiator’,则表示设计奇对称结构的滤波器,且设计时针对非零幅度的频带进行了加权处理,使滤波器的频带越低,则幅值误差越小
- 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函数设计相关推荐
- FIR_01 基于FPGA的FIR滤波器 (FDATOOL ISE ) 第一篇:初步认识和应用
1 简介 对于FIR滤波器的理论部分,在本系列博客中不做论述,或许在后续更新的文章中会对其理论进行讨论. 本文为该系列博客的第一篇文章,将以最简单直观的方式让初学者体会到FIR滤波器的作用,采用最傻瓜 ...
- 基于fpga的fir滤波器设计,通过matlab代码设计滤波器参数,最终通过fpga实现
基于fpga的fir滤波器设计,通过matlab代码设计滤波器参数,最终通过fpga实现,modelsim仿真,最后在开发板上实现,两路adc采集的掺杂高频信号经过低通滤波器之后,由dac输出,由si ...
- 基于FPGA的FIR滤波器的实现(5)— 并行结构FIR滤波器的FPGA代码实现
书接上回 三.并行结构的FPGA实现 设计实例 1.matlab参数与数据 2.使用Verilog编写并行结构的FIR滤波器 3.使用matlab将产生的程序进行仿真验证 三.并行结构的FPGA实现 ...
- 数字信号处理相关4(FPGA实现FIR滤波器)
来自:https://blog.csdn.net/u014783685/article/details/74466107 1.FIR滤波器总体设计 本设计是基于FPGA实现一个8阶的FIR数字低通滤波 ...
- 基于xilinx-IP的FIR滤波器多通道实现
前言 作为一个有一定工作经验(划水好多年)的FPGA工程师,很多模块都已经学习过或者使用过,但是如果让我重新实现,感觉又是一脸懵.因此,这是我发文档的原因.对于自己来说,这是一个总结归纳的过程,对读者 ...
- 【 FPGA 】FIR滤波器的采样速率与系统时钟速率不同时的资源消耗分析
目录 MATLAB操作 Vivado操作 MATLAB操作 在matlab中命令窗口中输入:filterDesigner,设计如下参数的带通滤波器: 在左侧第三个功能设置:Set quantizati ...
- 【 FPGA 】FIR滤波器目录
国庆七天的假期过完了,这短时间我一直在放松,本来想花两天时间把导师让我查看的Xilinx官方数据手册之FIR滤波器相关内容看完,可之后的实践过程发现我好像小看这部分内容在FPGA设计中的分量了,细节很 ...
- 【 FPGA 】FIR 滤波器结构和优化(二)之系数填充(Coefficient Padding)
赛灵思官方文档中在讲乘累加器(MAC)(也就是在这篇博文中的乘累加器:[ FPGA ]FIR 滤波器的架构)时,有一段话是对系数填充的简单叙述,当时我没有写进那篇博文中去,我觉得放到那里会让我的博文变 ...
- 【 FPGA 】FIR滤波器开篇之传统抽头延迟线FIR滤波器实现介绍
滤波器原理:滤波器就是对特定的频率或者特定频率以外的频率进行消除的电路,被广泛用于通信系统和信号处理系统中.从功能角度,数字滤波器对输入离散信号的数字代码进行运算处理,以达到滤除频带外信号的目的. 有 ...
最新文章
- TypeError: Input 'b' of 'MatMul' Op has type float32 that does not match type int32 of argument 'a'.
- linux相等路径,关于linux:如何检查Bash中两条路径是否相等?
- All about OpenGL ES 2.x – (part 2/3)(转载)
- 45页的NAS神经网络搜索的综述,请查收!
- oracle中调试存储过程,详解Oracle调试存储过程
- 硒测试中所需的功能和示例
- Java DB中的Java用户定义类型(UDT)
- Python Cookbook手记II
- leetcode链表中的两数相加问题
- (转)cd命令为何要实现成shell内建命令
- 16进制 转为图片 php_PHP实现简单RPC
- Java多线程编程之Active Object模式
- 高考为什么考计算机信息,信息技术是否应该进入高考?
- 有钱任性的农夫山泉,被迫踏上IPO?
- AutoCAD Civil 3D-加宽与超高
- VA_X的EnterKey解决
- 黑马程序员——java基础之抽象与接口
- 系统定时重启服务脚本案例
- 世界上最神奇的数字 算法求解
- spring源码框架
热门文章
- 运动设施管理系统er图
- android 8.1 Launcher3 去掉抽屉式,显示所有 app
- Pearson(皮尔逊)相关系数
- 杰理之如何离线安装杰理编译器?【篇】
- C4D无法修改参数?所有参数都是灰色无法修改?
- mysql5.5.27安装设置_mysql 5.5.27 winx64安装配置方法图文教程
- STM32实现双通道ADC采集电压电流值
- 进位计数制(思维导图)
- Android视频播放器Google Exoplayer
- 机器学习--线性回归3(使用LAR算法进行求解Lasso算法)