Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 94
1

Пересчет амплитуды сигнала при ИКМ

14.11.2013, 17:56. Показов 5509. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Потребовалось на днях изменять амплитуду аналогового сигнала получаемого из ИКМ, или если по простому то нужно изменять громкость воспроизведения файлов записанных в формате wav. Т.е. МК гонит ШИМ на фильтр, а с него на УНЧ.
Регулировать нужно удаленно. Конечно можно использовать устройства регулирующие амплитуду уже после фильтра, но хотелось бы все делать еще в МК не доводя до аналогового сигнала. В связи с этим такая просьба - может быть у кого-нибудь завалялся алгоритм пересчета амплитуды сигнала закодированного ИКМ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2013, 17:56
Ответы с готовыми решениями:

Стабилизация амплитуды синусоидального сигнала
Добрый день. Пусть имеется синусоидальный сигнал. В процессе некоторых манипуляций его амплитуда...

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

Частотомер (3MHz) с измерением амплитуды сигнала
Частотомер (3MHz) с измерением амплитуды сигнала Для работы с металлодетектором был сделан такой...

Анализ сигнала для нахождения времени и амплитуды
Существует проблема: Есть форма сигнала представленная виде рисунка (рисунок 1) Можно ли с...

Определение амплитуды и фазы сигнала с переменной частотой дискретизации
Доброго времени суток, уважаемые форумчане! В процессе реализации Дискретного преобразования Фурье...

14
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
14.11.2013, 18:33 2
Умножать каждый сэмпл на коэффициент.
0
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
14.11.2013, 18:44 3
при цифровой регулировке на малой громкости искажения расти будут, лучше аналоговое управление сделать
0
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 94
14.11.2013, 21:12 4
Цитата Сообщение от Гарнист
Умножать каждый сэмпл на коэффициент.
Попробовал поделить на два, умножить на два, вычесть два, добавить два - получил треск. Как-то по-другому надо. Или может быть я не то делю-умножаю? Под сэмплом понимается один отсчет битрейта? Для восмибитного звука это будет один байт, верно?
Цитата Сообщение от Johmmy0007
при цифровой регулировке на малой громкости искажения расти будут, лучше аналоговое управление сделать
После гугления все больше склоняюсь к этому варианту.
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
14.11.2013, 22:20 5
Цитата Сообщение от Omdy Kork
Попробовал поделить на два, умножить на два, вычесть два, добавить два - получил треск.
А файл какой был? Загляните в заголовок - PCM? ADPCM? И где был треск? Умножалось/делилось только содержимое чанков с данными?
0
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 94
15.11.2013, 12:12 6
Цитата Сообщение от Гарнист
Цитата Сообщение от Omdy Kork
Попробовал поделить на два, умножить на два, вычесть два, добавить два - получил треск.
А файл какой был? Загляните в заголовок - PCM? ADPCM? И где был треск? Умножалось/делилось только содержимое чанков с данными?
Compression Code = 1 PCM/unsompressed, обрабатывались только чанки.
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
15.11.2013, 14:39 7
Удивительно.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
15.11.2013, 14:58 8
У вас сэмплы со знаком или без?
со знаком формула y=x*a
(a - коэффициент усиления, например, 0.5)
8 бит без знака y=((int)x-128)*a+128

(Ну, это чуть упрощённо, пренебрегая клиппингом и без оптимизации)
0
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 94
15.11.2013, 18:59 9
Цитата Сообщение от oomomstir
У вас сэмплы со знаком или без?
со знаком формула y=x*a
(a - коэффициент усиления, например, 0.5)
8 бит без знака y=((int)x-128)*a+128

(Ну, это чуть упрощённо, пренебрегая клиппингом и без оптимизации)
Значения без знака, но че-то все равно не получается - в динамике тишина.
Делаю так:
Код
unsykned char read_buf[BUF_LEN];
for(i=0;i<BUF_LEN;i++)
read_buf[i] = (((int)read_buf[i]-128)*0.5)+128;
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
15.11.2013, 19:44 10
А код, который read_buf заполняет (между первой и второй строчкой) вы пропустили или по ошибке выдаёте на выход пустой массив? (лучше в местах пропусков многоточие ставить, чтобы понятно было)

И если обработку сигнала не делаете - на выходе звук есть?
Тогда напишите для пробы
Код
for(i=0;i<BUF_LEN;i++) {
read_buf[i] = (read_buf[i]>>1)+64;
}
(это примерно то же самое, что в вашем коде, только быстро и без плавающей точки)

Кстати, маленький совет-оффтопик: если у вас внутренности if/while/for попадают на отдельную строчку - _всегда_ ставьте фигурные скобки. Сэкономите себе много нервов, когда однажды добавите к ним строчку, а окажется, что работает не так.
0
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 94
15.11.2013, 22:24 11
Цитата Сообщение от oomomstir
А код, который read_buf заполняет (между первой и второй строчкой) вы пропустили или по ошибке выдаёте на выход пустой массив? (лучше в местах пропусков многоточие ставить, чтобы понятно было)
Извиняюсь. На самом деле массив конечно заполняется выше в коде.
Цитата Сообщение от oomomstir
И если обработку сигнала не делаете - на выходе звук есть?
Да есть, нормальный звук.
Цитата Сообщение от oomomstir
Тогда напишите для пробы
Код:
for(i=0;i<BUF_LEN;i++) {
read_buf[i] = (read_buf[i]>>1)+64;
}(это примерно то же самое, что в вашем коде, только быстро и без плавающей точки)

