Jump to content
    

Сдвиг частотного спектра с помощью МДКП (MDCT). Прошу помочь.

Задача: передать аудиосигнал по аналоговому каналу, который плохо проводит сигналы аудиочастот. Для этого входной аудиосигнал преобразовать в спектр, изменить этот спектр (сдвинуть и сжать/растянуть) и затем обратно преобразовать в аудио. На удаленном конце сделать обратную процедуру.

 

Решено было использовать Модифицированное Дискретное Косинусное Преобразование, т.к. оно позволяет склеивать соседние куски при обработке.

 

Все это делается на микроконтроллете STM32F103RET6. Есть DSP-библиотека от ST, из которой позаимствована функция БПФ (на 64 отсчета). В интернете так же нашел реализацию МДКП через БПФ. :smile3046:

 

Работает это так. АЦП непрерывно молотит данные в буфер длиной 4N. Когда половина заполняется - возникает прерываение и первые 2N отсчетов поступают в функцию МДКП (в это время АЦП заполняет вторую часть буфера). Функция МДКП формирует массив длиной 4N: первая половина - вход АЦП от предыдущего(!) вызова функции; вторая половина - то что только что получили из буфера АЦП (оно же сохраняется для следующего вызова МДКП). Затем накладывается окно Ханна (т.е. просто полпериода синуса).

 

Затем собственно само МДКП: сдвиг на 1/4; преротация (подготовка к БПФ; из 4N отсчетов получаем N комплексных числа); само БПФ; постротация; сортировка.

 

Потом, по идее, должно идти преотразование спектра. Но пока тут ничего не делаю.

 

Затем оМДКП (все аналогично МДКП; на выходе имеем 4N отсчетов).

 

На эти выходные 4N значений опять накладываем такое же окно, и к первой половине прибавляем вторую половину, но от предыдущего вызова функции. А вторую половину, соответственно, сохраняем для следующего вызова.

 

Я проверял все это на синусоидальном входном сигнале.

 

Проблема заключается в том, что алгоритм нормально работает только когда во входных (для МДКП) 2N отсчетах помещается целое количество периодов входного сигнала. Как быть? Я знаю, что МДКП применяется, например в OGG Vorbis, и вроде бы даже в простом MP3.

 

Уважаемые форумчане, прошу подсказать: :cranky:

 

1. Как работает МДКП, когда на входе произвольный сигнал? Правильно ли я использую наложение окон?

 

2. Можно ли добитсья поставленной цели другим путем? Нужно перевести в частотную область, там преобразовать определенным образом, и потом перевести обратно во временную. При этом чтобы голос был нормально слышен.

 

 

Share this post


Link to post
Share on other sites

А может быть надо просто сдвинуть спектр в ту область, которая хорошо передаётся по каналу связи. Затем передать сигнал. И после этого сдвинуть обратно. Сделать это можно очень просто во временной области, при этом не используя ни МДКП, ни БПФ, ни какое-либо другое подобное преобразование.

Не понятно для чего нужно играть со спектром - сжимать и разжимать его.

Share this post


Link to post
Share on other sites

связист, вы не могли бы сказать, как можно сдвинуть спектр во временной области? Буду благодарен. Не очень разбираюсь в ЦОСе.

 

 

Сжимать/разжимать спектр предполагается для того, чтобы как можно лучше "вписаться" в характеристики линии передачи. Одновременно со сдвигом спектра предполагается и увеличение частоты семплирования на удаленном конце.

 

 

Share this post


Link to post
Share on other sites

связист, вы не могли бы сказать, как можно сдвинуть спектр во временной области? Буду благодарен. Не очень разбираюсь в ЦОСе.

 

 

Сжимать/разжимать спектр предполагается для того, чтобы как можно лучше "вписаться" в характеристики линии передачи. Одновременно со сдвигом спектра предполагается и увеличение частоты семплирования на удаленном конце.

 

Сигнал сдвигается по частоте при помощи модулятора. Читай здесь

Edited by bahurin

Share this post


Link to post
Share on other sites

Читай здесь

 

Помойму здесь написано слишком запутанно, хотя, наверное, достаточно полно и проще, наверное, суть явления объяснить не получится.

Если сказать то же самое в двух словах, то надо сделать так:

1. получить из исходного сигнала аналитический сигнал;

2. умножить аналитический сигнал на комплексную синусоиду нужной частоты (это и будет собственно сдвиг частоты);

3. получить из сдвинутого аналитического сигнала вещественный сигнал (отбросить мнимую часть).

Не знаю стало ли понятнее после таких объяснений, но в любом случае Вам надо копать в сторону ЦОС если хотите дальше написать программу и чтобы она при этом заработало.

 

Вот кстати в соседней ветке такую же тему обсуждают.

http://electronix.ru/forum/index.php?showtopic=92947

Share this post


Link to post
Share on other sites

О... Я, похоже, попал =)

Спасибо за наводки! Постараюсь постичь всю эту заумь.

Share this post


Link to post
Share on other sites

ZeroQu смотрите на рисунок.

Материал взять отсюда http://www.dsplib.ru/content/hilbertquad/hilbertquad.html

Тут главное правильно подобрать ФНЧ с хорошим подавлением не нужной полосы. И с нужными вам параметрами.

post-41680-1312467547_thumb.png

Share this post


Link to post
Share on other sites

Задача: передать аудиосигнал по аналоговому каналу, который плохо проводит сигналы аудиочастот. Для этого входной аудиосигнал преобразовать в спектр, изменить этот спектр (сдвинуть и сжать/растянуть) и затем обратно преобразовать в аудио. На удаленном конце сделать обратную процедуру.

Автор нигде не указал, что не хватает полосы пропускания, значит обычная амплитудная модуляция вполне подойдет и можно сэкономить контроллер. А использование одной боковой полосы - это лишь экономия полосы в 2 раза. Неужели такая малость все приведет в норму?

А если полосы пропускания нет, то и сдвигать некуда.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...