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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
Cheeseman
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн июл 31, 2017 10:53:04

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

Сообщение Cheeseman »

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

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

Сообщение >TEHb< »

Если шум в аудиофайле, то никак. 8 бит проигрывал через ЦАП, качество приемлемое. Но и исходный файл звучал удовлетворительно.
"Привет!" - соврал он.
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

Вот список
Спойлер01 8бит моно 16000
02 8бит стерео 11025
03 8бит моно 22050
04 8бит стерео 22050
05 8бит моно 32000
06 8бит стерео 32000
07 8бит моно 44100
08 8бит стерео 44100
неигрушки 16бит стерео 44100
ненси 16бит стерео 44100

Сами файлы
оригинал
Запись на линейный вход компа с F100RB DAC 12бит
Аватара пользователя
Cheeseman
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн июл 31, 2017 10:53:04

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

Сообщение Cheeseman »

Спасибо) Значит будет подпукивать динамик. И таааааак сойдет XD
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

[uquote="Cheeseman",url="/forum/viewtopic.php?p=4210841#p4210841"]Как я понял на stm32 глубину звучания больше 8 бит не сделать.[/uquote]
Кто вам сказал такую глупость? Таймеры в stm32 имеют разрядность 16 бит, значит и ШИМ можете генерировать любой разрядности от 1 до 16 бит. Не увидел, что у вас за камень, но допустим, f103. Тактовая частота до 72 МГц. При частоте звука 44 кГц получаем модуль счета 1636. Если округлить, получим 1024, то есть 10 бит. При этом никто не заставляет вас брать именно 44 кГц, тогда можно еще поднять разрешение.
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

Существует способ получения 16 бит с помощью двух каналов 8 бит одного таймера.
Реклама
Аватара пользователя
Cheeseman
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн июл 31, 2017 10:53:04

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

Сообщение Cheeseman »

[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 не хотелось бы брать :) Про два канала таймера интересно звучит. Спасибо, подумаю над этим)
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

Cheeseman писал(а):Насколько понял из 16 бит берем старшие 10,
Берем 16 бит и сдвигаем вправо на 6 бит, получим 10 бит.
Cheeseman писал(а):Отразится ли это на качестве звука?
ШИМ всегда отразится на качестве звука.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Любая обработка отразится на качестве звука. Просто ШИМ (и последующее усиление класса D) наиболее простое и экономичное. А при хорошем выходном фильтре разницу по сравнению с "честным" ЦАПом вы не заметите. Хотя на 44 кГц даже без фильтра писка слышно не будет.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="Cheeseman",url="/forum/viewtopic.php?p=4210841#p4210841"]Как я понял на stm32 глубину звучания больше 8 бит не сделать.[/uquote]Что такое "глубина звучания"? И почему "не сделать"?
Аватара пользователя
Cheeseman
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн июл 31, 2017 10:53:04

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

Сообщение Cheeseman »

[uquote="jcxz",url="/forum/viewtopic.php?p=4211320#p4211320"]Что такое "глубина звучания"? И почему "не сделать"?[/uquote]
Лови ссылку. Всё подробно расписано. http://avr-start.ru/?p=1747 .
Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535. Но выше предложили пару способов не сильно терять в качестве звука. На днях сделаю программку и напишу что как получилось и слышны ли шумы
Аватара пользователя
AVI-crak
Прорезались зубы
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17
Контактная информация:

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

Сообщение AVI-crak »

Cheeseman писал(а):Решил вывести аудио на динамик
Назовите плиз полное название чипа.
Я не верю что там нет DAC контактов.
Аватара пользователя
Cheeseman
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн июл 31, 2017 10:53:04

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

Сообщение Cheeseman »

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

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

Сообщение Dimon456 »

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

Не верите? Проверьте.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="Cheeseman",url="/forum/viewtopic.php?p=4211763#p4211763"]Не сделать. т.к. если возьмем частоту тактирования 72МГц и частоту дискретизации 8кГц, то получим счет до 9000, что соответствует 14 битам. для 16 бит счет же должен быть равным 65535.[/uquote]И что??? :dont_know:
Как из этого следует что "на stm32 глубину звучания больше 8 бит не сделать"? Что именно мешает? Ведь 9000 - это намного! больше чем 8 бит. Если что.

Добавлено after 1 minute 9 seconds:
[uquote="AVI-crak",url="/forum/viewtopic.php?p=4211771#p4211771"]Назовите плиз полное название чипа.
Я не верю что там нет DAC контактов.[/uquote]Автор хочет на ШИМ. Причём тут ЦАП? :dont_know:

Добавлено 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.
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

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

Сообщение НовыйДень »

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

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

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

Сообщение Dimon456 »

НовыйДень писал(а):поскольку при Fs = 8 кГц это всё попадает в звуковой слышимый диапазон.
Не попадет.
jcxz, имеет ввиду запустить ШИМ на более высокой частоте, сколько это возможно, к примеру 72МГц ШИМ 8 бит частота получается 281,250кГц, и вот в него уже трамбовать поток с нужной частотой дискретизации.
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

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

Сообщение НовыйДень »

В этом нет практического смысла, в задирании настолько высоко Fs. Всё равно исходные 8 бит разрядности всю эту вашу музыку уконтрапупят вхлам. Вы еще попробуйте с такой скоростью готовить и отправлять данные то. Да и частота передискретизации должна быть кратной исходной частоте, чтобы не получить еще больше мусора и не перегрузить вычислениями.
Вообще, вся эта затея не стоит смысла в плане получения вменяемой "музыки" из-за некратных частот передискретизации и слишком низкой разрядности.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

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

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

Сообщение jcxz »

[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]Открою вам страшную тайну: У реал-тайм потоков передискретизация почти всегда некратная. Так уж устроена природа. 8)
Ответить

Вернуться в «ARM»