У меня есть аналогичный вопрос по этой теме: Запись музыкальных нот в файл wav . Но я новичок в stackoverflow.com, и у меня недостаточно репутации, чтобы добавить команду, и я не уверен, что публикация Q под Q разрешена.

Пожалуйста, позвольте мне объяснить мою цель и проблему.

Я хочу отправить синусоидальную волну с частотой дискретизации 16 бит 48 кГц с I2S с микроконтроллера stm32f4 на ЦАП. Я генерирую волну с математической библиотекой C и функцией sin (). После генерации я тестирую звук в наушниках. Однако, похоже, это не связано с частотой, но это тоже так. Что-то меняется, когда freq. параметр меняется, но по тембру нет разницы. Может мне нужен КИХ фильтр нижних частот, но я не уверен. Я также пытался использовать КИХ-фильтр нижних частот (с веб-сайта Андреаса Финкельмейера 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++;

Большое спасибо!

0
Stratoraider 10 Мар 2014 в 17:36

1 ответ

Лучший ответ

«Тембр» не должен не меняться. Синусоидальная волна - это единый чистый тон; изменение частоты изменяет высоту тона, но только высоту. Если вы слышите что-то еще, либо вы не генерируете синусоидальную волну, либо где-то в вашей звуковой цепи есть проблема, которая искажает сигнал.

1
keshlam 10 Мар 2014 в 17:42
Большое спасибо! Затем мой код генерирует что-то похожее на синусоидальную волну. Когда частота меняется, меняется и непрерывность звука, и я думаю, дело в высоте тона. Есть ли у вас какой-нибудь идеал, как я могу избавиться от своего рода переключающего тона, который слышен каждый раз, когда счетчик "countSin" становится "0"? (извините за мои плохие относительные предложения)
 – 
Stratoraider
10 Мар 2014 в 18:22
Не слыша, у меня нет твердого мнения.
 – 
keshlam
10 Мар 2014 в 19:11