我有
STM32F746/769 DISCO 模块的音频直通工作项目,其中来自输入的 4 个样本块(2 个左通道和 2 个右通道)被传递到输出通道 DMA 缓冲区。
我的延迟线实现如下:
#define BUFF_SIZE 4
#define DBUF_SIZE 8192
int32_t buff_in[BUFF_SIZE];
int32_t buff_out[BUFF_SIZE];
int32_t dbuf[DBUF_SIZE];
int i=0,j=0,k;
...
void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai){
memcpy(&dbuf
, buff_in, BUFF_SIZE*sizeof(uint32_t));
我 += BUFF_SIZE;
如果(我> = DBUF_SIZE)我= 0;
memcpy(buff_out, &dbuf, BUFF_SIZE*sizeof(uint32_t));
}
效果应该是 DBUF_SIZE/2 个样本延迟,但我观察到的不是这个,而是另外的回声,其中输入信号的后续重复发生在 DBUF_SIZE/2*sample_period 间隔。
我怀疑,这可能是 WM8994 音频编解码器中的一些模拟或数字环回的来源。