我正在使用GNU科学库来定义和使用复数。复数定义为

typedef struct{
    double dat[2];
    } gsl_complex;


它只是将实部和虚部表示为双精度浮点(每个部分占用8个字节)。我需要将这些值的数组传递给与SC16Q11(带符号复数,16位Q11)格式一起使用的D / A转换器。

据我了解,使用Q11格式的16位处理器将16-(11 + 1)= 4位用于整数部分,而将1个符号位和11位用于小数部分,对吗?如何在这两种数据类型之间转换?

文档指出,每个IQ样本都是一个交错的IQ对,其中该对的每个值都是一个int16_t。

最佳答案

是的,Q11格式为Q4.11(如果将符号位计入int位,则为Q5.11)。

您可以在http://en.wikipedia.org/wiki/Q_%28number_format%29上找到更多信息

您可以使用以下方法进行转换:

int16_t number[2];
number[0] = round(dat[0] * 2048);
number[1] = round(dat[1] * 2048);


2048来自2 ^ 11。它也写在链接中。

09-11 17:54