реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Сдвиг частотного спектра с помощью МДКП (MDCT). Прошу помочь., проблема с реальным аудиосигналом. Подскажете?
ZeroQu
сообщение Aug 4 2011, 08:23
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 13-08-07
Пользователь №: 29 763



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

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

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

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

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

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

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

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

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

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

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

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

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

Go to the top of the page
 
+Quote Post
связист
сообщение Aug 4 2011, 09:21
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 1-08-08
Из: Санкт-Петербург
Пользователь №: 39 377



А может быть надо просто сдвинуть спектр в ту область, которая хорошо передаётся по каналу связи. Затем передать сигнал. И после этого сдвинуть обратно. Сделать это можно очень просто во временной области, при этом не используя ни МДКП, ни БПФ, ни какое-либо другое подобное преобразование.
Не понятно для чего нужно играть со спектром - сжимать и разжимать его.
Go to the top of the page
 
+Quote Post
ZeroQu
сообщение Aug 4 2011, 09:57
Сообщение #3





Группа: Участник
Сообщений: 8
Регистрация: 13-08-07
Пользователь №: 29 763



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


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

Go to the top of the page
 
+Quote Post
bahurin
сообщение Aug 4 2011, 10:11
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 20-09-08
Пользователь №: 40 347



Цитата(ZeroQu @ Aug 4 2011, 13:57) *
связист, вы не могли бы сказать, как можно сдвинуть спектр во временной области? Буду благодарен. Не очень разбираюсь в ЦОСе.


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


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

Сообщение отредактировал bahurin - Aug 4 2011, 10:12
Go to the top of the page
 
+Quote Post
связист
сообщение Aug 4 2011, 13:07
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 154
Регистрация: 1-08-08
Из: Санкт-Петербург
Пользователь №: 39 377



Цитата(bahurin @ Aug 4 2011, 14:11) *
Читай здесь


Помойму здесь написано слишком запутанно, хотя, наверное, достаточно полно и проще, наверное, суть явления объяснить не получится.
Если сказать то же самое в двух словах, то надо сделать так:
1. получить из исходного сигнала аналитический сигнал;
2. умножить аналитический сигнал на комплексную синусоиду нужной частоты (это и будет собственно сдвиг частоты);
3. получить из сдвинутого аналитического сигнала вещественный сигнал (отбросить мнимую часть).
Не знаю стало ли понятнее после таких объяснений, но в любом случае Вам надо копать в сторону ЦОС если хотите дальше написать программу и чтобы она при этом заработало.

Вот кстати в соседней ветке такую же тему обсуждают.
http://electronix.ru/forum/index.php?showtopic=92947
Go to the top of the page
 
+Quote Post
ZeroQu
сообщение Aug 4 2011, 14:19
Сообщение #6





Группа: Участник
Сообщений: 8
Регистрация: 13-08-07
Пользователь №: 29 763



О... Я, похоже, попал =)
Спасибо за наводки! Постараюсь постичь всю эту заумь.
Go to the top of the page
 
+Quote Post
ivan219
сообщение Aug 4 2011, 14:20
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 350
Регистрация: 16-11-08
Пользователь №: 41 680



ZeroQu смотрите на рисунок.
Материал взять отсюда http://www.dsplib.ru/content/hilbertquad/hilbertquad.html
Тут главное правильно подобрать ФНЧ с хорошим подавлением не нужной полосы. И с нужными вам параметрами.

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ZeroQu
сообщение Aug 4 2011, 14:35
Сообщение #8





Группа: Участник
Сообщений: 8
Регистрация: 13-08-07
Пользователь №: 29 763



Иван, спасибо! Надо пробовать.
Go to the top of the page
 
+Quote Post
SPACUM
сообщение Aug 4 2011, 16:06
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 22-06-09
Из: Москва
Пользователь №: 50 531



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

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


--------------------
Ты можешь знать все что угодно, но пока ты не доказал это на практике, ты не знаешь ничего!© Ричард Бах
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 15:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01429 секунд с 7
ELECTRONIX ©2004-2016