zoukankan      html  css  js  c++  java
  • 复数相位近似估计

    作者:桂。

    时间:2018-01-27  19:58:10

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


    前言

    主要记录几种复数相位计算的方法,暂未做进一步的比较分析。

    一、逼近简述

      复数相位估计的问题可表述为:

    已知z = x+iy,arctan(y/x) = ?

      复数相位估计,指标主要有三个:1)运算量;2)处理时间;3)估值精度。

      相位估计算法大致可分为三类:

    • 级数展开:如taylor展开
    • 迭代求解:如CORDIC
    • 有理函数逼近:如pade逼近

      常用的CORDIC算法特点是消耗资源少,但当精度要求较高时需要多个迭代周期,典型的以时间换空间,消耗的内存少。taylor级数展开:

    或者euler展开:

    但利用级数无穷项展开,需要的乘法器资源巨大,即使舍去高阶项也需要较多阶数,工程应用不理想,且展开式可能仅局部收敛。取而代之的思路是:做一个LUT,将计算得到的x/y做插值处理,以相位误差小于1e-4rad为例,需要内存(数据取18bit)约为:31415*18/8/1024 = 69kb。更常用的一个思路是,利用arctan的基本性质:

    从而将x的求解缩小至abs(x)<=1的范围,这样做LUT需要的内存则更少。

      对于多项式逼近(注意:逼近分最佳一致逼近、最佳有理逼近,不在展开)的思想,多项式逼近的知识属于:数值分析的范畴,可系统学习该学科知识来掌握,推荐较多的教材为:

    利用pade近似,可得到arctan的逼近公式:

    该逼近的效果:whose maximum error is on the order of 0.003 degrees when | θ | ≤ π /4 radians ,当然也可以更低/高阶次。

    syms x
    func = (x + 0.372003*x^3)/(1+0.703384*x^2+0.043562*x^4);
    taylor(func,'order',5)
    taylor(atan(x),'order',5)
    

      

    关于常用公式的工程快速计算,可参考剑桥出版社的:

     二、几种常用算法

      A-文献: Another Contender in the Arctangent Race

     主要思想仍然是pade逼近:

    进一步化简:

    其中I、Q是复数的实、虚部,对于4个象限,利用arctan的特性均分8个区域:

     

    不同区域的求解思路:

     该算法仅需要3个实数乘法和一次除法即可完成求解,缺点是估计误差较大:

      B-文献:Efficient Approximations for the Arctangent Function

    本文仍然是多项式逼近的思想,借助朗格朗日插值、minmax优化(感觉它这里的优化就是在暴力搜索),得到逼近函数。一阶近似:

    最大误差为0.22°。考虑提高精度,可增加逼近的阶次,三次为例: 

    三阶需要1次除法、3次乘法。该结果相比A文献的方法,误差更小。A文献对应(10),B文献对应(9):

      C-文献:Fast Computation of arctangent Functions for Embedded Applications: A Comparative Analysis

     四个象限的计算:

    首先造1个表,文中给出的size = 100,主要算法框图:

    LUT基础上,借助线性插值,完成相位估计:

    该算法需要1次除法、1次乘法,考虑到时序,若不对I、Q的大小做判断,可同时计算Q/I 、I/Q除法器为2个,上面的其他算法也是如此。

      D-文献:Fast- and Low-Complexity atan2(a,b) Approximation

     令c = b + ja,从正弦函数切入:

    通过定位极值点即可估计theta:

     

    前提是T已知,作者假设均匀采样的采样周期T = 4(即每个周期内采样4个点,b a -b -a):

    利用梯度为零,定位极值点,经过推导,作者得出(fr为极值点位置的近似):

    p(1)、p(0)对应函数的离散采样:

    不同象限的对应关系:

    atan的近似公式为:

    其中,offset = 2*not(b0)+not(xor(b1,b0)),用该方法估计相位,最大角度误差为±4.07°,因此作者在这一步的基础上,添加查表修正(second-stage),整个的算法框图为:

    测试code:

    表格尺寸与估值精度:

    该算法提供了相位粗估计 + 精估计的实现思路,除了第一步的粗估计,作者给出了理论解释,个人觉得该算法工程实现意义不大。b/a or a/b之后直接查表,在精度0.001°的情况下,直接查表的LUT也就4kb左右(视有效位数而定)。

  • 相关阅读:
    Elastic-Job
    Redis之Ubuntu下Redis集群搭建
    设计模式之单例模式
    设计模式之简单工厂模式
    Java集合(一)HashMap
    数据结构和算法(四)归并排序
    数据结构和算法(三)希尔排序
    数据结构和算法(二)插入排序
    博客转移通知
    C语言回调函数总结
  • 原文地址:https://www.cnblogs.com/xingshansi/p/8367519.html
Copyright © 2011-2022 走看看