Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

stm32 аудиовывод, шум

Чт апр 07, 2022 13:14:34

Всем привет :) Решил вывести аудио на динамик, конкретнее WAV формат. Хочу использовать ШИМ. С выводом в целом все понятно, но есть вопрос. Как я понял на stm32 глубину звучания больше 8 бит не сделать. При глубине 16 бит аудио файл звучит чудесно. Когда я его конвертирую в 8 бит, то появляется шум. При воспроизведении на компе слышно потрескивание а-ля как будто на аудиозапись накладывается белый шум. Можно ли как-нибудь избавиться от этого или при воспроизведении тоже будет треск слышен? Пробовал использовать шумоподавление и трескоподавление в программе sound forge pro. Ваще не помогает. Мб есть какие-нибудь рабочие схемотехнические решения? Трещащий динамик ваще не тру

Re: stm32 аудиовывод, шум

Чт апр 07, 2022 13:59:28

Если шум в аудиофайле, то никак. 8 бит проигрывал через ЦАП, качество приемлемое. Но и исходный файл звучал удовлетворительно.

Re: stm32 аудиовывод, шум

Чт апр 07, 2022 14:09:10

Вот список

Re: stm32 аудиовывод, шум

Чт апр 07, 2022 14:35:05

Спасибо) Значит будет подпукивать динамик. И таааааак сойдет XD

Re: stm32 аудиовывод, шум

Чт апр 07, 2022 18:19:30

Как я понял на stm32 глубину звучания больше 8 бит не сделать.

Кто вам сказал такую глупость? Таймеры в stm32 имеют разрядность 16 бит, значит и ШИМ можете генерировать любой разрядности от 1 до 16 бит. Не увидел, что у вас за камень, но допустим, f103. Тактовая частота до 72 МГц. При частоте звука 44 кГц получаем модуль счета 1636. Если округлить, получим 1024, то есть 10 бит. При этом никто не заставляет вас брать именно 44 кГц, тогда можно еще поднять разрешение.

Re: stm32 аудиовывод, шум

Чт апр 07, 2022 21:21:52

Существует способ получения 16 бит с помощью двух каналов 8 бит одного таймера.

Re: stm32 аудиовывод, шум

Пт апр 08, 2022 08:38:20

Кто вам сказал такую глупость? Таймеры в stm32 имеют разрядность 16 бит, значит и ШИМ можете генерировать любой разрядности от 1 до 16 бит. Не увидел, что у вас за камень, но допустим, f103. Тактовая частота до 72 МГц. При частоте звука 44 кГц получаем модуль счета 1636. Если округлить, получим 1024, то есть 10 бит. При этом никто не заставляет вас брать именно 44 кГц, тогда можно еще поднять разрешение.

Насколько понял из 16 бит берем старшие 10, а оставшиеся заполняем нулями. Отразится ли это на качестве звука? 44кГц самая ходовая, 8 не хотелось бы брать :) Про два канала таймера интересно звучит. Спасибо, подумаю над этим)

Re: stm32 аудиовывод, шум

Пт апр 08, 2022 09:57:04

Cheeseman писал(а):Насколько понял из 16 бит берем старшие 10,
Берем 16 бит и сдвигаем вправо на 6 бит, получим 10 бит.
Cheeseman писал(а):Отразится ли это на качестве звука?
ШИМ всегда отразится на качестве звука.

Re: stm32 аудиовывод, шум

Пт апр 08, 2022 12:05:10

Любая обработка отразится на качестве звука. Просто ШИМ (и последующее усиление класса D) наиболее простое и экономичное. А при хорошем выходном фильтре разницу по сравнению с "честным" ЦАПом вы не заметите. Хотя на 44 кГц даже без фильтра писка слышно не будет.

Re: stm32 аудиовывод, шум

Пт апр 08, 2022 14:27:18

Как я понял на stm32 глубину звучания больше 8 бит не сделать.
Что такое "глубина звучания"? И почему "не сделать"?

Re: stm32 аудиовывод, шум

Сб апр 09, 2022 09:56:28

Что такое "глубина звучания"? И почему "не сделать"?

Лови ссылку. Всё подробно расписано. http://avr-start.ru/?p=1747 .
Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535. Но выше предложили пару способов не сильно терять в качестве звука. На днях сделаю программку и напишу что как получилось и слышны ли шумы

Re: stm32 аудиовывод, шум

Сб апр 09, 2022 10:19:21

Cheeseman писал(а):Решил вывести аудио на динамик

Назовите плиз полное название чипа.
Я не верю что там нет DAC контактов.

Re: stm32 аудиовывод, шум

Сб апр 09, 2022 10:26:26

Есть канеш. Просто прочитал, что пофиг на чем делать на ЦАП или ШИМе. ЦАП тоже смотрел. Там реистр тоже на 12 бит в который данные пихаем
DAC->DHR12R1 = data;
Может и через DAC сделаю. Проблема была в том, что шумы слышал, но сейчас +- имею представление как сделать лучше качество :)

Re: stm32 аудиовывод, шум

Сб апр 09, 2022 18:46:16

Cheeseman писал(а):Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535.
Возьмем частоту тактирования 72МГц, пред делитель на 7, глубина ШИМ 8 Бит, частота дискретизации получается 40,178кГц.
MSB 8 бит грузишь в один канал таймера, LSB 8 бит грузишь в другой канал таймера, на выходе каналов таймера делитель из двух резисторов, результат DAC ШИМ 16 бит.

Не верите? Проверьте.

Re: stm32 аудиовывод, шум

