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

 
 
 
Reply to this topicStart new topic
> Синхронизация OFDM по префиксу, алгоритм работы
Ivan55
сообщение Apr 22 2014, 04:24
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640



Всем здрасти!

Проблема вот в чем... Осуществил корреляцию префикса определил по положению пика смещение во временной области, по фазе оценил смещение по частоте. Решил сначала провести временную синхронизацию, взял полученную оценку и последующие входные отсчеты сместил(точнее взял больше отсчетов сигнала и подвинул) на ее величину... Но после этого посыпалась корреляция префикса

Кто знает в чем может быть проблема?

Сообщение отредактировал Ivan55 - Apr 22 2014, 07:06
Go to the top of the page
 
+Quote Post
KalashKS
сообщение Apr 22 2014, 08:08
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 7-02-11
Пользователь №: 62 755



Цитата(Ivan55 @ Apr 22 2014, 08:24) *
Всем здрасти!

Проблема вот в чем... Осуществил корреляцию префикса определил по положению пика смещение во временной области, по фазе оценил смещение по частоте. Решил сначала провести временную синхронизацию, взял полученную оценку и последующие входные отсчеты сместил(точнее взял больше отсчетов сигнала и подвинул) на ее величину... Но после этого посыпалась корреляция префикса

Кто знает в чем может быть проблема?


Из вашего описания не совсем ясно, что и как вы сделали. Покажите свою модель, если есть возможность. Или более подробно распишите что и куда вы двигали.
Go to the top of the page
 
+Quote Post
Ivan55
сообщение Apr 22 2014, 09:49
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640



Цитата(KalashKS @ Apr 22 2014, 12:08) *
Из вашего описания не совсем ясно, что и как вы сделали. Покажите свою модель, если есть возможность. Или более подробно распишите что и куда вы двигали.


CODE
[InSignal Fs] = wavread('Signal.wav'); % Запись OFDM сигнала
NumInSamples = length(InSignal); % Колличество отсчетов входного сигнала
NumBlocks = floor(NumInSamples/Ns); % Колличество блоков OFDM
DetectiontBuffer = zeros(1, 2*Ns);

for n = 1:NumBlocks

DetectiontBuffer(1:end-Ns) = DetectiontBuffer(Ns+1:end); % Сдвигаем входной буфер
DetectiontBuffer(end-Ns+1:end) = InSignal(((n-1)*Ns+1:n*Ns) - shiftTime); % Записываем следующий OFDM символ

......
......
end;

shiftTime - это оценка смещения пика корреляции префикса в отсчетах
DetectiontBuffer размером двух OFDM символов поиск корреляции осуществляется в первой половине буфера

ну так вот... когда не добавляю shiftTime при записи в буфер корреляция работает и производит оценку смещения времени, а
когда добавляю shiftTime при записи в буфер пик постоянно уплывает... По идее он же должен сдвинуться и в последующем оставаться на месте



Сообщение отредактировал Ivan55 - Apr 22 2014, 10:21
Go to the top of the page
 
+Quote Post
KalashKS
сообщение Apr 22 2014, 12:16
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 7-02-11
Пользователь №: 62 755



Цитата(Ivan55 @ Apr 22 2014, 13:49) *
CODE
[InSignal Fs] = wavread('Signal.wav'); % Запись OFDM сигнала
NumInSamples = length(InSignal); % Колличество отсчетов входного сигнала
NumBlocks = floor(NumInSamples/Ns); % Колличество блоков OFDM
DetectiontBuffer = zeros(1, 2*Ns);

for n = 1:NumBlocks

DetectiontBuffer(1:end-Ns) = DetectiontBuffer(Ns+1:end); % Сдвигаем входной буфер
DetectiontBuffer(end-Ns+1:end) = InSignal(((n-1)*Ns+1:n*Ns) - shiftTime); % Записываем следующий OFDM символ

......
......
end;

shiftTime - это оценка смещения пика корреляции префикса в отсчетах
DetectiontBuffer размером двух OFDM символов поиск корреляции осуществляется в первой половине буфера

ну так вот... когда не добавляю shiftTime при записи в буфер корреляция работает и производит оценку смещения времени, а
когда добавляю shiftTime при записи в буфер пик постоянно уплывает... По идее он же должен сдвинуться и в последующем оставаться на месте


