Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FFT旋转因子的C浮点转换_C_Signal Processing - Fatal编程技术网

FFT旋转因子的C浮点转换

FFT旋转因子的C浮点转换,c,signal-processing,C,Signal Processing,我写了一个代码,用C计算FFT的旋转因子。现在,我想把它从浮点转换成定点,这样我就可以在DSP处理器上测试它了。我想分别计算旋转因子,例如: 1) Cos(2*pi*k/N)-jSin(2*pi*k/N),其中k从0..N/3-1开始,N=1536 如何以固定点(比如Q15格式)返回答案?Q15数字有15个分数位。最有可能的是,它有一个整数位或符号位的附加位。(从上下文或问题中未提供的其他文档中可以看出这一点。)让我们假设附加位是整数位,并且该值是无符号的 如果16位在解释为无符号整数时具有值x

我写了一个代码,用C计算FFT的旋转因子。现在,我想把它从浮点转换成定点,这样我就可以在DSP处理器上测试它了。我想分别计算旋转因子,例如:

1) Cos(2*pi*k/N)-jSin(2*pi*k/N),其中k从0..N/3-1开始,N=1536


如何以固定点(比如Q15格式)返回答案?

Q15数字有15个分数位。最有可能的是,它有一个整数位或符号位的附加位。(从上下文或问题中未提供的其他文档中可以看出这一点。)让我们假设附加位是整数位,并且该值是无符号的

如果16位在解释为无符号整数时具有值x,则在解释为Q15时具有值x/215。显然,要将Q15值x/215转换为整数值x,只需乘以215即可

因此,给定某个值y,它可能是旋转因子之一的余弦或正弦,您可以将其转换为整数,通过乘以215,将其存储在16位中,就像代码
y*32768
一样,并从浮点转换为整数。但是,从浮点到整数的转换会向零截断,因此33.9变为33。如果取而代之的是四舍五入到最接近的整数,通常误差较小。您可以使用
nearbyint(y*32768)
完成此操作

存在一些问题:

  • 如果Q15是无符号的,则不能表示负值,但某些旋转因子是负值
  • 如果Q15是有符号的,它大概没有整数位,因此它可以表示的最大值是32767/32768。但是,一些旋转因子是+1或–1,因此无法表示它们。可能有一些方法可以通过专门处理这些旋转因素来解决这个问题
  • 可以想象,您的Q15使用32767而不是32768作为标尺,因为这将允许它既可以签名,也可以处理+1和-1。我认为这是不寻常的,但我提到这一点,因为上述两项都不是完全令人满意的。在本例中,您将在转换中使用32767代替32768。(像素强度通常以这种方式存储;它们的缩放值范围为0到255,表示从0到1的强度。)

重复?我也检查了这个问题,但它与我的问题无关,因为我们必须处理罪与因:)好吧-也许你应该编辑你的问题和标题,使问题更具体。