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



关于这个话题,我也有一个类似的问题:将音符写入wav文件。但是,我是stackoverflow.com的初学者,我没有足够的声誉来添加命令,我不确定在Q下发布Q是否允许。

请允许我解释我的目的和问题。

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

最后,我主要试图遵循埃里克的明智的建议(在那个主题)在我的代码,但我做的事情是错误的。请帮助!如有任何回应,我将不胜感激。

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

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++;

多谢!

"音色"应该改变。正弦波是一个单一的纯音;改变频率会改变音调的音高,但只改变音高。如果你听到了其他的声音,要么是你没有发出正弦波,要么是你的声音链中的某个地方出现了问题,使信号失真。

最新更新