我正在上的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