assembly - 在微 Controller 上逼近两个平方和的平方根

标签 assembly signal-processing microcontroller numerical-methods

为了好玩,我正在 8 位微 Controller (HCS08) 上实现 FFT 算法。算法完成后,我将有一个 8 位实数/虚数对的数组,我想找出每个值的大小。也就是说,如果 x 是复数,我想找到

|x| = sqrt(Re{x}^2 + Im{x}^2)  

现在我可以使用一个 16 位寄存器和一个 8 位寄存器。我想过将它们平方,相加,然后取结果的平方根,但这带来了一个问题:两个 8 位数字的平方和的最大可能值是 ~130k,它大于16 位寄存器可以容纳的最大值 (65.5k)。

我想出了一个计算 16 位数字的整数平方根的子程序,它似乎运行良好,但显然我不能保证使用适合 16 位的值。我现在的想法是有一种算法可以直接近似我需要的东西,但我似乎找不到任何东西。任何想法将不胜感激。

总结一下:假设我有一个包含两个 8 位分量的向量,我想找到向量的长度。如何在不实际计算平方和平方根的情况下近似这个?

谢谢!

最佳答案

有一个网页描述了 Fast Magnitude Estimator .基本思想是对等式进行最小二乘(或其他高质量)拟合:

Mag ~= Alpha * max(|I|, |Q|) + Beta * min(|I|, |Q|)

对于系数 Alpha 和 Beta。列出了几个系数对,包括均方误差、最大误差等,包括适用于整数 ALU 的系数。

关于assembly - 在微 Controller 上逼近两个平方和的平方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5527790/

相关文章:

python - Python 中的信号分析 - 从曲线中去除异常值

python - 如何在python中使用麦克风获得准确的计时

algorithm - 使用向量实现 FIR 滤波器

c++ - 如何使用 MSP432 DriverLib'c C 代码编写 C++ ISR?

compiler-construction - 8086 汇编器 - 从操作码生成目标代码

assembly - ARM,带链接的分支,BL 与 MOV,B

assembly - ARM 统一汇编语言语法和解析器?

assembly - MIPS float : swc1 vs. s.s

localization - 如何在微 Controller 上支持多种语言?