У меня есть аналогичный вопрос по этой теме: Запись музыкальных нот в файл 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++;
Большое спасибо!
1 ответ
«Тембр» не должен не меняться. Синусоидальная волна - это единый чистый тон; изменение частоты изменяет высоту тона, но только высоту. Если вы слышите что-то еще, либо вы не генерируете синусоидальную волну, либо где-то в вашей звуковой цепи есть проблема, которая искажает сигнал.
Похожие вопросы
Связанные вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.