0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在软件中实现高精度NCO

星星科技指导员 来源:嵌入式计算设计 作者:Patrick Butler 2022-11-28 17:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在本系列的第1部分中,我们将了解如何设计基于直接数字频率合成(DDFS)原理的非常精确的正弦波发生器,但在浮点DSP处理器上通过软件实现。在第 2 部分中,我们将介绍如何在软件中实现高精度 NCO。

构建具有与最佳模拟振荡器相似或更好的失真性能的高精度交流音发生器,如最著名的惠普分析仪或应用笔记AN-1323中所述,即使专用于音频频谱(直流至20 kHz范围),也不是一件小事。然而,如前所述,使用嵌入式处理器的足够算术精度执行相位计算(ωt)和正弦函数(sin(ωt))近似的完整软件实现肯定有助于最大限度地减少量化副作用,噪声和由此产生的杂散。这意味着图2中的所有NCO功能块都转换为代码行(无VHDL!),以实现满足实时约束的软件版本,以确保最小采样率和所需的频率带宽。

对于相位到正弦幅度转换引擎,完整的LUT方案或任何变化都需要太多的内存或太多的插值操作才能实现完美的正弦一致性。相反,正弦近似的多项式方法允许使用成本非常低的通用DSP,从而提供了非常好的复杂度与精度权衡。多项式级数扩展也非常有吸引力,因为它相对简单,并且能够在选择幂级数类型时提供充分的灵活性,为给定精度定制算法。它不需要大的内存空间,少于100行SHARC DSP装配线,只需要几个RAM位置来存储多项式系数和变量,因为正弦值仅在采样时计算。

首先,正弦近似函数的明显选择是使用具有适当顺序的直泰勒/麦克劳林幂级数来满足目标精度。但是,由于幂级数往往会在端点上失去有效性,因此在执行任何多项式计算之前,必须将参数输入范围减小到较小的间隔。如果不减少参数范围,函数域(如 [–π, +π] )上的高精度只能通过非常高阶多项式来支持。因此,需要将一些变换应用于初等函数以获得简化的参数,例如 sin(|x|) = sin(f + k × π/2) 和 sin(f) = sin(x – k × π/2) 为 0 ≤f《π/2。因此,三角函数应格外小心,以避免减法抵消,这将导致精度严重损失并产生灾难性结果,尤其是在算术精度较差的情况下。在我们的例子中,当相位输入很大或接近π/2的整数倍时,可能会发生这种情况。

除了周期性和模-2π重复之外,sin(x)函数的对称性质还可以用于进一步缩小近似范围。鉴于正弦函数在区间 [0, 2π] 的点 x = π 上是反对称的,因此可以使用以下关系:

poYBAGOEeiCAVOMpAAAO71CehYc498.jpg

将范围减小到 [0, π]。以同样的方式,sin(x) 显示了区间 [0, π] 由 x = π/2 定义的直线的对称性,使得:

poYBAGOEeiGAIG0pAAASvJEQtmU260.jpg

