博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fdatool的滤波器设计
阅读量:6344 次
发布时间:2019-06-22

本文共 1322 字,大约阅读时间需要 4 分钟。

作者:桂。

时间:2017-08-15  20:28:11

链接: 


前言

  本文主要记录滤波器设计的基本流程,涉及到定点/浮点的转化。

一、Fdatool基本操作

  Command输入fdatool,例如FIR采用窗函数法设计16阶低通filter,fc(frequency cutoff) = 10800Hz,fs = 48000Hz,输入参数: 

需要注意的是由于存在常数项,N阶Filter用N-1阶设计即可。

设计完滤波器并不是直接导出,通常需要两个后处理操作:

1)验证滤波器是否符合要求:幅频响应、相频响应,零极点图、群延迟等等,都可以通过上方的Analysis点击查看。

2)系数量化。通常DSP/FPGA需要定点操作,点击左方的量化,进行位数设定。

设计完成之后,可以File——Export,将滤波器参数导出,导出的滤波器格式可以自行选择。

左方的图标功能依次(自上而下)为:

1)Create a multi-rate filter:创建多速率滤波器;

2)Transform filter:滤波器转换;

3)Set quantization parameters:设置量化参数;

4)Realize Model:实现模型;

5)Pole-zero editor:零极点编辑器;

6)import filter:导入滤波器;

7)Design filter:设计滤波器;

 

二、定点/浮点转化

  定点就是位数固定,浮点通常表示为:2.2e8,即xyz的形式,x:常数,y:基底,z:指数。浮点转换为定点在MATLAB中称为量化,使用quantizer和quantize两个函数完成,通常为了便于表示,也会使用num2bin,num2int,num2hex等指令。

1-quantizer

  用于定义数据的量化属性,具体可doc fixedpoint/quantizer,参数详细设定可参考描述:

2-quantize

按照quantizer定义的量化属性量化浮点数据。

以上文的16阶滤波器为例:

有符号数,先放大100倍,整数最大为41:2^6 > 41,最小需要6位整数,又希望扩大100倍后的数据,小数点后精确到0.01(即原数据精度:1e-4),2^-7 < 0.01,即需要7位小数。

共需要位数N = 1符号位+6整数位+7小数位 = 14位,

其中小数m = 7位。

N = 14;m = 7;q = quantizer('fixed','round','saturate',[N,m]);fix_fir = quantize(q,fir_coef*100);[fix_fir;fir_coef*100]

结果可以看出,量化的数据达到了精度要求(上为量化数据,下为原始数据):

有时候为了表示方便,习惯了二进制的表达方式(有符号数,负数用补码表示):

num2bin(q,fix_fir)

  这一操作也为含有小数的负数求解补码提供了思路,打印信息如下(类似指令num2int,num2hex类似):

转载于:https://www.cnblogs.com/xingshansi/p/7367738.html

你可能感兴趣的文章
spring boot 包jar运行
查看>>
18年秋季学习总结
查看>>
Effective前端1:能使用html/css解决的问题就不要使用JS
查看>>
网络攻防 实验一
查看>>
由莫名其妙的错误开始---浅谈jquery的dom节点创建
查看>>
磨刀-CodeWarrior11生成的Makefile解析
查看>>
String StringBuffer StringBuilder对比
查看>>
bootstrap随笔点击增加
查看>>
oracle 中proc和oci操作对缓存不同处理
查看>>
[LeetCode] Spiral Matrix 解题报告
查看>>
60906磁悬浮动力系统应用研究与模型搭建
查看>>
指纹获取 Fingerprint2
查看>>
SB阿里云,windows2012r2无法安装.net3.5
查看>>
函数的继承
查看>>
黑盒测试用例设计方法&理论结合实际 -> 场景法
查看>>
快速打开软件以及文件夹
查看>>
CSS选择符
查看>>
剑指offer---19--***-顺时针打印矩阵
查看>>
关于数组随机不重复的思路
查看>>
oracle赋值问题(将同一表中某一字段赋值给另外一个字段的语句)
查看>>