Так, как написано у вас, может быть и заработает. Проверьте знак обратной связи (знак перед shift_time). И сам расчет необходимого сдвига.
Еще мне не нравится то, что при изменении shift_time у вас произойдет повторение, или пропуск отсчетов.
Go to the top of the page
 
+Quote Post
Ivan55
сообщение Apr 25 2014, 17:41
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640



Цитата(KalashKS @ Apr 22 2014, 16:16) *
Так, как написано у вас, может быть и заработает. Проверьте знак обратной связи (знак перед shift_time).

Ну чет с изменением знака не помогло...
Цитата(KalashKS @ Apr 22 2014, 16:16) *
...И сам расчет необходимого сдвига.

ну это же поиск индекса максимума корреляции защитного интервала(без shift_time то работает, а когда его добавляю уровень пиков падает) в соответствии с тем на сколько отсчетов сдвинут максимум пика на столько и сдвигаем входной буфер, или там не все так просто? много где пишут как считать сдвиг а как проводить синхру не пишут, останавливаются на том что типо вот "положение пика это смещение во временной области, а его фаза это смещение по частоте."
Цитата(KalashKS @ Apr 22 2014, 16:16) *
Еще мне не нравится то, что при изменении shift_time у вас произойдет повторение, или пропуск отсчетов.

а как же без этого? если есть варианты скажите, мне было бы интересно промоделитьsm.gif

Сообщение отредактировал Ivan55 - Apr 25 2014, 17:45
Go to the top of the page
 
+Quote Post
ASN
сообщение Apr 26 2014, 05:04
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



Ivan55
Не совсем понятно как у Вас сделано.
IMHO, входные отсчёты во буфере сдвига (символьном) должны двигаться всегда на одинаковое количество отсчётов.
А вот копировать из буфера нужно в демодулятор с границы интервала интегрирования.
Может возникнуть проблема из-за разности тактовых генераторов передатчика и приёмника, когда пики начнут плавно двигаться (появляться раньше относительно предыдущего или позже), но это отдельная тема.
Выделения границ интервала ортогональности лучше определять по нескольким символам. В простейшем случае обыкновенным усреднением.
Автокорреляционная функция, естественно, комплексная. И по ней можно отследить рассинхронизацию по частоте. Но только в достаточно узком диапазоне. Для увеличения диапазона и более быстрой подстройки систем АПЧ и АПТЧ используйте или пилоты (символы или каналы), или итеративную обработку (если целостность сообщения контролируется CRC).
Всё вышеизложенное - это только самые-самые основы. Дальше будет гораздо интереснее. sm.gif
Вообще, литературы по OFDM - море.
Удачи.
Go to the top of the page
 
+Quote Post
KalashKS
сообщение Apr 28 2014, 07:51
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 7-02-11
Пользователь №: 62 755



Есть подозрение, что вы что-то двигаете неправильно и у вас коррелированный отрезок выпадает из усреднения.
Когда я был совсем маленький, писал на эту тему статью в меру своего студенческого понимания. Может быть поможет http://dsol.ru/uploads/pdf/dspa_2.pdf. Знатокам просьба сильно не пинать.
Общее пожелание - считайте КФ потоком без разрывов на умножителе и скользящем усреднителе, а на выходе ищите пики. Если рассинхронизации по клоку нет, то пик будет всегда в окрестности нужной точки. Если клоки разные - пик будет плыть и за ним надо будет следить. Но пока сделайте поиск постоянного пика.
Go to the top of the page
 
+Quote Post
Ivan55
сообщение Apr 28 2014, 17:19
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640



Цитата(KalashKS @ Apr 28 2014, 11:51) *
Есть подозрение, что вы что-то двигаете неправильно и у вас коррелированный отрезок выпадает из усреднения.

ну да чет я затупил...
Цитата(KalashKS @ Apr 28 2014, 11:51) *
Когда я был совсем маленький, писал на эту тему статью в меру своего студенческого понимания. Может быть поможет http://dsol.ru/uploads/pdf/dspa_2.pdf.

Спасибо)
Go to the top of the page
 
+Quote Post

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

 


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


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