嵌入式系统中频率相关的正弦波发生器

时间:2014-03-10 13:36:47

标签: c audio sine stm32f4discovery

我对此主题有类似的问题:Writing musical notes to a wav file。但是,我是stackoverflow.com的初学者,我没有足够的声誉来添加命令,我不确定是否允许在Q下发布Q.

请让我解释一下我的目的和问题。

我想将16位48kHz采样率正弦波与来自stm32f4微控制器的I2S发送到DAC。我生成一个带有C和sin()函数的数学库的wave。生成后,我用耳机测试声音。但是,它似乎没有相关的频率,但也确实如此。当频率发生变化时。参数更改但音色没有差异。可能我需要一个FIR低通滤波器,但我不确定。我还尝试使用FIR低通滤波器(来自Andreas Finkelmeyer的网站mind-dump.net)。但是,它没有改变我的正弦波发生器代码的任何有意义的东西。

最后,我主要尝试在我的代码中遵循Eric的明智建议(在该主题中),但我正在做一些错误的事情。请帮忙!我很感激任何回应。

这是我生成正弦波的代码。

if (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE))
                {
                    for (countSin = 0;countSin < 65536;countSin ++){

                    SPI_I2S_SendData(SPI3, sample);
                    if (sampleCounter & 0x00000001) //this line for matching L&R channels
                    {

                        sample = (uint16_t) (32768+(2500*sin((2*3.14/48000)*countSin*8800)+2000*sin((2*3.14/48000)*countSin*11)));
}
                    sampleCounter++;

非常感谢!

1 个答案:

答案 0 :(得分:1)

“音色”应该改变。正弦波是单一的纯音;改变频率会改变音调的音高但音高。如果您正在听其他任何事情,要么您没有产生正弦波,要么在您的声链中某处出现问题,这会导致信号失真。