我在blackfin533上發現了一段代碼,它的fract32從-1,1開始,格式爲1.31。計算兩個定點分數的平方根的解釋
我不明白爲什麼需要預換檔來計算複數(re,img)的幅度。我知道如果你想用1.31分數格式乘1.31,那麼你需要右移31位。
GO_coil_D [0] .RE,和GO_coil_D [0] .IM兩種fract32。
我不能得到什麼,下面的代碼是這樣做的:
norm[0] = norm_fr1x32(GO_coil_D[0].re);
norm[1] = norm_fr1x32(GO_coil_D[0].im);
shift = (norm[0] < norm[1]) ? (norm[0] - 1) : (norm[1] - 1);
vectorFundamentalStored.im = shl_fr1x32(GO_coil_D[0].im,shift);
vectorFundamentalStored.re = shl_fr1x32(GO_coil_D[0].re,shift);
vectorFundamentalStored.im = mult_fr1x32x32(vectorFundamentalStored.im, vectorFundamentalStored.im);
vectorFundamentalStored.re = mult_fr1x32x32(vectorFundamentalStored.re, vectorFundamentalStored.re);
amplitudeFundamentalStored = sqrt_fr16(round_fr1x32(add_fr1x32(vectorFundamentalStored.re,vectorFundamentalStored.im))) << 16;
amplitudeFundamentalStored = shr_fr1x32(amplitudeFundamentalStored,shift);
round_
fr1x32`(fract32 F1)fract16大紅大紫的32位FRACT到16位FRACT使用偏舍入。
norm_fr1x32
norm_fr1x32(fract32)int返回標準化輸入變量所需的左移位數,以便它位於間隔0x40000000至0x7fffffff中,或位於間隔0x80000000至0xc0000000之間。換句話說,fract32 x; shl_fr1x32(X,norm_fr1x32(X));返回值的範圍0x40000000之後爲0x7FFFFFFF,或在範圍爲0x80000000至0xc00000000的
我加了一個工作的例子,有和沒有預先標定的情況下,實際部分是3/1024(十進制)和虛部爲4/1024。希望你能看到絕對值(振幅)應該是5/1024,因爲它形成了一個3-4-5的三角形。 –
你能告訴我什麼是真實與自身,虛擬與自身相乘的原始問題,然後加上結果,然後取平方根,然後右移31位?這種方法會有什麼問題? –
如果你可以很容易地計算1.31格式分數的平方根,那麼這樣做沒有太大問題,但是當實部和虛部平方時,可能會有一些精度位的損失。 –