Всем привет Решил вывести аудио на динамик, конкретнее WAV формат. Хочу использовать ШИМ. С выводом в целом все понятно, но есть вопрос. Как я понял на stm32 глубину звучания больше 8 бит не сделать. При глубине 16 бит аудио файл звучит чудесно. Когда я его конвертирую в 8 бит, то появляется шум. При воспроизведении на компе слышно потрескивание а-ля как будто на аудиозапись накладывается белый шум. Можно ли как-нибудь избавиться от этого или при воспроизведении тоже будет треск слышен? Пробовал использовать шумоподавление и трескоподавление в программе sound forge pro. Ваще не помогает. Мб есть какие-нибудь рабочие схемотехнические решения? Трещащий динамик ваще не тру
Как я понял на stm32 глубину звучания больше 8 бит не сделать.
Кто вам сказал такую глупость? Таймеры в stm32 имеют разрядность 16 бит, значит и ШИМ можете генерировать любой разрядности от 1 до 16 бит. Не увидел, что у вас за камень, но допустим, f103. Тактовая частота до 72 МГц. При частоте звука 44 кГц получаем модуль счета 1636. Если округлить, получим 1024, то есть 10 бит. При этом никто не заставляет вас брать именно 44 кГц, тогда можно еще поднять разрешение.
Кто вам сказал такую глупость? Таймеры в stm32 имеют разрядность 16 бит, значит и ШИМ можете генерировать любой разрядности от 1 до 16 бит. Не увидел, что у вас за камень, но допустим, f103. Тактовая частота до 72 МГц. При частоте звука 44 кГц получаем модуль счета 1636. Если округлить, получим 1024, то есть 10 бит. При этом никто не заставляет вас брать именно 44 кГц, тогда можно еще поднять разрешение.
Насколько понял из 16 бит берем старшие 10, а оставшиеся заполняем нулями. Отразится ли это на качестве звука? 44кГц самая ходовая, 8 не хотелось бы брать Про два канала таймера интересно звучит. Спасибо, подумаю над этим)
Любая обработка отразится на качестве звука. Просто ШИМ (и последующее усиление класса D) наиболее простое и экономичное. А при хорошем выходном фильтре разницу по сравнению с "честным" ЦАПом вы не заметите. Хотя на 44 кГц даже без фильтра писка слышно не будет.
Что такое "глубина звучания"? И почему "не сделать"?
Лови ссылку. Всё подробно расписано. http://avr-start.ru/?p=1747 . Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535. Но выше предложили пару способов не сильно терять в качестве звука. На днях сделаю программку и напишу что как получилось и слышны ли шумы
Есть канеш. Просто прочитал, что пофиг на чем делать на ЦАП или ШИМе. ЦАП тоже смотрел. Там реистр тоже на 12 бит в который данные пихаем DAC->DHR12R1 = data; Может и через DAC сделаю. Проблема была в том, что шумы слышал, но сейчас +- имею представление как сделать лучше качество
Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535.
Возьмем частоту тактирования 72МГц, пред делитель на 7, глубина ШИМ 8 Бит, частота дискретизации получается 40,178кГц. MSB 8 бит грузишь в один канал таймера, LSB 8 бит грузишь в другой канал таймера, на выходе каналов таймера делитель из двух резисторов, результат DAC ШИМ 16 бит.
Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535.
И что??? Как из этого следует что "на stm32 глубину звучания больше 8 бит не сделать"? Что именно мешает? Ведь 9000 - это намного! больше чем 8 бит. Если что.
MSB 8 бит грузишь в один канал таймера, LSB 8 бит грузишь в другой канал таймера, на выходе каналов таймера делитель из двух резисторов, результат DAC ШИМ 16 бит.
Чем такой комбайн ваять, лучше сделать интерполяцию входного потока сэмплов на более высокую частоту сэмплирования ШИМ. Фиксированную частоту. Единую для всех форматов и частот входных WAV. Чтобы для каждой возможной частоты WAV не надо было отдельный код писать. Так будет гораздо проще, а результат - не хуже.
Хотя конечно если уж хочется совсем супер-пупер качества, и возможны высокие разрядности входных WAV + с высокими частотами дискретизации, то можно сделать и так, как Вы предлагаете. Но интерполяция на единую частоту от всех возможных входных частот WAV всё-же - очень полезна. Она позволит не прибивать гвоздями частоту МК к требуемой конкретным форматом WAV.
Взяв STM-ку с I2S интерфейсом (не путать с I2C!) или с SAI и поставив внешний аудиокодек, избавимся от всех шумов и получим труъ-24-битный звук При условии некосячной разводки. А коль ШИМом пытаетесь получить высокие показатели битности и частоты дискретизации, то не стоит и мучиться, не выйдет. Лучше попробуйте хорошенько отфильтровать высокочастотные составляющие ШИМа. Ну и лучше конечно же использовать встроенный DAC, при одинаковых параметрах битности/частоты он даст более лучший звук с меньшими затратами ресурсов.
Цитата:
Когда я его конвертирую в 8 бит, то появляется шум.
Да, так и будет, это нормально. Почитайте про шумы квантования и прочие "прелести" дискретизованного сигнала. Посему, 8 бит - это речевое применение для систем оповещения и тому подобных "говорилок". Частота дискретизации при этом составляет 8 кГц или 11 кГц. Ни на какую "музыку" тут надеяться не следует, особенно если хотите "без шумов и тресков". Для музыки - внешний аудиокодек типа AC'97 или WM8994 через интерфейс SAI или I2S.
А при ШИМ схемотехнически нужно отфильтровывать высокочастотные импульсы, лежащие выше половины частоты дискретизации. Причем, хорошо так отфильтровывать, фильтром 2-го порядка, поскольку при Fs = 8 кГц это всё попадает в звуковой слышимый диапазон. Кстати, именно по этой причине в супер-пупер аудио стараются задрать частоту дискретизации до 192 кГц и выше - чтобы уменьшить порядок фильтров и уменьшить фазовые искажения.
поскольку при Fs = 8 кГц это всё попадает в звуковой слышимый диапазон.
Не попадет. jcxz, имеет ввиду запустить ШИМ на более высокой частоте, сколько это возможно, к примеру 72МГц ШИМ 8 бит частота получается 281,250кГц, и вот в него уже трамбовать поток с нужной частотой дискретизации.
В этом нет практического смысла, в задирании настолько высоко Fs. Всё равно исходные 8 бит разрядности всю эту вашу музыку уконтрапупят вхлам. Вы еще попробуйте с такой скоростью готовить и отправлять данные то. Да и частота передискретизации должна быть кратной исходной частоте, чтобы не получить еще больше мусора и не перегрузить вычислениями. Вообще, вся эта затея не стоит смысла в плане получения вменяемой "музыки" из-за некратных частот передискретизации и слишком низкой разрядности.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения