|
Формирование звука ШИМом Меги48, Нужен совет по фильтрации |
|
|
|
Aug 8 2006, 05:42
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964

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

|
Цитата(pokos @ Aug 8 2006, 10:30)  Наверное, параллельно со звуком имеется характерный свист? Передискретизацию полезно сделать хотя бы 2х. Т.е. частота дискретизации на выходе должна быть 16кГц. И цифровой фильтр. Ресурсов это дело жрёт не сильно много, а эффект весьма заметный. Ну, потом зафильтровать каким-нибудь примитивным аналоговым фильтром. "Про пар мне барин все понятно... куды лошадь то запрягать?"  Примитивный аналоговый фильтр не помогает, вот здесь например, применили Чебышевский 5-го порядка. Я собственно хотел бы попроще что-нибудь (жаба и лень душат совместно, а тут еще жара +35). Про цифровой фильтр, жрущий мало ресурсов интересно, если можно - ссылочку на примерчик, сам пока цифровых фильтров не делал.
|
|
|
|
|
Aug 8 2006, 07:22
|
Местный
  
Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445

|
Цитата(ksv198 @ Aug 8 2006, 11:03)  Примитивный аналоговый фильтр не помогает, вот здесь например, применили Чебышевский 5-го порядка. Качества хотели. Если нужна только разборчивая речь, то с передискретизацией и RC цепочка неплохо работает. Я, правда, предискретизацию делал 4х, но, думаю, 2х тоже сильно улучшит звук. Цитата Про цифровой фильтр, жрущий мало ресурсов интересно, если можно - ссылочку на примерчик, http://www.atmel.com/dyn/resources/prod_do...nts/doc2527.pdfFIR поможет. Чем больше его длина, тем лучше, ограничивается только наличием вычислительных ресурсов. Аккумулятора 16-битного хватит. Частоту среза ему 3,4кГц и будет щастье. А вообще, для речи гораздо лучше подходит АДИКМ, а не ИКМ.
|
|
|
|
|
Aug 8 2006, 07:52
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964

|
Цитата(pokos @ Aug 8 2006, 11:22)  Качества хотели. Если нужна только разборчивая речь, то с передискретизацией и RC цепочка неплохо работает. Я, правда, предискретизацию делал 4х, но, думаю, 2х тоже сильно улучшит звук. http://www.atmel.com/dyn/resources/prod_do...nts/doc2527.pdfFIR поможет. Чем больше его длина, тем лучше, ограничивается только наличием вычислительных ресурсов. Аккумулятора 16-битного хватит. Частоту среза ему 3,4кГц и будет щастье. Спасибо за ссылку, буду читать. Цитата(pokos @ Aug 8 2006, 11:22)  А вообще, для речи гораздо лучше подходит АДИКМ, а не ИКМ. Имеется в виду ADPCM?
|
|
|
|
|
Aug 8 2006, 07:58
|
Местный
  
Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445

|
Цитата(ksv198 @ Aug 8 2006, 11:52)  Имеется в виду ADPCM? Я-я, безондерс.
|
|
|
|
|
Aug 8 2006, 12:44
|
Местный
  
Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445

|
Цитата(proba @ Aug 8 2006, 16:30)  ... еще, PWM должен быть фазокорректный. Кстати, да! На такой низкой частоте дискретизации Fast PWM будет здорово гадить. Если вопрос ко мне, могу рассказать, что я делал. Дело было давно, не все подробности помню. машина была 51-я с соответствующими ограничениями по железу и быстродействию.
|
|
|
|
|
Aug 8 2006, 13:08
|
deleted
   
Группа: Свой
Сообщений: 555
Регистрация: 28-08-05
Пользователь №: 8 024

