stm32 аудиовывод, шум
stm32 аудиовывод, шум
Всем привет
Решил вывести аудио на динамик, конкретнее WAV формат. Хочу использовать ШИМ. С выводом в целом все понятно, но есть вопрос. Как я понял на stm32 глубину звучания больше 8 бит не сделать. При глубине 16 бит аудио файл звучит чудесно. Когда я его конвертирую в 8 бит, то появляется шум. При воспроизведении на компе слышно потрескивание а-ля как будто на аудиозапись накладывается белый шум. Можно ли как-нибудь избавиться от этого или при воспроизведении тоже будет треск слышен? Пробовал использовать шумоподавление и трескоподавление в программе sound forge pro. Ваще не помогает. Мб есть какие-нибудь рабочие схемотехнические решения? Трещащий динамик ваще не тру
- Реклама
- >TEHb<
- Друг Кота
- Сообщения: 5742
- Зарегистрирован: Ср ноя 11, 2009 17:19:30
- Откуда: Воронеж
- Контактная информация:
Re: stm32 аудиовывод, шум
Если шум в аудиофайле, то никак. 8 бит проигрывал через ЦАП, качество приемлемое. Но и исходный файл звучал удовлетворительно.
"Привет!" - соврал он.
Re: stm32 аудиовывод, шум
Спасибо) Значит будет подпукивать динамик. И таааааак сойдет XD
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: stm32 аудиовывод, шум
[uquote="Cheeseman",url="/forum/viewtopic.php?p=4210841#p4210841"]Как я понял на stm32 глубину звучания больше 8 бит не сделать.[/uquote]
Кто вам сказал такую глупость? Таймеры в stm32 имеют разрядность 16 бит, значит и ШИМ можете генерировать любой разрядности от 1 до 16 бит. Не увидел, что у вас за камень, но допустим, f103. Тактовая частота до 72 МГц. При частоте звука 44 кГц получаем модуль счета 1636. Если округлить, получим 1024, то есть 10 бит. При этом никто не заставляет вас брать именно 44 кГц, тогда можно еще поднять разрешение.
Кто вам сказал такую глупость? Таймеры в stm32 имеют разрядность 16 бит, значит и ШИМ можете генерировать любой разрядности от 1 до 16 бит. Не увидел, что у вас за камень, но допустим, f103. Тактовая частота до 72 МГц. При частоте звука 44 кГц получаем модуль счета 1636. Если округлить, получим 1024, то есть 10 бит. При этом никто не заставляет вас брать именно 44 кГц, тогда можно еще поднять разрешение.
- Реклама
Re: stm32 аудиовывод, шум
Существует способ получения 16 бит с помощью двух каналов 8 бит одного таймера.
Re: stm32 аудиовывод, шум
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4210953#p4210953"]Кто вам сказал такую глупость? Таймеры в stm32 имеют разрядность 16 бит, значит и ШИМ можете генерировать любой разрядности от 1 до 16 бит. Не увидел, что у вас за камень, но допустим, f103. Тактовая частота до 72 МГц. При частоте звука 44 кГц получаем модуль счета 1636. Если округлить, получим 1024, то есть 10 бит. При этом никто не заставляет вас брать именно 44 кГц, тогда можно еще поднять разрешение.[/uquote]
Насколько понял из 16 бит берем старшие 10, а оставшиеся заполняем нулями. Отразится ли это на качестве звука? 44кГц самая ходовая, 8 не хотелось бы брать
Про два канала таймера интересно звучит. Спасибо, подумаю над этим)
Насколько понял из 16 бит берем старшие 10, а оставшиеся заполняем нулями. Отразится ли это на качестве звука? 44кГц самая ходовая, 8 не хотелось бы брать
Re: stm32 аудиовывод, шум
Берем 16 бит и сдвигаем вправо на 6 бит, получим 10 бит.Cheeseman писал(а):Насколько понял из 16 бит берем старшие 10,
ШИМ всегда отразится на качестве звука.Cheeseman писал(а):Отразится ли это на качестве звука?
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: stm32 аудиовывод, шум
Любая обработка отразится на качестве звука. Просто ШИМ (и последующее усиление класса D) наиболее простое и экономичное. А при хорошем выходном фильтре разницу по сравнению с "честным" ЦАПом вы не заметите. Хотя на 44 кГц даже без фильтра писка слышно не будет.
Re: stm32 аудиовывод, шум
[uquote="Cheeseman",url="/forum/viewtopic.php?p=4210841#p4210841"]Как я понял на stm32 глубину звучания больше 8 бит не сделать.[/uquote]Что такое "глубина звучания"? И почему "не сделать"?
Re: stm32 аудиовывод, шум
[uquote="jcxz",url="/forum/viewtopic.php?p=4211320#p4211320"]Что такое "глубина звучания"? И почему "не сделать"?[/uquote]
Лови ссылку. Всё подробно расписано. http://avr-start.ru/?p=1747 .
Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535. Но выше предложили пару способов не сильно терять в качестве звука. На днях сделаю программку и напишу что как получилось и слышны ли шумы
Лови ссылку. Всё подробно расписано. http://avr-start.ru/?p=1747 .
Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535. Но выше предложили пару способов не сильно терять в качестве звука. На днях сделаю программку и напишу что как получилось и слышны ли шумы
- AVI-crak
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Сб янв 09, 2016 15:51:17
- Контактная информация:
Re: stm32 аудиовывод, шум
Назовите плиз полное название чипа.Cheeseman писал(а):Решил вывести аудио на динамик
Я не верю что там нет DAC контактов.
Re: stm32 аудиовывод, шум
Есть канеш. Просто прочитал, что пофиг на чем делать на ЦАП или ШИМе. ЦАП тоже смотрел. Там реистр тоже на 12 бит в который данные пихаем
DAC->DHR12R1 = data;
Может и через DAC сделаю. Проблема была в том, что шумы слышал, но сейчас +- имею представление как сделать лучше качество
DAC->DHR12R1 = data;
Может и через DAC сделаю. Проблема была в том, что шумы слышал, но сейчас +- имею представление как сделать лучше качество
Re: stm32 аудиовывод, шум
Возьмем частоту тактирования 72МГц, пред делитель на 7, глубина ШИМ 8 Бит, частота дискретизации получается 40,178кГц.Cheeseman писал(а):Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535.
MSB 8 бит грузишь в один канал таймера, LSB 8 бит грузишь в другой канал таймера, на выходе каналов таймера делитель из двух резисторов, результат DAC ШИМ 16 бит.
Не верите? Проверьте.
Re: stm32 аудиовывод, шум
[uquote="Cheeseman",url="/forum/viewtopic.php?p=4211763#p4211763"]Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535.[/uquote]И что???
Как из этого следует что "на stm32 глубину звучания больше 8 бит не сделать"? Что именно мешает? Ведь 9000 - это намного! больше чем 8 бит. Если что.
Добавлено after 1 minute 9 seconds:
[uquote="AVI-crak",url="/forum/viewtopic.php?p=4211771#p4211771"]Назовите плиз полное название чипа.
Я не верю что там нет DAC контактов.[/uquote]Автор хочет на ШИМ. Причём тут ЦАП?
Добавлено after 7 minutes 10 seconds:
[uquote="Dimon456",url="/forum/viewtopic.php?p=4212007#p4212007"]MSB 8 бит грузишь в один канал таймера, LSB 8 бит грузишь в другой канал таймера, на выходе каналов таймера делитель из двух резисторов, результат DAC ШИМ 16 бит.[/uquote]Чем такой комбайн ваять, лучше сделать интерполяцию входного потока сэмплов на более высокую частоту сэмплирования ШИМ. Фиксированную частоту. Единую для всех форматов и частот входных WAV. Чтобы для каждой возможной частоты WAV не надо было отдельный код писать.
Так будет гораздо проще, а результат - не хуже.
Хотя конечно если уж хочется совсем супер-пупер качества, и возможны высокие разрядности входных WAV + с высокими частотами дискретизации, то можно сделать и так, как Вы предлагаете. Но интерполяция на единую частоту от всех возможных входных частот WAV всё-же - очень полезна. Она позволит не прибивать гвоздями частоту МК к требуемой конкретным форматом WAV.
Как из этого следует что "на stm32 глубину звучания больше 8 бит не сделать"? Что именно мешает? Ведь 9000 - это намного! больше чем 8 бит. Если что.
Добавлено after 1 minute 9 seconds:
[uquote="AVI-crak",url="/forum/viewtopic.php?p=4211771#p4211771"]Назовите плиз полное название чипа.
Я не верю что там нет DAC контактов.[/uquote]Автор хочет на ШИМ. Причём тут ЦАП?
Добавлено after 7 minutes 10 seconds:
[uquote="Dimon456",url="/forum/viewtopic.php?p=4212007#p4212007"]MSB 8 бит грузишь в один канал таймера, LSB 8 бит грузишь в другой канал таймера, на выходе каналов таймера делитель из двух резисторов, результат DAC ШИМ 16 бит.[/uquote]Чем такой комбайн ваять, лучше сделать интерполяцию входного потока сэмплов на более высокую частоту сэмплирования ШИМ. Фиксированную частоту. Единую для всех форматов и частот входных WAV. Чтобы для каждой возможной частоты WAV не надо было отдельный код писать.
Так будет гораздо проще, а результат - не хуже.
Хотя конечно если уж хочется совсем супер-пупер качества, и возможны высокие разрядности входных WAV + с высокими частотами дискретизации, то можно сделать и так, как Вы предлагаете. Но интерполяция на единую частоту от всех возможных входных частот WAV всё-же - очень полезна. Она позволит не прибивать гвоздями частоту МК к требуемой конкретным форматом WAV.
Re: stm32 аудиовывод, шум
Взяв STM-ку с I2S интерфейсом (не путать с I2C!) или с SAI и поставив внешний аудиокодек, избавимся от всех шумов и получим труъ-24-битный звук
При условии некосячной разводки.
А коль ШИМом пытаетесь получить высокие показатели битности и частоты дискретизации, то не стоит и мучиться, не выйдет. Лучше попробуйте хорошенько отфильтровать высокочастотные составляющие ШИМа. Ну и лучше конечно же использовать встроенный DAC, при одинаковых параметрах битности/частоты он даст более лучший звук с меньшими затратами ресурсов.
Посему, 8 бит - это речевое применение для систем оповещения и тому подобных "говорилок". Частота дискретизации при этом составляет 8 кГц или 11 кГц.
Ни на какую "музыку" тут надеяться не следует, особенно если хотите "без шумов и тресков". Для музыки - внешний аудиокодек типа AC'97 или WM8994 через интерфейс SAI или I2S.
А при ШИМ схемотехнически нужно отфильтровывать высокочастотные импульсы, лежащие выше половины частоты дискретизации. Причем, хорошо так отфильтровывать, фильтром 2-го порядка, поскольку при Fs = 8 кГц это всё попадает в звуковой слышимый диапазон.
Кстати, именно по этой причине в супер-пупер аудио стараются задрать частоту дискретизации до 192 кГц и выше - чтобы уменьшить порядок фильтров и уменьшить фазовые искажения.
А коль ШИМом пытаетесь получить высокие показатели битности и частоты дискретизации, то не стоит и мучиться, не выйдет. Лучше попробуйте хорошенько отфильтровать высокочастотные составляющие ШИМа. Ну и лучше конечно же использовать встроенный DAC, при одинаковых параметрах битности/частоты он даст более лучший звук с меньшими затратами ресурсов.
Да, так и будет, это нормально. Почитайте про шумы квантования и прочие "прелести" дискретизованного сигнала.Когда я его конвертирую в 8 бит, то появляется шум.
Посему, 8 бит - это речевое применение для систем оповещения и тому подобных "говорилок". Частота дискретизации при этом составляет 8 кГц или 11 кГц.
Ни на какую "музыку" тут надеяться не следует, особенно если хотите "без шумов и тресков". Для музыки - внешний аудиокодек типа AC'97 или WM8994 через интерфейс SAI или I2S.
А при ШИМ схемотехнически нужно отфильтровывать высокочастотные импульсы, лежащие выше половины частоты дискретизации. Причем, хорошо так отфильтровывать, фильтром 2-го порядка, поскольку при Fs = 8 кГц это всё попадает в звуковой слышимый диапазон.
Кстати, именно по этой причине в супер-пупер аудио стараются задрать частоту дискретизации до 192 кГц и выше - чтобы уменьшить порядок фильтров и уменьшить фазовые искажения.
Re: stm32 аудиовывод, шум
Не попадет.НовыйДень писал(а):поскольку при Fs = 8 кГц это всё попадает в звуковой слышимый диапазон.
jcxz, имеет ввиду запустить ШИМ на более высокой частоте, сколько это возможно, к примеру 72МГц ШИМ 8 бит частота получается 281,250кГц, и вот в него уже трамбовать поток с нужной частотой дискретизации.
Re: stm32 аудиовывод, шум
В этом нет практического смысла, в задирании настолько высоко Fs. Всё равно исходные 8 бит разрядности всю эту вашу музыку уконтрапупят вхлам. Вы еще попробуйте с такой скоростью готовить и отправлять данные то. Да и частота передискретизации должна быть кратной исходной частоте, чтобы не получить еще больше мусора и не перегрузить вычислениями.
Вообще, вся эта затея не стоит смысла в плане получения вменяемой "музыки" из-за некратных частот передискретизации и слишком низкой разрядности.
Вообще, вся эта затея не стоит смысла в плане получения вменяемой "музыки" из-за некратных частот передискретизации и слишком низкой разрядности.
Re: stm32 аудиовывод, шум
FM-модулятор в плане звучания музыки так же ни чего не стоит, хотя те же 8 бит.НовыйДень писал(а):и слишком низкой разрядности.
Здесь я пожалуй соглашусь, будет некая ошибка, но вот на сколько она будет проявляться на слух ...НовыйДень писал(а):Да и частота передискретизации должна быть кратной исходной частоте,
Какими вычислениями?, тупое копирование из точки А в точку Б с помощью DMA.НовыйДень писал(а):не перегрузить вычислениями
Re: stm32 аудиовывод, шум
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4214307#p4214307"]В этом нет практического смысла, в задирании настолько высоко Fs.[/uquote]Чем выше - тем проще фильтровать. И качественнее.
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4214307#p4214307"]Вы еще попробуйте с такой скоростью готовить и отправлять данные то.[/uquote]А что в этом сложного? Не на такой, но на 98кГц у меня вполне нормально работает. Да и выше - не проблема поднять.
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4214307#p4214307"]Да и частота передискретизации должна быть кратной исходной частоте, чтобы не получить еще больше мусора и не перегрузить вычислениями.[/uquote]Не должна. А перегрузить - это только если руки кривые. На такой высокой частоте дискретизации достаточно простейшей кусочно-линейной интерполяции.
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4214307#p4214307"]Вообще, вся эта затея не стоит смысла в плане получения вменяемой "музыки" из-за некратных частот передискретизации и слишком низкой разрядности.[/uquote]Открою вам страшную тайну: У реал-тайм потоков передискретизация почти всегда некратная. Так уж устроена природа.
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4214307#p4214307"]Вы еще попробуйте с такой скоростью готовить и отправлять данные то.[/uquote]А что в этом сложного? Не на такой, но на 98кГц у меня вполне нормально работает. Да и выше - не проблема поднять.
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4214307#p4214307"]Да и частота передискретизации должна быть кратной исходной частоте, чтобы не получить еще больше мусора и не перегрузить вычислениями.[/uquote]Не должна. А перегрузить - это только если руки кривые. На такой высокой частоте дискретизации достаточно простейшей кусочно-линейной интерполяции.
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4214307#p4214307"]Вообще, вся эта затея не стоит смысла в плане получения вменяемой "музыки" из-за некратных частот передискретизации и слишком низкой разрядности.[/uquote]Открою вам страшную тайну: У реал-тайм потоков передискретизация почти всегда некратная. Так уж устроена природа.


