|
本帖最后由 yeasang 于 2021-4-14 18:55 编辑
函数代码如下:void test_dsp()
{
uint8_t i;
/****定点数Q15数组******************************************************************/
q15_t pDataA2[9] = {1000, 1000, 2000, 2000, 3000, 3000, 4000, 4000, 5000};
q15_t scaleFract1 = 100;
int32_t shift1 = 5;
q15_t pDataDst2[9];
arm_matrix_instance_q15 pSrcA2; //3行3列数据
arm_matrix_instance_q15 pDst2;
/****定点数Q15***********************************************************************/
pSrcA2.numCols = 3;
pSrcA2.numRows = 3;
pSrcA2.pData = pDataA2;
pDst2.numCols = 3;
pDst2.numRows = 3;
pDst2.pData = pDataDst2;
arm_mat_scale_q15(&pSrcA2, scaleFract1, shift1, &pDst2);
for(i = 0; i < 9; i++)
{
printf("pDataDst2[%d] = %d\r\n", i, pDataDst2);
}
}
测试结果如下:
pDataDst2[0] = 97
pDataDst2[1] = 97
pDataDst2[2] = 195
pDataDst2[3] = 195
pDataDst2[4] = 292
pDataDst2[5] = 292
pDataDst2[6] = 390
pDataDst2[7] = 390
pDataDst2[8] = 488
从结果反推,矩阵被乘的系数是0.097,想问一下设了 q15_t scaleFract1 = 100;
int32_t shift1 = 5;
为何比例系数位0.097呢?这是怎么得出来的?从scaleFract1, shift1怎么知道比例系数是0.097???规律在哪里?
不懂规律,假设我想矩阵乘一个系数为0.001,那我怎么知道scaleFract1, shift1应该设为多少?
|
|