Ср апр 13, 2022 17:10:45

Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535.
И что??? :dont_know:
Как из этого следует что "на stm32 глубину звучания больше 8 бит не сделать"? Что именно мешает? Ведь 9000 - это намного! больше чем 8 бит. Если что.

Добавлено after 1 minute 9 seconds:
Назовите плиз полное название чипа.
Я не верю что там нет DAC контактов.
Автор хочет на ШИМ. Причём тут ЦАП? :dont_know:

Добавлено after 7 minutes 10 seconds:
MSB 8 бит грузишь в один канал таймера, LSB 8 бит грузишь в другой канал таймера, на выходе каналов таймера делитель из двух резисторов, результат DAC ШИМ 16 бит.
Чем такой комбайн ваять, лучше сделать интерполяцию входного потока сэмплов на более высокую частоту сэмплирования ШИМ. Фиксированную частоту. Единую для всех форматов и частот входных WAV. Чтобы для каждой возможной частоты WAV не надо было отдельный код писать.
Так будет гораздо проще, а результат - не хуже.

Хотя конечно если уж хочется совсем супер-пупер качества, и возможны высокие разрядности входных WAV + с высокими частотами дискретизации, то можно сделать и так, как Вы предлагаете. Но интерполяция на единую частоту от всех возможных входных частот WAV всё-же - очень полезна. Она позволит не прибивать гвоздями частоту МК к требуемой конкретным форматом WAV.

Re: stm32 аудиовывод, шум

Ср апр 13, 2022 18:17:55

Взяв STM-ку с I2S интерфейсом (не путать с I2C!) или с SAI и поставив внешний аудиокодек, избавимся от всех шумов и получим труъ-24-битный звук :) При условии некосячной разводки.
А коль ШИМом пытаетесь получить высокие показатели битности и частоты дискретизации, то не стоит и мучиться, не выйдет. Лучше попробуйте хорошенько отфильтровать высокочастотные составляющие ШИМа. Ну и лучше конечно же использовать встроенный DAC, при одинаковых параметрах битности/частоты он даст более лучший звук с меньшими затратами ресурсов.

Когда я его конвертирую в 8 бит, то появляется шум.

Да, так и будет, это нормально. Почитайте про шумы квантования и прочие "прелести" дискретизованного сигнала.
Посему, 8 бит - это речевое применение для систем оповещения и тому подобных "говорилок". Частота дискретизации при этом составляет 8 кГц или 11 кГц.
Ни на какую "музыку" тут надеяться не следует, особенно если хотите "без шумов и тресков". Для музыки - внешний аудиокодек типа AC'97 или WM8994 через интерфейс SAI или I2S.

А при ШИМ схемотехнически нужно отфильтровывать высокочастотные импульсы, лежащие выше половины частоты дискретизации. Причем, хорошо так отфильтровывать, фильтром 2-го порядка, поскольку при Fs = 8 кГц это всё попадает в звуковой слышимый диапазон.
Кстати, именно по этой причине в супер-пупер аудио стараются задрать частоту дискретизации до 192 кГц и выше - чтобы уменьшить порядок фильтров и уменьшить фазовые искажения.

Re: stm32 аудиовывод, шум

Ср апр 13, 2022 20:48:22

НовыйДень писал(а):поскольку при Fs = 8 кГц это всё попадает в звуковой слышимый диапазон.
Не попадет.
jcxz, имеет ввиду запустить ШИМ на более высокой частоте, сколько это возможно, к примеру 72МГц ШИМ 8 бит частота получается 281,250кГц, и вот в него уже трамбовать поток с нужной частотой дискретизации.

Re: stm32 аудиовывод, шум

Ср апр 13, 2022 21:36:15

В этом нет практического смысла, в задирании настолько высоко Fs. Всё равно исходные 8 бит разрядности всю эту вашу музыку уконтрапупят вхлам. Вы еще попробуйте с такой скоростью готовить и отправлять данные то. Да и частота передискретизации должна быть кратной исходной частоте, чтобы не получить еще больше мусора и не перегрузить вычислениями.
Вообще, вся эта затея не стоит смысла в плане получения вменяемой "музыки" из-за некратных частот передискретизации и слишком низкой разрядности.

Re: stm32 аудиовывод, шум

Ср апр 13, 2022 21:50:30

НовыйДень писал(а):и слишком низкой разрядности.
FM-модулятор в плане звучания музыки так же ни чего не стоит, хотя те же 8 бит.
НовыйДень писал(а):Да и частота передискретизации должна быть кратной исходной частоте,
Здесь я пожалуй соглашусь, будет некая ошибка, но вот на сколько она будет проявляться на слух ...
НовыйДень писал(а):не перегрузить вычислениями
Какими вычислениями?, тупое копирование из точки А в точку Б с помощью DMA.

Re: stm32 аудиовывод, шум

Пт апр 15, 2022 18:34:11

В этом нет практического смысла, в задирании настолько высоко Fs.
Чем выше - тем проще фильтровать. И качественнее.
Вы еще попробуйте с такой скоростью готовить и отправлять данные то.
А что в этом сложного? Не на такой, но на 98кГц у меня вполне нормально работает. Да и выше - не проблема поднять.
Да и частота передискретизации должна быть кратной исходной частоте, чтобы не получить еще больше мусора и не перегрузить вычислениями.
Не должна. А перегрузить - это только если руки кривые. На такой высокой частоте дискретизации достаточно простейшей кусочно-линейной интерполяции.
Вообще, вся эта затея не стоит смысла в плане получения вменяемой "музыки" из-за некратных частот передискретизации и слишком низкой разрядности.
Открою вам страшную тайну: У реал-тайм потоков передискретизация почти всегда некратная. Так уж устроена природа. 8)
Ответить