• fdatool的滤波器设计


    作者:桂。

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

    链接:http://www.cnblogs.com/xingshansi/p/7367738.html 


    前言

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

    一、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类似):

  • 相关阅读:
    shell编程——循环执行
    ubuntu 设置管理 集锦
    27. 计算FPS
    29 GameProject4(+GUI)
    26. D3D显示文本
    30. D3D特效
    28. GUI
    32. 细节映射
    25. GameProject3
    Direct3D渲染到纹理 (部分转)
  • 原文地址:https://www.cnblogs.com/xingshansi/p/7367738.html
Copyright © 2020-2023  润新知