0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 94
|
|
1 | |
Пересчет амплитуды сигнала при ИКМ14.11.2013, 17:56. Показов 5536. Ответов 14
Метки нет (Все метки)
Потребовалось на днях изменять амплитуду аналогового сигнала получаемого из ИКМ, или если по простому то нужно изменять громкость воспроизведения файлов записанных в формате wav. Т.е. МК гонит ШИМ на фильтр, а с него на УНЧ.
Регулировать нужно удаленно. Конечно можно использовать устройства регулирующие амплитуду уже после фильтра, но хотелось бы все делать еще в МК не доводя до аналогового сигнала. В связи с этим такая просьба - может быть у кого-нибудь завалялся алгоритм пересчета амплитуды сигнала закодированного ИКМ?
0
|
14.11.2013, 17:56 | |
Ответы с готовыми решениями:
14
Стабилизация амплитуды синусоидального сигнала Выделение сигнала малой амплитуды с подставкой Частотомер (3MHz) с измерением амплитуды сигнала Анализ сигнала для нахождения времени и амплитуды Определение амплитуды и фазы сигнала с переменной частотой дискретизации |
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
0
|
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 94
|
|
15.11.2013, 12:12 | 6 |
Сообщение от Гарнист
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
Делаю так: Код
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
Сообщение от oomomstir
Сообщение от oomomstir
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
Сообщение от Omdy Kork
0
|
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 94
|
|
16.11.2013, 17:33 | 15 |
Сообщение от OtyxPM
Думаете переход на FatFS позволит как-то повлиять на уменьшение искажений при пересчете амплитуды? Притом, что буфер буфер опустошается раз в 20 мс, добавление цикла по вышеприведенным формулам не так уж много добавило к 3 мс, поэтому вряд ли уменьшение времени считывания как-то повлияет на те искажения которые вносят именно пересчет. Хотя может быть я чего-то упускаю из виду.
Сообщение от OtyxPM
Ах ты ж ёшкин кот! Точно миллисекунд же! Лишнюю "к" воткнул, извиняюсь.
0
|
16.11.2013, 17:33 | |
16.11.2013, 17:33 | |
Помогаю со студенческими работами здесь
15
Изменение амплитуды сигнала регенерацию сигнала ИКМ Открыть файл формата WAV, воспроизвести его и отобразить график амплитуды и времени этого сигнала (файла), а также спектр сигнала Оценка амплитуды сигнала Оценка амплитуды сигнала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |