Перейти к содержанию
    

Синхронизация OFDM по префиксу

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

 

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

 

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

Изменено пользователем Ivan55

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

Из вашего описания не совсем ясно, что и как вы сделали. Покажите свою модель, если есть возможность. Или более подробно распишите что и куда вы двигали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из вашего описания не совсем ясно, что и как вы сделали. Покажите свою модель, если есть возможность. Или более подробно распишите что и куда вы двигали.

 

[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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

[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 у вас произойдет повторение, или пропуск отсчетов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так, как написано у вас, может быть и заработает. Проверьте знак обратной связи (знак перед shift_time).

Ну чет с изменением знака не помогло...

...И сам расчет необходимого сдвига.

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

Еще мне не нравится то, что при изменении shift_time у вас произойдет повторение, или пропуск отсчетов.

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

Изменено пользователем Ivan55

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ivan55

Не совсем понятно как у Вас сделано.

IMHO, входные отсчёты во буфере сдвига (символьном) должны двигаться всегда на одинаковое количество отсчётов.

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

Может возникнуть проблема из-за разности тактовых генераторов передатчика и приёмника, когда пики начнут плавно двигаться (появляться раньше относительно предыдущего или позже), но это отдельная тема.

Выделения границ интервала ортогональности лучше определять по нескольким символам. В простейшем случае обыкновенным усреднением.

Автокорреляционная функция, естественно, комплексная. И по ней можно отследить рассинхронизацию по частоте. Но только в достаточно узком диапазоне. Для увеличения диапазона и более быстрой подстройки систем АПЧ и АПТЧ используйте или пилоты (символы или каналы), или итеративную обработку (если целостность сообщения контролируется CRC).

Всё вышеизложенное - это только самые-самые основы. Дальше будет гораздо интереснее. :)

Вообще, литературы по OFDM - море.

Удачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть подозрение, что вы что-то двигаете неправильно и у вас коррелированный отрезок выпадает из усреднения.

Когда я был совсем маленький, писал на эту тему статью в меру своего студенческого понимания. Может быть поможет http://dsol.ru/uploads/pdf/dspa_2.pdf. Знатокам просьба сильно не пинать.

Общее пожелание - считайте КФ потоком без разрывов на умножителе и скользящем усреднителе, а на выходе ищите пики. Если рассинхронизации по клоку нет, то пик будет всегда в окрестности нужной точки. Если клоки разные - пик будет плыть и за ним надо будет следить. Но пока сделайте поиск постоянного пика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть подозрение, что вы что-то двигаете неправильно и у вас коррелированный отрезок выпадает из усреднения.

ну да чет я затупил...

Когда я был совсем маленький, писал на эту тему статью в меру своего студенческого понимания. Может быть поможет http://dsol.ru/uploads/pdf/dspa_2.pdf.

Спасибо)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...