您好!
我是音频编解码器和 DSP 领域的新手、我已经能够借助简单的板载微控制器 ADC/DAC 实现这一目标。 我正在尝试在新设计上使用 PCM3060、我能够毫无问题地传递信号。 PCM3060被配置为完全将右侧通道(ADC 和 DAC)静音、并以单端模式运行 DAC。 它在 STM32微控制器中使用标准24位 I2S 数据模式。 我使用的控制器不提供全双工 I2S、因此我使用两个设置相同的不同 I2S 通道:48kHz I2S PHILLIPS。 一个是主器件发送、另一个是主器件接收。 我知道这不是建议的设置、但它可以使用正弦波。
我用于解释数据的函数如下:
float AUDIO_STREAM:::convert_input_audio_signal (int32_t val){
VAL >>=8;
返回(float) val / 8388608;
}
int32_t AUDIO_STREAM:::convert_output_audio_signal (float val){
VAL *= 8388608;
int32_t int_val =(int32_t) val;
返回(int_val << 8)& 0xFFFFFF00;
}
我已经试过很多东西、这只是当前状态-但是简单的削波功能(下面)根本无法正常工作。
if (val > thresh) val = thresh;
if (val <-thresh) val =-thresh;
通过使用调试器和简单的幅度函数、我似乎获得了预期范围(-8388608至8388608 )内的数据。
我的问题 是、还有什么可能导致这种情况? 有人知道为什么会这样吗? 我应该如何在有符号24位数据范围中获得合适的值? 我添加了示波器图片、一个是不使用 DSP 的直通正弦波、另一个具有削波功能。 黄色表示~100Hz 正弦波(~1Vp)、蓝色表示输出。 我已尝试通过 PCM 寄存器和代码中反转数据。 我已经尝试运行我发现的其他简单算法、无论我怎么做、输出看起来都非常失真。
非常感谢有关此主题的任何帮助! 到目前为止、浏览在线论坛尚未提供任何解决方案。 谢谢!