|
А посмотрите : http://www.gaw.ru/html.cgi/txt/app/Atmel/m...at45_to_avr.htm(AVR335) PS, увидел, что это и есть "вот здесь" - что вспомнилось, у меня это был 4433 , и, если они не подправили исходник - нужно задействовать оба буфера. А как заливали РСМ во флэш?
Сообщение отредактировал INT1 - Aug 8 2006, 13:23
|
|
|
|
|
Aug 8 2006, 16:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Цитата(ksv198 @ Aug 8 2006, 08:42)  Прицепил к ней AT45DB161D, залил звуковой файлик (PCM 8 kHz, 8 bit) и ШИМом на 1-м таймере пытаюсь формировать звук. Таймер 0 у меня тикает на 8000 Гц, на каждом тике записываю в OCR1A новое значение, прочитанное из датафлэша. Режим ШИМа 8 битный "Fast PWM", тактовая контроллера 8 МГц, т.е. частота ШИМа ~31 кГц. Хотел сам себя обмануть и обойтись без дополнительных фильтров, надеялся на сглаживание индуктивностью динамика. После первых опытов, понял, что был не прав, разборчивость речи плохая. Сейчас в раздумье: или фильтровать сразу на выходе Меги, а потом усиливать звук; или раскачать импульсный сигнал сначала, а потом зафильтровать его LC фильтром. Что посоветуете? Качество нужно на уровне телефонного, т.е. чтобы только разборчива речь была. Или лыжи не едут, или масло мало  . Проверь, что залил и как выдаешь. Проверь стоит ли у тебя в параллель динамику емкость. Проверь, стоит ли у тебя электролит между ногой Меги и динамиком... Бо при твоих условиях можно говорить о плохом воспроизведении музыки, но никак не о плохой разборчивости речи. Плохая разборчивость это когда 2 кгц, 4 бита  .
|
|
|
|
|
Aug 8 2006, 18:03
|
deleted
   
Группа: Свой
Сообщений: 555
Регистрация: 28-08-05
Пользователь №: 8 024

|
Нашел вот статью из "Paguo" может будет интересна Нормально работает с усилителем в классе D, но нужен хотя бы однозвенный LC фильтр на динамик, и обеспечить конструктивные требования к L. Поройтесь в апнотах Apex_a: http://eportal.apexmicrotech.com/mainsite/...s/app_notes.asp
Сообщение отредактировал INT1 - Aug 8 2006, 18:34
|
|
|
|
|
Aug 8 2006, 20:29
|

Участник

Группа: Участник
Сообщений: 31
Регистрация: 26-05-05
Из: Севастополь
Пользователь №: 5 391

|
имел опыт с воспроизведением аудио используя шим, но он был програмный, и написан на х86. Воспроизводил не голос, а музыку в формате 11050 Гц, 8 бит. Вывод на ПК-спикер. + элементарная р-ц цепочка = очень приемлемое качество как для ШИМа. Так что мой совет: поднимите частоту, хотябы вдвое + элементарный фильтр, а уж потом усилитель (ни как не наоборот, импульсы усиливать не стоит). Для голоса этого должно хватить с избытком.
P.S.: Так как в кампе небыло звуковой карты, слушал таким оброзом музыку довольно долго, ставил Электроника У-101-стерео + S30 = супер!
|
|
|
|
|
Aug 9 2006, 07:23
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964

|
Цитата(proba @ Aug 8 2006, 16:30)  наверно из PCM правильно PWM преобразовали ? там знак +12 бит получается. я использовал 2 канала PWM , один вышие 6 бит выдает, другои младшие 6. суммируются резисторами R и 64*R, за этим 3.порядка RC филтрь на опарационном У. качество неплохая получается. еще, PWM должен быть фазокорректный. Не совсем понял про преобразование. Я использую 8-ми битный RAW PCM, беззнаковый, без A-low, mu-low; такие может делать Cool Edit. Пробовал и фазокорректный PWM, при этом качество улучшается немного, но сильнее свист. Цитата(INT1 @ Aug 8 2006, 17:08)  А посмотрите : http://www.gaw.ru/html.cgi/txt/app/Atmel/m...at45_to_avr.htm(AVR335) PS, увидел, что это и есть "вот здесь" - что вспомнилось, у меня это был 4433 , и, если они не подправили исходник - нужно задействовать оба буфера. А как заливали РСМ во флэш? РСМ во флэш заливаю через последовательный порт, вернее с СОМа компьютера на скорости 19200 передаю контроллеру, а он уже льет по SPI во флэш, для контроля читаю назад - все совпадает. Можно оба буфера использовать, а если лениво , то можно в RealTerm-е поставить задержку между байтами 5-6 мс, тогда с одним буфером успевает писать в страницу между приемом соседних байтов.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|