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

Есть вопрос к знатокам

 

Кто нибудь находил более эффективные методы синхронизации по циклическому префиксу, чем ML алгоритм?

 

Заранее спасибо

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


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

Смотря что считать эффективностью. Можно попрововать упростить реализацию.

В исходном варианте алгоритм требует знания ОСШ. Его мы, как правило, на этапе синхронизации знать не будем. Интересны два варианта: принять его равным бесконечности или нулю. В первом случае энергия сигнала входит в расчет метрики с единичным весом, во втором - с нулевым, то есть остается только коррелятор. Коррелятор сам по себе оказывется проще, но дает плохую точность временной синхронизации из-за непостоянства мощности сигнала, которая искажает форму корреляционного пика. Спастись от этого можно либо учетом измеренной энергии (в варианте с бесконечным ОСШ), либо применением знакового коррелятора, но только для временной синхронизации. Для частотной знаковый коррелятор неприменим.

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


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

Смотря что считать эффективностью. Можно попрововать упростить реализацию.

 

Спасибо за ответ!

я считаю под эффективностью дисперсию оценки. Рассмотрел различные варианты: модуль разности циклического префикса (СP) и его копии, квадрат разности модулей СP и его комплексно сопряженной копии, а также корреляцию и алгоритм Beek

 

Beek дает хороший результат, но придумали его 20 лет назад! разве более эффективного(с точки зрения точности или вычислительных затрат) за 20 лет ничего не появилось? Или эта проблема исчерпала себя и ушли в использование тренировочных последовательностей и пилотов для синхры

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


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

Beek дает хороший результат, но придумали его 20 лет назад! разве более эффективного(с точки зрения точности или вычислительных затрат) за 20 лет ничего не появилось? Или эта проблема исчерпала себя и ушли в использование тренировочных последовательностей и пилотов для синхры

 

 

Еще один 20-ти летний алгоритм, основанный на автокорреляции, который можно рассмотреть - метрика Schmidl-Cox:

Robust frequency and timing synchronization for OFDM

http://ieeexplore.ieee.org/xpl/articleDeta...arnumber=650240

 

Я ее использовал для быстрого грубого детектирования наличия сигнала.

 

Методы Van De Beek до сих пор продолжают развивать трудолюбивые корейцы:

http://ieeexplore.ieee.org/xpl/abstractCit...mp;navigation=1

 

Например, одна их относительно свежих (2008) статей

http://ieeexplore.ieee.org/xpl/articleDeta...rnumber=4678083

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

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


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

Аннотация в последней ссылке напомнила, что при работе с сигналом DVB-t увеличивал точность в том числе фильтрацией оценок, полученных одной из вариаций на тему алгоритма Beek - знаковый коррелятор и стробирование накопления КФ для оценки частоты. Усреднять корреляционные отклики не стал, так как не хватало памяти в тогдашней ПЛИС.

В целом алгоритм Beek оптимален для поиска одного повтора на двух символьных интервалах в гауссовском канале. Вот и пишут, что для увеличения точности нужно увеличивать время наблюдения. Можно фильтрацией одиночных оценок, можно усреднением корреляционных откликов, можно оптимальной обработкой сигнала на большом интервале (статью не читал, не знаю во что такая обработка выльется).

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

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


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

andyp, спасибо за полезную информацию, кстати возник вопрос тоже рассматривал алгоритм SCA но ее метрика имеет неудобную форму, как вы по ней определяли начало полезной части символа? знаю что берут производную от метрики и там где идет плоская область производная близка к нулю, но при наличии шумов АБГШ там появляются искажения... как вы определяли? Буду благодарен за помощь в этом вопросе

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

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


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

andyp, спасибо за полезную информацию, кстати возник вопрос тоже рассматривал алгоритм SCA но ее метрика имеет неудобную форму, как вы по ней определяли начало полезной части символа? знаю что берут производную от метрики и там где идет плоская область производная близка к нулю, но при наличии шумов АБГШ там появляются искажения... как вы определяли? Буду благодарен за помощь в этом вопросе

 

Я этот обнаружитель несколько не по прямому назначению использовал ;) - использовал с него грубую оценку частотного сдвига и собственно сам факт детекции периодического в моем случае сигнала. После него делал частотную коррекцию и искал известную преамбулу обычным согласованным фильтром вокруг позиции, найденной SCА.

Плюсы этого подхода

-Робастность SCA к многолучевости канала

-Это позволило сузить область неопределенности и вычислительные затраты при поиске.

-Улучшило статистику на выходе СФ, так как грубая оценка частотного сдвига у меня была до поиска СФ.

-Метрика SC не зависит от мощности сигнала на входе, что тоже удобно.

 

Точно оценивать временное положение сигнала с помощью SCA я бы не стал - там реально производная метрики по задержке в районе максимума маленькая, так что минимальный шум будет приводить к большой дисперсии оценки временного положения.

 

PS Кстати, анализ показывает, что метрика Van De Beek примерно также плоха, как и SCA в случае, если мощность принимаемого сигнала постоянна - в обоих случаях задача сводится к поиску максимума модуля корреляции двух повторяющихся кусков сигнала.

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

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


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

Всем доброго дня!

