我对此主题有一个类似的问题:Writing musical notes to a wav file。但是,我是stackoverflow.com的初学者,我没有足够的声誉来添加命令,并且我不确定是否允许在Q下发布Q。
请让我解释一下我的目的和问题。
我想将带有I2S的16位48kHz采样率正弦波从stm32f4微 Controller 发送到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++;
非常感谢!
最佳答案
“音色”不应改变。正弦波是单个纯音。改变频率会改变音调的音高,但只会改变音调。如果您听到其他声音,则可能是不是在生成正弦波,或是声音链中某处出现了信号失真的问题。
关于c - 嵌入式系统中与频率相关的正弦波发生器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22301692/