ZeroQu 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба Задача: передать аудиосигнал по аналоговому каналу, который плохо проводит сигналы аудиочастот. Для этого входной аудиосигнал преобразовать в спектр, изменить этот спектр (сдвинуть и сжать/растянуть) и затем обратно преобразовать в аудио. На удаленном конце сделать обратную процедуру. Решено было использовать Модифицированное Дискретное Косинусное Преобразование, т.к. оно позволяет склеивать соседние куски при обработке. Все это делается на микроконтроллете STM32F103RET6. Есть DSP-библиотека от ST, из которой позаимствована функция БПФ (на 64 отсчета). В интернете так же нашел реализацию МДКП через БПФ. :smile3046: Работает это так. АЦП непрерывно молотит данные в буфер длиной 4N. Когда половина заполняется - возникает прерываение и первые 2N отсчетов поступают в функцию МДКП (в это время АЦП заполняет вторую часть буфера). Функция МДКП формирует массив длиной 4N: первая половина - вход АЦП от предыдущего(!) вызова функции; вторая половина - то что только что получили из буфера АЦП (оно же сохраняется для следующего вызова МДКП). Затем накладывается окно Ханна (т.е. просто полпериода синуса). Затем собственно само МДКП: сдвиг на 1/4; преротация (подготовка к БПФ; из 4N отсчетов получаем N комплексных числа); само БПФ; постротация; сортировка. Потом, по идее, должно идти преотразование спектра. Но пока тут ничего не делаю. Затем оМДКП (все аналогично МДКП; на выходе имеем 4N отсчетов). На эти выходные 4N значений опять накладываем такое же окно, и к первой половине прибавляем вторую половину, но от предыдущего вызова функции. А вторую половину, соответственно, сохраняем для следующего вызова. Я проверял все это на синусоидальном входном сигнале. Проблема заключается в том, что алгоритм нормально работает только когда во входных (для МДКП) 2N отсчетах помещается целое количество периодов входного сигнала. Как быть? Я знаю, что МДКП применяется, например в OGG Vorbis, и вроде бы даже в простом MP3. Уважаемые форумчане, прошу подсказать: :cranky: 1. Как работает МДКП, когда на входе произвольный сигнал? Правильно ли я использую наложение окон? 2. Можно ли добитсья поставленной цели другим путем? Нужно перевести в частотную область, там преобразовать определенным образом, и потом перевести обратно во временную. При этом чтобы голос был нормально слышен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Связист 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба А может быть надо просто сдвинуть спектр в ту область, которая хорошо передаётся по каналу связи. Затем передать сигнал. И после этого сдвинуть обратно. Сделать это можно очень просто во временной области, при этом не используя ни МДКП, ни БПФ, ни какое-либо другое подобное преобразование. Не понятно для чего нужно играть со спектром - сжимать и разжимать его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZeroQu 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба связист, вы не могли бы сказать, как можно сдвинуть спектр во временной области? Буду благодарен. Не очень разбираюсь в ЦОСе. Сжимать/разжимать спектр предполагается для того, чтобы как можно лучше "вписаться" в характеристики линии передачи. Одновременно со сдвигом спектра предполагается и увеличение частоты семплирования на удаленном конце. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 4 августа, 2011 Опубликовано 4 августа, 2011 (изменено) · Жалоба связист, вы не могли бы сказать, как можно сдвинуть спектр во временной области? Буду благодарен. Не очень разбираюсь в ЦОСе. Сжимать/разжимать спектр предполагается для того, чтобы как можно лучше "вписаться" в характеристики линии передачи. Одновременно со сдвигом спектра предполагается и увеличение частоты семплирования на удаленном конце. Сигнал сдвигается по частоте при помощи модулятора. Читай здесь Изменено 4 августа, 2011 пользователем bahurin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Связист 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба Читай здесь Помойму здесь написано слишком запутанно, хотя, наверное, достаточно полно и проще, наверное, суть явления объяснить не получится. Если сказать то же самое в двух словах, то надо сделать так: 1. получить из исходного сигнала аналитический сигнал; 2. умножить аналитический сигнал на комплексную синусоиду нужной частоты (это и будет собственно сдвиг частоты); 3. получить из сдвинутого аналитического сигнала вещественный сигнал (отбросить мнимую часть). Не знаю стало ли понятнее после таких объяснений, но в любом случае Вам надо копать в сторону ЦОС если хотите дальше написать программу и чтобы она при этом заработало. Вот кстати в соседней ветке такую же тему обсуждают. http://electronix.ru/forum/index.php?showtopic=92947 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZeroQu 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба О... Я, похоже, попал =) Спасибо за наводки! Постараюсь постичь всю эту заумь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan219 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба ZeroQu смотрите на рисунок. Материал взять отсюда http://www.dsplib.ru/content/hilbertquad/hilbertquad.html Тут главное правильно подобрать ФНЧ с хорошим подавлением не нужной полосы. И с нужными вам параметрами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZeroQu 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба Иван, спасибо! Надо пробовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SPACUM 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба Задача: передать аудиосигнал по аналоговому каналу, который плохо проводит сигналы аудиочастот. Для этого входной аудиосигнал преобразовать в спектр, изменить этот спектр (сдвинуть и сжать/растянуть) и затем обратно преобразовать в аудио. На удаленном конце сделать обратную процедуру. Автор нигде не указал, что не хватает полосы пропускания, значит обычная амплитудная модуляция вполне подойдет и можно сэкономить контроллер. А использование одной боковой полосы - это лишь экономия полосы в 2 раза. Неужели такая малость все приведет в норму? А если полосы пропускания нет, то и сдвигать некуда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться