我正在上的8位微控制器(HCS08)的乐趣实现在组件中的FFT算法2个平方和的平方根。一旦算法完成,我就会有8位实/虚对的数组,我想找到这些值的大小。也就是说,如果X是复杂的,我想找到逼近微控制器上
|x| = sqrt(Re{x}^2 + Im{x}^2)
现在我提供给我一个16位寄存器和一个8位寄存器。我想到刚现蕾他们,加入他们,并取结果的平方根,但这带来了一个问题:两个8位数字的平方和的最大可能值为〜130K,比大一个16位寄存器可以保持最大值(65.5k)。
我想出了一个子程序,它计算一个16位数的整数平方根,这看起来工作得很好,但显然我不能保证使用适合16位的值。我的想法现在的问题是,有一个算法,将大致与我直接的需要,但我似乎无法找到任何东西。任何想法将不胜感激。
总结:说我有2个8位分量的向量,我想找到向量的长度。我怎么能近似这个而不用真正计算正方形和平方根呢?
谢谢!
可以使用CORDIC算法(http://en.wikipedia.org/wiki/CORDIC)将矢量“”旋转到某个新矢量“”(或等价ale然'<0,y1>'。 'x1'(或'y1')给出了原始向量的大小,CORDIC可以在不乘法的情况下实现。虽然我从来没有做过,但也不知道它有多难。 –
mtrw
2011-04-03 06:38:58
这是否适用于音频?你会在之后计算log10,以获得dB值吗? – 2011-04-03 08:13:14
取决于目的:如果你需要长度,那么就没有其他方法可以计算,但是当你需要规范(通常是长度)时,你可以使用另一个规范而不是默认的L2规范,即例如曼哈顿距离(= | real | + | imag |)。 – flolo 2011-04-03 09:52:53