首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Q7到Q15转换

Q7到Q15转换
EN

Stack Overflow用户
提问于 2015-01-27 13:21:45
回答 1查看 441关注 0票数 2

我想将Q7格式的数字转换为Q15格式的数字,使用CMSIS中可用的函数(Voidarm_q7_to_q15)。下面是这个函数的开头:

代码语言:javascript
复制
/**    
 * @brief Converts the elements of the Q7 vector to Q15 vector.    
 * @param[in]       *pSrc points to the Q7 input vector    
 * @param[out]      *pDst points to the Q15 output vector   
 * @param[in]       blockSize length of the input vector    
 * @return none.    
*/

void arm_q7_to_q15(
  q7_t * pSrc,
  q15_t * pDst,
  uint32_t blockSize)

我不知道如何定义这个函数的变量。我试过这样定义它们:

代码语言:javascript
复制
q7_t a = 0.78125; //what number should I define here 0.78125 or 01100100 (in q7)?
q15_t b;
uint32_t bs; //bs=? what number should I define here?

我的主要职能是:

代码语言:javascript
复制
int main (void)
{
arm_q7_to_q15(a,b,bs);
}

谢谢你对我的照顾。

EN

回答 1

Stack Overflow用户

发布于 2022-02-28 11:57:12

指向bs的指针必须是按q7类型表示的大小为q7的向量。(准确地说是q7_t a[bs]) bs必须是无符号32位整数。什么应该是a?这必须在-1到1之间,因为它只有一点只是为了符号。其精度<7>表明其绝对值为1/(2^7)。

这意味着a=1在q7 a中将成为1/(2^7)。

代码语言:javascript
复制
Stored decimal->  Stored bin  ->fractional

a=1           -> `0b00000001` -> 1/(2^7)=0.0078125

a=2           -> `0b00000010` -> 2/(2^7)

a=3           -> `0b00000011` -> 3/(2^7)

...

a=n           -> `0b00000000` -> n/(2^7)

a=128         -> `0b01111111` -> (128/(2^7))=1

而且你不能超过2^7,你可以测试什么将和q7_t在编译器已知的int8_t。因此,你可以估计什么将hppen如果超过2^7。而且,由于一个8位指定签名。分数预测值为7,简称Q1.7和Q7。(q中的1是符号和整数值的一部分)

如果您想要转换您的数据,您必须首先将其转换为浮点数(使用浮点数之间的cast或数学操作),然后通过支持函数将它们转换为Q。而注浮点数甚至可以大于1,浮点数在2,x*2^f的基础上是科学的,内存有s,x,f和s为符号。另一个注意事项是,Q总是四面八方的!(如我所见)

有一个很好的例子可以更好地理解:

代码语言:javascript
复制
  float32_t arrf[6]={0.01,0.1,1,10,100,1000};
  float32_t arrf2[6];
  q15_t     arrq[6]={1,10,100,1000,10000,
          0b0111111111111111/*32767*/};
  q15_t     arrq2[6];
  q15_t     arrq3[6];
  q15_t     arrq4[6];
  q15_t     arrq5[6];
  q15_t     arrq6[6];

  uint16_t  arru[6]={0};

  arm_scale_f32(arrf,0.7,arrf2,6);
  arm_scale_q15(arrq,1024,0,arrq2,6);
  arm_scale_q15(arrq,1,15,arrq3,6);
  arm_scale_q15(arrq,4000,0,arrq4,6);
  arm_scale_q15(arrq,8000,0,arrq5,6);
  arm_scale_q15(arrq,32767,0,arrq6,6);

答案:

0.00699999975,0.0700000003,0.699999988,7,70.700 arrf2= arrq2= 0,3,31,312,1023 arrq3= 1,10,100,1000,10000,32767 arrq4= 0,1,12,122,122,3999 arrq5= 0,2,24,244,244,7999 arrq6= 0,9,99,99,32766

重要的是要知道:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28171560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档