对于区间 [0, π/2] 中的 x,这进一步减小了角度输入近似范围。进一步将参数简化为较小的区间(如 [0, π/4] 以提高精度是没有效率的,因为它需要同时计算正弦和余弦函数,这是由共同三角关系决定的:sin(a+b) = sin(a) × cos(b) + cos(a) × sin(b),这对于生成正交音来说是值得的。

ADI公司的ADSP-21000系列应用手册第1卷介绍了一种几乎理想的(用于嵌入式系统)正弦逼近函数,该函数基于为首款ADI DSP浮点处理器(即ADSP-21020)编写的优化功率级数,该处理器基本上是一个SHARC内核。sin(x) 的这种实现依赖于由 Hart 等人发表的最小最大多项式近似4,并由 Cody 和 Waite5 改进用于浮点运算,以减轻舍入误差并避免发生前面提到的取消。最小最大值方法依赖于切比雪夫多项式和雷梅兹交换算法来确定所需最大相对误差的系数。如图 3 中的 MATLAB 所示,与 Taylor 的七阶泰勒多项式相比,设定系数的微小变化会导致最小最大值的精度显着提高.6 为了获得最佳精度与速度权衡,此正弦近似函数的角度输入范围缩小到 [–π/2 到 +π/2] 区间,并且软件例程包括一个高效的范围缩小滤波器, 约占总“正弦”子例程执行时间的 30%。

pYYBAGOEeiOAaiiSAADRCBInrfA731.jpg

图3.与在 0 左右定义的 Taylor-MacLaurin 方法不同,最小最大值正弦近似方法最小化并均衡了 [–π/2 至 +π/2] 区间内的最大相对误差。

虽然所有的计算都可以用32位定点算法执行,但数学计算最常见和最方便的格式,特别是在处理长数时,多年来一直是IEEE 754浮点标准。当时,根本没有单芯片浮点DSP处理器,只有简单的浮点乘法器和ALU计算IC,例如ADSP-3212和ADSP-3222。这种格式取代了计算机行业的大多数专有格式,并成为所有SHARC DSP处理器的原生格式,包括单精度32位、扩展精度40位,以及最近ADSP-SC589和ADSP-SC573的双精度64位。

SHARC 40 位扩展单精度浮点格式及其 32 位尾数为这种正弦波生成应用提供了足够的精度 (u 2–32),为了保持相等,Cody 和 Waite 表明,15 阶多项式适用于 32 位的整体精度,在 [0 到 +π/2] 输入域上均匀分布误差。最小化操作次数并保持准确性的最后一个调整是实现多项式计算的霍纳规则,这是一种快速幂法,用于评估一个点的多项式,例如:

poYBAGOEeiSAczhMAABOVzmjZOk389.jpg

R1 到 R7 是多项式级数的 Cody 和 Waite 系数,只需要 8 次乘法和 7 次加法即可计算任何输入参数 ε[0, π/2] 的正弦函数。以汇编子例程形式编写的完整 sin(x) 近似代码在 SHARC 处理器上以大约 22 个内核周期执行。原始程序集子例程经过修改,以便在获取 40 位多项式浮点系数时同时执行双内存访问,以节省六个周期。

poYBAGOEeiaAJX2hAAIfikYdLDs166.jpg

图4.DDS软件简化框图给出了数据算术格式和处理元件之间各种量化步骤的位置。

NCO 64 位相位累加器本身正在利用双精度 2 补码分数格式的 SHARC 32 位 ALU 来执行。一个完整的相位累加器执行和内存更新需要 11 个内核周期,因此,每个 NCO 输出样本在大约 33 个内核周期内生成。

图4中的图表显示了基于DSP的软件NCO的功能块实现,并参考了每个阶段的算术格式精度。此外,信号模拟重建需要一个或两个DAC及其模拟抗混叠滤波器电路,并实现完整的DDFS。处理链的关键要素是:

64位相位累加器(带溢流的SHARC ALU双精度加法);

64位小数定点到40位FP转换模块;

范围缩小块 [0 到 + π/2] 和象限选择(科迪和韦特);

用于相位到幅度转换的正弦近似算法(Hart);

–1.0 至 +1.0 范围内的 sin(x) 重建和归一化阶段;

LP FIR 滤波器和 sin(x)/x 补偿(如有必要);

以及 40 位 FP 到 D 位定点转换和缩放功能,以适应 DAC 数字输入。

可以在NCO的输出端放置一个可选的数字低通滤波器,以消除可能在目标频带中折叠的任何杂散和噪声。或者,该滤波器可以提供插值和/或反sin(x)/x频率响应补偿,具体取决于为模拟重建选择的DAC。这种低通FIR滤波器可以使用MATLAB滤波器设计器工具进行设计。例如,假设采样频率为48 kSPS,直流至20 kHz带宽,带内纹波为0.0001 dB,带外衰减为–150 dB,则可以使用40位浮点系数实现高质量的等纹波滤波器。由于只有 99 个滤波器系数,其总执行时间将在单指令、单数据 (SISD) 单计算单元模式下消耗约 120 个 SHARC 内核周期。数字滤波后,DMA使用其中一个DSP同步串行端口将计算出的样本对发送到DAC。为了获得更好的速度性能,还可以使用大型乒乓内存缓冲区链接 DMA 操作,以支持按块操作进行处理。例如,块数据大小可以等于 FIR 数据延迟线的长度。

NCO 的最终调整以实现最佳 SFDR

如前所述,NCO受到杂散的影响主要是由于相位累加器输出的截断,以及在较小程度上,由于通过计算或制表获得的正弦值进行的幅度量化。相位截断引起的误差通过相位调制(锯齿波)在载波频率附近产生杂散,而正弦幅度量化会导致谐波相关的杂散,尽管长期以来被认为是随机误差和噪声。今天,相位累加器的操作在数学上是完美的,正如Henry T. Nicholas和H. Samueli的技术论文7中所描述的那样。经过彻底分析后,提出了一个模型,使得相位累加器被认为是离散相位采样置换发生器,从中可以预测频率杂散。无论相位累加器参数(M、N、W)如何,相序的长度都等于

pYYBAGOEeiiABw2AAAAP2zUKul4147.jpg

(其中GCD是最大公约数)由频率调谐字M的最右边位位置L决定,如图4所示。因此,L 的值定义了序列类,每个序列类共享自己的一组相位分量,但根据

pYYBAGOEeiiABw2AAAAP2zUKul4147.jpg

率。这些在时域中生成的截断相位样本序列用于通过DFT确定频域中每条杂散线的相应位置和幅度。这些序列还表明,M(FTW)的奇数值表现出最低频率杂散的幅度,并建议对相位累加器进行简单的修改,只需在FTW中添加1 LSB即可满足这些最小条件。这样,无论相位累加器的M值和初始内容如何,相位累加器输出序列都被迫始终具有相同的2N相位元件。然后,最差杂散音幅度的电平降低3.922 dB,等于SFDR_min(dBc)= 6.02 × W。Nicholas改进的相位累加器为NCO带来了几个好处,因为首先它消除了FTW最右边太接近其MSB(FMCW应用中的频率扫描)的情况,其次,它使杂散的幅度与频率调谐字M无关。通过在采样速率fS下切换ALU LSB,可以在软件中轻松实现这种修改,可以模拟相位累加器的相同行为,就像FTW LSB设置为逻辑1一样。当相位累加器大小N = 64位时,1/2 LSB偏移可以被认为是关于所需频率FOUT精度的可忽略不计的误差。

poYBAGOEeiqAOA5-AAHt_1dnCxc117.jpg

图5.FTW 最右边的非零位的位置设置了理论上的 SFDR 最坏情况水平。尼古拉斯修改的相位累加器解决了N的任何值的问题,并使NCO的SFDR最大化。

输出相位字W为32位时,相位截断导致的最大杂散幅度被限制在–192 dBc!正弦采样值的有限量化也会导致另一组频率杂散,它通常被认为是噪声,并通过众所周知的关系SNRq(dB)= 6.02 × D + 1.76进行估计。由于相位-正弦幅度转换算法级的近似误差,必须将其添加到寄生元件中,但是,考虑到在选择相位-正弦近似算法和计算精度时非常谨慎,该误差被认为是可以忽略不计的。

这些结果表明,我们的软件正弦NCO的线性度和噪声都处于理论水平,远远超出了测试市场上大多数高精度ADC所需的阈值。信号链中最后一个但最关键的元件还有待找到:重建DAC及其互补模拟抗混叠滤波器以及相关的驱动器电路,这些电路很容易满足预期的性能水平。

在本系列的第3部分中,我们将介绍如何选择重建DAC并完成DDFS系统。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    20150

    浏览量

    247270
  • dsp
    dsp
    +关注

    关注

    559

    文章

    8217

    浏览量

    364030
  • 振荡器
    +关注

    关注

    28

    文章

    4156

    浏览量

    142331
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    铁路巡检升级:云翎智能高精度执法记录仪+指挥调度系统实现故障秒级响应

    针对铁路巡检定位精度不足、响应滞后及数据可信度低等痛点,云翎智能的高精度执法记录仪与指挥调度系统的协同解决方案。通过北斗RTK厘米级定位、多模态传感器融合及5G/卫星双通道通信,实现
    的头像 发表于 07-29 22:37 604次阅读
    铁路巡检升级:云翎智能<b class='flag-5'>高精度</b>执法记录仪+指挥调度系统<b class='flag-5'>实现</b>故障秒级响应

    何在狭小空间实现0.25°高精度寻北?

    在巷道掘进、地下钻探、卫星天线跟踪等场景,传统寻北设备往往因体积庞大或精度不足而难以满足需求。ER-MNS-05C MEMS寻北系统突破技术瓶颈,采用最新MEMS陀螺技术,将高精度寻北功能浓缩至极
    的头像 发表于 06-26 18:01 438次阅读
    如<b class='flag-5'>何在</b>狭小空间<b class='flag-5'>实现</b>0.25°<b class='flag-5'>高精度</b>寻北?

    探索直线电机模组实现高精度的四大要素

    在工业自动化进程,直线电机模组凭借其高效、精准的直线运动输出,成为众多高端制造领域的核心驱动部件。直线电机模组的高精度特性是确保生产质量与效率的核心。从半导体芯片制造的纳米级光刻工艺,到高端
    的头像 发表于 06-13 11:28 686次阅读
    探索直线电机模组<b class='flag-5'>实现</b><b class='flag-5'>高精度</b>的四大要素

    方案分享 | 高精度时间同步技术的实现与应用

    如何通过硬件级PTSS/CTSS技术实现亚微秒级时间同步,支持多传感器数据精准对齐?PSB+QX550方案采用GPS/PPS/本地时钟冗余设计,具备动态容错功能,适用于自动驾驶测试等需要高精度时间同步的场景。
    的头像 发表于 05-28 09:49 1914次阅读
    方案分享 | <b class='flag-5'>高精度</b>时间同步技术的<b class='flag-5'>实现</b>与应用

    如何实现高精度、高可靠性的隔离式电流/电压测量?如何在紧凑布局中平衡性能与成本?如何应对EMI干扰与安

    在工业控制、新能源汽车、伺服驱动等高压系统设计,如何实现高精度、高可靠性的隔离式电流/电压测量?如何在紧凑布局中平衡性能与成本?如何应对EMI干扰与安全合规挑战?德州仪器(TI)重磅
    的头像 发表于 04-19 14:47 1385次阅读

    高精度交流充电桩负载方案

    随着新能源汽车充电功率需求的持续攀升,交流充电桩的测试精度直接影响着设备认证与电网交互质量。高精度负载系统需在宽电压范围(85-264V AC)、全功率段(3.3-22kW)内实现±0.1%级别
    发表于 04-15 11:07

    汽车制造又一革新:Profinet-EtherCAT实现高精度激光焊接

    通过稳联技术Profinet到EtherCAT网关,将PLC控制系统与激光焊接机器人连接,实现高精度的汽车车身焊接。
    的头像 发表于 04-12 11:05 514次阅读

    白皮书:在HMI应用实现高精度电容式触摸传感器

    在HMI 应用实现高精度电容式触摸传感器
    的头像 发表于 03-17 16:46 1781次阅读
    白皮书:在HMI应用<b class='flag-5'>中</b><b class='flag-5'>实现</b><b class='flag-5'>高精度</b>电容式触摸传感器

    如何对电压进行高精度测试

    高达0.05%FS、带宽高达100kHz,可满足宽频带、高精度电压测试需求。 高精度测试范围 常规的电压传感器均为满量程精度标称,半量程以下测试时偏差较大,难以满足宽范围测试应用需求。VS高精
    的头像 发表于 03-17 11:08 897次阅读
    如何对电压进行<b class='flag-5'>高精度</b>测试

    高精度晶圆划片机切割解决方案

    高精度晶圆划片机切割解决方案为实现高精度晶圆切割,需从设备精度、工艺稳定性、智能化控制等多维度优化,以下为关键实现路径及技术支撑:一、核心
    的头像 发表于 03-11 17:27 733次阅读
    <b class='flag-5'>高精度</b>晶圆划片机切割解决方案

    零知开源——ESP8266结合ICM20948实现高精度姿态解算

    IMU惯性测量单元,融合加速度计、陀螺仪和磁力计的核心传感器,实现高精度姿态解算
    的头像 发表于 03-07 14:09 2040次阅读
    零知开源——ESP8266结合ICM20948<b class='flag-5'>实现</b><b class='flag-5'>高精度</b>姿态解算

    UWB高精度定位技术在智能仓储的应用

    UWB高精度定位系统结合RFID和ERP软件,优化仓储管理,实现厘米级定位、抗干扰、低功耗安全,提升仓储效率40%,减少误差,未来应用场景更广,推动智能仓储进入精准高效新时代。
    的头像 发表于 01-22 17:30 1025次阅读

    ads1278高速模式和高精度模式下所能得到的最高精度是多少?

    差分电路是正确的吗,好像和ths4521的datasheet里面的单端转差分原理图(如下图)不一致吧。 另外,想请教一下ads1278高速模式和高精度模式下所能得到的最高精度是多少。根据你们给的信噪比和精度之间换算的公式,
    发表于 01-16 07:41

    请问ADS1263能做到多高精度实现高精度应该注意什么?

    我想实现每通道10K以上采样率,测量范围为-500mV ~+500mV,请问ADS1263能做到多高精度实现高精度应该注意什么,比如电压基准源应该选用什么器件?应该选用什么电源器件
    发表于 01-01 06:28

    最新高精度压力传感器技术趋势 高精度压力传感器在汽车工业的应用

    的安装空间。 微型化传感器具有更低的功耗、更高的灵敏度和更快的响应速度,能够满足高精度测量的需求。 智能化与网络化 : 随着物联网技术的发展,高精度压力传感器也在逐步实现智能化和网络化。 通过集成微处理器、无线通信模
    的头像 发表于 12-12 14:54 1509次阅读