Перейти к содержанию
    

Формирование звука ШИМом Меги48

Доброго времени суток всем!

Решил вот заставить Мегу разговаривать :biggrin: . Прицепил к ней AT45DB161D, залил звуковой файлик (PCM 8 kHz, 8 bit) и ШИМом на 1-м таймере пытаюсь формировать звук. Таймер 0 у меня тикает на 8000 Гц, на каждом тике записываю в OCR1A новое значение, прочитанное из датафлэша. Режим ШИМа 8 битный "Fast PWM", тактовая контроллера 8 МГц, т.е. частота ШИМа ~31 кГц. Хотел сам себя обмануть и обойтись без дополнительных фильтров, надеялся на сглаживание индуктивностью динамика. После первых опытов, понял, что был не прав, разборчивость речи плохая. Сейчас в раздумье: или фильтровать сразу на выходе Меги, а потом усиливать звук; или раскачать импульсный сигнал сначала, а потом зафильтровать его LC фильтром. Что посоветуете? Качество нужно на уровне телефонного, т.е. чтобы только разборчива речь была.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наверное, параллельно со звуком имеется характерный свист?

Передискретизацию полезно сделать хотя бы 2х. Т.е. частота дискретизации на выходе должна быть 16кГц. И цифровой фильтр. Ресурсов это дело жрёт не сильно много, а эффект весьма заметный.

Ну, потом зафильтровать каким-нибудь примитивным аналоговым фильтром.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наверное, параллельно со звуком имеется характерный свист?

Передискретизацию полезно сделать хотя бы 2х. Т.е. частота дискретизации на выходе должна быть 16кГц. И цифровой фильтр. Ресурсов это дело жрёт не сильно много, а эффект весьма заметный.

Ну, потом зафильтровать каким-нибудь примитивным аналоговым фильтром.

"Про пар мне барин все понятно... куды лошадь то запрягать?" :) Примитивный аналоговый фильтр не помогает, вот здесь например, применили Чебышевский 5-го порядка. Я собственно хотел бы попроще что-нибудь (жаба и лень душат совместно, а тут еще жара +35). Про цифровой фильтр, жрущий мало ресурсов интересно, если можно - ссылочку на примерчик, сам пока цифровых фильтров не делал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Примитивный аналоговый фильтр не помогает, вот здесь например, применили Чебышевский 5-го порядка.

Качества хотели. Если нужна только разборчивая речь, то с передискретизацией и RC цепочка неплохо работает. Я, правда, предискретизацию делал 4х, но, думаю, 2х тоже сильно улучшит звук.

Про цифровой фильтр, жрущий мало ресурсов интересно, если можно - ссылочку на примерчик,

http://www.atmel.com/dyn/resources/prod_do...nts/doc2527.pdf

FIR поможет. Чем больше его длина, тем лучше, ограничивается только наличием вычислительных ресурсов. Аккумулятора 16-битного хватит. Частоту среза ему 3,4кГц и будет щастье.

 

А вообще, для речи гораздо лучше подходит АДИКМ, а не ИКМ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Качества хотели. Если нужна только разборчивая речь, то с передискретизацией и RC цепочка неплохо работает. Я, правда, предискретизацию делал 4х, но, думаю, 2х тоже сильно улучшит звук.

 

http://www.atmel.com/dyn/resources/prod_do...nts/doc2527.pdf

FIR поможет. Чем больше его длина, тем лучше, ограничивается только наличием вычислительных ресурсов. Аккумулятора 16-битного хватит. Частоту среза ему 3,4кГц и будет щастье.

Спасибо за ссылку, буду читать.

 

А вообще, для речи гораздо лучше подходит АДИКМ, а не ИКМ.

Имеется в виду ADPCM?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

наверно из PCM правильно PWM преобразовали ? там знак +12 бит получается. я использовал 2 канала PWM , один вышие 6 бит выдает, другои младшие 6. суммируются резисторами R и 64*R, за этим 3.порядка RC филтрь на опарационном У. качество неплохая получается. еще, PWM должен быть фазокорректный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... еще, PWM должен быть фазокорректный.

Кстати, да! На такой низкой частоте дискретизации Fast PWM будет здорово гадить.

Если вопрос ко мне, могу рассказать, что я делал. Дело было давно, не все подробности помню. машина была 51-я с соответствующими ограничениями по железу и быстродействию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А посмотрите :

http://www.gaw.ru/html.cgi/txt/app/Atmel/m...at45_to_avr.htm

(AVR335)

PS, увидел, что это и есть "вот здесь" - :)

что вспомнилось, у меня это был 4433 , и, если они не подправили исходник - нужно задействовать оба буфера. А как заливали РСМ во флэш?