Уже так писал. Не полегчало. увы

Спасибо за совет маленькими буквами.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
16.11.2013, 01:03 12
Мистика какая-то.
Преобразование заведомо правильное.
Была мысль, что вы не успеваете обрабатывать данные, но раз ускорение кода ничего не меняет - значит, и это вряд ли причина.

Выкидываете значения в ШИМ сами напрямую, или библиотекой какой? И вообще, какой хотя бы проц и компилятор?

В общем, не глядя на код - вряд ли получится разобраться.
0
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 94
16.11.2013, 10:50 13
Цитата Сообщение от oomomstir
Мистика какая-то.
Преобразование заведомо правильное.
Была мысль, что вы не успеваете обрабатывать данные, но раз ускорение кода ничего не меняет - значит, и это вряд ли причина.

Выкидываете значения в ШИМ сами напрямую, или библиотекой какой? И вообще, какой хотя бы проц и компилятор?

В общем, не глядя на код - вряд ли получится разобраться.
Спасибо за участие. Оказалось, что сам дурак - счетчик буфера в цикле не той разрядности взял, он переполнялся и код не успевал выполнятся в отведенное время. После исправления заработало, но полезли искажения. Гиблое дело вообщем. Буду делать на аналоге регулировку.

Для тех кто пойдет этим путем некоторые характеристики работы на Atmega 32 на частоте 20Мгц:
Динные выбирались из самой дешевой SD-карточки аппаратным SPI на максимальной скорости SPI с помощью библиотеки Petit FatFs в два буфера по 256 байт. Заполнение одного буфера занимало максимум 3 мс.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
16.11.2013, 15:04 14
Цитата Сообщение от Omdy Kork
После исправления заработало, но полезли искажения. Гиблое дело вообщем.
... ...
Для тех кто пойдет этим путем некоторые характеристики работы на Atmega 32 на частоте 20Мгц:
Динные выбирались ... с помощью библиотеки Petit FatFs
У Меги32 достаточно ОЗУ для использования нормальной конфигурации FatFs, а не Petit! Чтение с карты происходило бы быстрее и более гладко. Petit хуже, это для совсем уж хилых микроконтроллеров.

Цитата Сообщение от Omdy Kork
в два буфера по 256 байт. Заполнение одного буфера занимало максимум 3 мкс
То есть частота SPI у Вас - порядка 700 МГц. Отличный AVR попался. Настройками не поделитесь? ;-)
0
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 94
16.11.2013, 17:33 15
Цитата Сообщение от OtyxPM
Цитата Сообщение от Omdy Kork
После исправления заработало, но полезли искажения. Гиблое дело вообщем.
... ...
Для тех кто пойдет этим путем некоторые характеристики работы на Atmega 32 на частоте 20Мгц:
Динные выбирались ... с помощью библиотеки Petit FatFs
У Меги32 достаточно ОЗУ для использования нормальной конфигурации FatFs, а не Petit! Чтение с карты происходило бы быстрее и более гладко. Petit хуже, это для совсем уж хилых микроконтроллеров.
Думаете переход на FatFS позволит как-то повлиять на уменьшение искажений при пересчете амплитуды? Притом, что буфер буфер опустошается раз в 20 мс, добавление цикла по вышеприведенным формулам не так уж много добавило к 3 мс, поэтому вряд ли уменьшение времени считывания как-то повлияет на те искажения которые вносят именно пересчет. Хотя может быть я чего-то упускаю из виду.
Цитата Сообщение от OtyxPM
Цитата Сообщение от Omdy Kork
в два буфера по 256 байт. Заполнение одного буфера занимало максимум 3 мкс
То есть частота SPI у Вас - порядка 700 МГц. Отличный AVR попался. Настройками не поделитесь? ;-)
Ах ты ж ёшкин кот! Точно миллисекунд же! Лишнюю "к" воткнул, извиняюсь.
0
16.11.2013, 17:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2013, 17:33
Помогаю со студенческими работами здесь

Изменение амплитуды сигнала
Хотелось бы услышать более опытных саратников по такому вопросу: Имеется атмега8, которая в...

регенерацию сигнала ИКМ
помогите разработать прогу на ассемблере мп кр580вм80а реализующую регенерацию сигнала ИКМ .по...

Открыть файл формата WAV, воспроизвести его и отобразить график амплитуды и времени этого сигнала (файла), а также спектр сигнала
Здравствуйте ! Помогите пожалуйста с программой на Delphi 7. Не могу написать программу которая...

Оценка амплитуды сигнала
Помогите, пожалуйста, оценить амплитуду случайного сигнала графически.

Оценка амплитуды сигнала
Помогите, пожалуйста, оценить амплитуду случайного сигнала графически.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru