|

楼主 |
发表于 2019-3-2 15:08:55
|
显示全部楼层
问题解决了,原来WM8978数据流是补码形式的(I2S),转换下就可以了。程序如下,希望能给后面的朋友提供参考。程序基于V6-922_STemWin提高篇实验_录音机(FreeRTOS),增加下面计算RMS值函数
void DSP_Mean(uint8_t *pBuf)
{
uint16_t i,j,temp;
uint16_t *t = (uint16_t *)pBuf;
uint32_t output[64], input[64];
q31_t q31Result;
/* »ñμÃ64¸ö2éÑùμã */
for (i = 0; i < 64; i++)
{
temp = 0;
if(((t[i*2] >> 15) & 0x0001) == 0)//正数的话原码等于补码
{
input = t[i*2];
}
else
{
for(j = 15; j > 0;j--)
{
if(!((t[i*2]>>j)&0x0001))
{
temp+=(1<<j);
}
}
input = temp + 1;
}
//input = t[i*2];
}
arm_mean_q31((q31_t *)input,64,&q31Result);
printf("%d\n",q31Result);
} |
|