Изменено пользователем INT1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прицепил к ней AT45DB161D, залил звуковой файлик (PCM 8 kHz, 8 bit) и ШИМом на 1-м таймере пытаюсь формировать звук. Таймер 0 у меня тикает на 8000 Гц, на каждом тике записываю в OCR1A новое значение, прочитанное из датафлэша. Режим ШИМа 8 битный "Fast PWM", тактовая контроллера 8 МГц, т.е. частота ШИМа ~31 кГц. Хотел сам себя обмануть и обойтись без дополнительных фильтров, надеялся на сглаживание индуктивностью динамика. После первых опытов, понял, что был не прав, разборчивость речи плохая. Сейчас в раздумье: или фильтровать сразу на выходе Меги, а потом усиливать звук; или раскачать импульсный сигнал сначала, а потом зафильтровать его LC фильтром. Что посоветуете? Качество нужно на уровне телефонного, т.е. чтобы только разборчива речь была.

Или лыжи не едут, или масло мало :cranky: . Проверь, что залил и как выдаешь. Проверь стоит ли у тебя в параллель динамику емкость. Проверь, стоит ли у тебя электролит между ногой Меги и динамиком...

Бо при твоих условиях можно говорить о плохом воспроизведении музыки, но никак не о плохой разборчивости речи. Плохая разборчивость это когда 2 кгц, 4 бита :biggrin: .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если звук сделан по псм стандарту то может быть что мю или а компандирование применено . То есть перед тем как воспроизводить обратное преобразование надо.

Что касается 8 кГц звука то согласен с предыдушим автором - с разборчивостью речи никаких проблем не должно быть.

А в случае увеличения частоты шима в два раза попробуй грубо заполнить промежуточные недостаюшие значения средним двух смежных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел вот статью из "Paguo" может будет интересна

Нормально работает с усилителем в классе D, но нужен хотя бы однозвенный LC фильтр на динамик, и обеспечить конструктивные требования к L. Поройтесь в апнотах Apex_a:

http://eportal.apexmicrotech.com/mainsite/...s/app_notes.asp

wav_pcm_eeprom.rar

Изменено пользователем INT1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

наверно из PCM правильно PWM преобразовали ? там знак +12 бит получается. я использовал 2 канала PWM , один вышие 6 бит выдает, другои младшие 6. суммируются резисторами R и 64*R, за этим 3.порядка RC филтрь на опарационном У. качество неплохая получается. еще, PWM должен быть фазокорректный.

 

Согласен с данным автором у меня также получалось (13 бит). Поэтому от шима я отказался поставил кофидек с цифровым фильтром на выходе. Там ЦАП нелинейный. Всё класс получилось. В смысле речи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

имел опыт с воспроизведением аудио используя шим, но он был програмный, и написан на х86. Воспроизводил не голос, а музыку в формате 11050 Гц, 8 бит. Вывод на ПК-спикер. + элементарная р-ц цепочка = очень приемлемое качество как для ШИМа. Так что мой совет: поднимите частоту, хотябы вдвое + элементарный фильтр, а уж потом усилитель (ни как не наоборот, импульсы усиливать не стоит). Для голоса этого должно хватить с избытком.

 

P.S.: Так как в кампе небыло звуковой карты, слушал таким оброзом музыку довольно долго, ставил Электроника У-101-стерео + S30 = супер!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

наверно из PCM правильно PWM преобразовали ? там знак +12 бит получается. я использовал 2 канала PWM , один вышие 6 бит выдает, другои младшие 6. суммируются резисторами R и 64*R, за этим 3.порядка RC филтрь на опарационном У. качество неплохая получается. еще, PWM должен быть фазокорректный.

Не совсем понял про преобразование. Я использую 8-ми битный RAW PCM, беззнаковый, без A-low, mu-low; такие может делать Cool Edit. Пробовал и фазокорректный PWM, при этом качество улучшается немного, но сильнее свист.

 

А посмотрите :

http://www.gaw.ru/html.cgi/txt/app/Atmel/m...at45_to_avr.htm

(AVR335)

PS, увидел, что это и есть "вот здесь" - :)

что вспомнилось, у меня это был 4433 , и, если они не подправили исходник - нужно задействовать оба буфера. А как заливали РСМ во флэш?

РСМ во флэш заливаю через последовательный порт, вернее с СОМа компьютера на скорости 19200 передаю контроллеру, а он уже льет по SPI во флэш, для контроля читаю назад - все совпадает. Можно оба буфера использовать, а если лениво , то можно в RealTerm-е поставить задержку между байтами 5-6 мс, тогда с одним буфером успевает писать в страницу между приемом соседних байтов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...