Нашел одну интересную статью wen2008__1_.pdf

результат впечатляет, осталось тока понять что они делали:) кто может помочь?

попытался реализовать не получилось, смысл понял так что они делят символ на блоки по 16 отсчетов

и эти блоки коррелируют формула (7). Может в формуле чего то нехватает, например непонятно что за m=1,2,...

и в знаменателе второй корень почемуто без +N

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


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

Всем доброго дня!

Нашел одну интересную статью wen2008__1_.pdf

результат впечатляет, осталось тока понять что они делали:) кто может помочь?

попытался реализовать не получилось, смысл понял так что они делят символ на блоки по 16 отсчетов

и эти блоки коррелируют формула (7). Может в формуле чего то нехватает, например непонятно что за m=1,2,...

и в знаменателе второй корень почемуто без +N

 

Под корнем автор N похоже забыл. С помощью m=1,2,... автор попытался математическим языком выразить, сколько блочных корреляционных коэффициентов у него получается. Ну т.е. если разбить область его область поиска на блоки размером B (пусть N, L делится на B нацело), то у него всего (2N+L)/B блоков. Автор коррелирует блок с номером m с блоком с номером m+N/B. Итого у него получится (N+L)/B корр. коэффициентов.

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


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

Под корнем автор N похоже забыл. С помощью m=1,2,... автор попытался математическим языком выразить, сколько блочных корреляционных коэффициентов у него получается. Ну т.е. если разбить область его область поиска на блоки размером B (пусть N, L делится на B нацело), то у него всего (2N+L)/B блоков. Автор коррелирует блок с номером m с блоком с номером m+N/B. Итого у него получится (N+L)/B корр. коэффициентов.

Ну вот смотрите я тут накидал код

clear all; close all; clc;

%% Параметры модели
B = 16;
Nfft = 1024; Ng = Nfft/4; Nofdm = Ng+Nfft; % Параметры OFDM сигнала
nCar = 312;
Nbps = 4; M = 2^Nbps;
Nsym = 30;                % Колличество генерируемых OFDM символов
H_QAM4=modem.qammod('M',M,'PhaseOffset', 0, 'SymbolOrder',...
    'binary', 'InputType', 'bit');
Es = 1; A = (3/2/(M-1)*Es);

%% Формируем N символов OFDM сигнала
tx = [];

fft_in = complex(zeros(Nfft,Nsym),zeros(Nfft,Nsym));
QAM = zeros(Nsym,nCar);
In_Data = randi([0 1],Nsym,nCar*log2(M));
QAM = A*modulate(H_QAM4, In_Data');
fft_in(1:nCar/2,:) = QAM(1:nCar/2,:);
fft_in(end-nCar/2+1:end,:) = QAM(nCar/2+1:end,:);
fft_out = ifft(fft_in);
tx = [fft_out(end-Ng+1:end,:); fft_out]';
tx = reshape(tx', 1, Nsym*Nofdm);


sig=awgn(tx, 20, 'measured', 'dB');
BuffObserv = zeros(1, 2*Nfft+Ng);

buff1 = zeros(1,length(sig)-Nofdm);
P = [];
for num = 1:floor(length(sig)/(2*Nfft+Ng))
    BuffObserv = sig(1, (num-1)*(2*Nfft+Ng)+1:num*(2*Nfft+Ng));
    
    for d = 0:(Nfft+Ng)/B-1
        corr(d+1) = sum(BuffObserv(d*B+(1:B)).*conj(BuffObserv(d*B+(1:B)+Nfft)));
        energ(d+1) = sqrt(sum(abs(BuffObserv(d*B+(1:B)).^2))).*sqrt(sum(abs(BuffObserv(d*B+(1:B)+Nfft).^2)));
    end
    P = [P abs(corr./energ)];
     
end

plot(abs(P));

Правильно ли я реализовал то о чем там говорится?

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


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

Правильно ли я реализовал то о чем там говорится?

 

Да вроде похоже на правду - короткие (длиной в guard) места с высокой корреляцией, а между ними мусор.

 

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


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

Да вроде похоже на правду - короткие (длиной в guard) места с высокой корреляцией, а между ними мусор.

 

тогда есть несколько вопросов:

1. почему через каждые три идет широкий пик?

2. как определять начало символьного интервала?

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

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


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

тогда есть несколько вопросов:

1. почему через каждые три идет широкий пик?

2. как определять начало символьного интервала?

 

 

1. Видимо, надо блоки (те что Observation Interval называются) с перекрытием Nfft брать.

2. Сравнивать с порогом если охота с точностью до длины блока, ну или по нескольким блокам усреднять, как авторы советуют, а потом сравнивать с порогом.

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


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

2. Сравнивать с порогом если охота с точностью до длины блока, ну или по нескольким блокам усреднять, как авторы советуют, а потом сравнивать с порогом.

т.е. точность оценки будет равна длинне блока? если блок равен 16 то с точностью 16 отсчетов?

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


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

т.е. точность оценки будет равна длинне блока? если блок равен 16 то с точностью 16 отсчетов?

 

Так в статье написано. Между блоками оценок корреляции нет.

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


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

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

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

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

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

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

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

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

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

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