我有两种不同的DSP:
我想将第一个DSP的输出转换为第二个DSP使用的32位浮点格式。 C中有任何API吗?
答案 0 :(得分:2)
C中没有标准例程。
如果第一个DSP格式只是评论中讨论的Q7.8,那么你可以将它转换为浮点数:
#include <stdint.h>
…
int16_t Temp;
memcpy(&Temp, &PlaceWhereDataIs, sizeof Temp);
float Float = Temp * 0x1p-8f;
这只是将这些位置于有符号的16位整数中,然后将其转换为float
并将其缩放为8个小数位。
0x1p-8f
是float
常量的十六进制浮点表示法,值为2 -8 。如果您的编译器不支持,则可以使用/ 256.f
代替* 0x1p-8f
。
如果您的编译器不支持int16_t
,如果是16位,则可以使用short
。
如果第二个是Q8.23,那么它可以类似地转换为:
int32_t Temp;
memcpy(&Temp, &PlaceWhereDataIs, sizeof Temp);
float Float = Temp * 0x1p-23f;
但是,它的1,8和23字段与通用IEEE-754基本32位二进制浮点格式的字段大小相匹配,这使我怀疑它是浮点格式,而不是固定格式 - 点格式。在这种情况下,您可以使用:{/ p>将其转换为float
float Float;
memcpy(&Float, &PlaceWhereDataIs, sizeof Float);
如果第一个DSP格式实际上是一个带有1个符号位,7个指数位和8个有效位的浮点格式,那么转换它需要一些工作。此外,您必须提供文档中的详细信息 - 自定义浮点格式倾向于以不同方式处理次正规,无穷大和NaN,以及具有非标准指数偏差。
如果两者都是定点格式,您可以将第一个转换为第二个:
int16_t Temp;
memcpy(&Temp, &PlaceWhereDataIs, sizeof Temp);
int32_t Result = (int32_t) Temp * (1 << 23-8);