我在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格式分数的平方根,那么这样做没有太大问题,但是当实部和虚部平方时,可能会有一些精度位的损失。 –