Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Beek algoritm
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Ivan55
Есть вопрос к знатокам

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

Заранее спасибо
KalashKS
Смотря что считать эффективностью. Можно попрововать упростить реализацию.
В исходном варианте алгоритм требует знания ОСШ. Его мы, как правило, на этапе синхронизации знать не будем. Интересны два варианта: принять его равным бесконечности или нулю. В первом случае энергия сигнала входит в расчет метрики с единичным весом, во втором - с нулевым, то есть остается только коррелятор. Коррелятор сам по себе оказывется проще, но дает плохую точность временной синхронизации из-за непостоянства мощности сигнала, которая искажает форму корреляционного пика. Спастись от этого можно либо учетом измеренной энергии (в варианте с бесконечным ОСШ), либо применением знакового коррелятора, но только для временной синхронизации. Для частотной знаковый коррелятор неприменим.
Ivan55
Цитата(KalashKS @ Apr 12 2016, 13:04) *
Смотря что считать эффективностью. Можно попрововать упростить реализацию.


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

Beek дает хороший результат, но придумали его 20 лет назад! разве более эффективного(с точки зрения точности или вычислительных затрат) за 20 лет ничего не появилось? Или эта проблема исчерпала себя и ушли в использование тренировочных последовательностей и пилотов для синхры
andyp
Цитата(Ivan55 @ Apr 12 2016, 12:40) *
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
KalashKS
Аннотация в последней ссылке напомнила, что при работе с сигналом DVB-t увеличивал точность в том числе фильтрацией оценок, полученных одной из вариаций на тему алгоритма Beek - знаковый коррелятор и стробирование накопления КФ для оценки частоты. Усреднять корреляционные отклики не стал, так как не хватало памяти в тогдашней ПЛИС.
В целом алгоритм Beek оптимален для поиска одного повтора на двух символьных интервалах в гауссовском канале. Вот и пишут, что для увеличения точности нужно увеличивать время наблюдения. Можно фильтрацией одиночных оценок, можно усреднением корреляционных откликов, можно оптимальной обработкой сигнала на большом интервале (статью не читал, не знаю во что такая обработка выльется).
Ivan55
andyp, спасибо за полезную информацию, кстати возник вопрос тоже рассматривал алгоритм SCA но ее метрика имеет неудобную форму, как вы по ней определяли начало полезной части символа? знаю что берут производную от метрики и там где идет плоская область производная близка к нулю, но при наличии шумов АБГШ там появляются искажения... как вы определяли? Буду благодарен за помощь в этом вопросе
andyp
Цитата(Ivan55 @ Apr 13 2016, 19:31) *
andyp, спасибо за полезную информацию, кстати возник вопрос тоже рассматривал алгоритм SCA но ее метрика имеет неудобную форму, как вы по ней определяли начало полезной части символа? знаю что берут производную от метрики и там где идет плоская область производная близка к нулю, но при наличии шумов АБГШ там появляются искажения... как вы определяли? Буду благодарен за помощь в этом вопросе


Я этот обнаружитель несколько не по прямому назначению использовал wink.gif - использовал с него грубую оценку частотного сдвига и собственно сам факт детекции периодического в моем случае сигнала. После него делал частотную коррекцию и искал известную преамбулу обычным согласованным фильтром вокруг позиции, найденной SCА.
Плюсы этого подхода
-Робастность SCA к многолучевости канала
-Это позволило сузить область неопределенности и вычислительные затраты при поиске.
-Улучшило статистику на выходе СФ, так как грубая оценка частотного сдвига у меня была до поиска СФ.
-Метрика SC не зависит от мощности сигнала на входе, что тоже удобно.

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

PS Кстати, анализ показывает, что метрика Van De Beek примерно также плоха, как и SCA в случае, если мощность принимаемого сигнала постоянна - в обоих случаях задача сводится к поиску максимума модуля корреляции двух повторяющихся кусков сигнала.
Ivan55
Всем доброго дня!
Нашел одну интересную статью Нажмите для просмотра прикрепленного файла
результат впечатляет, осталось тока понять что они делалиsm.gif кто может помочь?
попытался реализовать не получилось, смысл понял так что они делят символ на блоки по 16 отсчетов
и эти блоки коррелируют формула (7). Может в формуле чего то нехватает, например непонятно что за m=1,2,...
и в знаменателе второй корень почемуто без +N
andyp
Цитата(Ivan55 @ May 5 2016, 08:37) *
Всем доброго дня!
Нашел одну интересную статью Нажмите для просмотра прикрепленного файла
результат впечатляет, осталось тока понять что они делалиsm.gif кто может помочь?
попытался реализовать не получилось, смысл понял так что они делят символ на блоки по 16 отсчетов
и эти блоки коррелируют формула (7). Может в формуле чего то нехватает, например непонятно что за m=1,2,...
и в знаменателе второй корень почемуто без +N


Под корнем автор N похоже забыл. С помощью m=1,2,... автор попытался математическим языком выразить, сколько блочных корреляционных коэффициентов у него получается. Ну т.е. если разбить область его область поиска на блоки размером B (пусть N, L делится на B нацело), то у него всего (2N+L)/B блоков. Автор коррелирует блок с номером m с блоком с номером m+N/B. Итого у него получится (N+L)/B корр. коэффициентов.
Ivan55
Цитата(andyp @ May 5 2016, 12:38) *
Под корнем автор 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));

Правильно ли я реализовал то о чем там говорится?
andyp
Цитата(Ivan55 @ May 5 2016, 12:09) *
Правильно ли я реализовал то о чем там говорится?


Да вроде похоже на правду - короткие (длиной в guard) места с высокой корреляцией, а между ними мусор.
Ivan55
Цитата(andyp @ May 5 2016, 13:19) *
Да вроде похоже на правду - короткие (длиной в guard) места с высокой корреляцией, а между ними мусор.


тогда есть несколько вопросов:
1. почему через каждые три идет широкий пик?
2. как определять начало символьного интервала?
andyp
Цитата(Ivan55 @ May 5 2016, 12:30) *
тогда есть несколько вопросов:
1. почему через каждые три идет широкий пик?
2. как определять начало символьного интервала?



1. Видимо, надо блоки (те что Observation Interval называются) с перекрытием Nfft брать.
2. Сравнивать с порогом если охота с точностью до длины блока, ну или по нескольким блокам усреднять, как авторы советуют, а потом сравнивать с порогом.
Ivan55
Цитата(andyp @ May 5 2016, 13:48) *
2. Сравнивать с порогом если охота с точностью до длины блока, ну или по нескольким блокам усреднять, как авторы советуют, а потом сравнивать с порогом.

т.е. точность оценки будет равна длинне блока? если блок равен 16 то с точностью 16 отсчетов?
andyp
Цитата(Ivan55 @ May 5 2016, 14:16) *
т.е. точность оценки будет равна длинне блока? если блок равен 16 то с точностью 16 отсчетов?


Так в статье написано. Между блоками оценок корреляции нет.
Ivan55
Цитата(andyp @ May 5 2016, 15:36) *
Так в статье написано. Между блоками оценок корреляции нет.

хм... странно, к чему тогда рисунок 6 в статье?
serjj
Если нетрудно, киньте пару графиков, которые строит ваш скрипт, для примера. Не у всех есть matlab/communication toolbox. Было бы любопытно глянуть. И, забегая вперёд, как это будет работать, если а) добавить допплер и б) канал?
andyp
Цитата(Ivan55 @ May 5 2016, 14:41) *
хм... странно, к чему тогда рисунок 6 в статье?


Понятия не имею. Оценка корреляции получается одна на блок B. О том, где закоррелировало можно судить с точностью до плюс-минус B/2.

PS Картинка от работы скрипта в приложении.
Ivan55
Цитата(serjj @ May 5 2016, 15:46) *
Если нетрудно, киньте пару графиков, которые строит ваш скрипт, для примера. Не у всех есть matlab/communication toolbox. Было бы любопытно глянуть. И, забегая вперёд, как это будет работать, если а) добавить допплер и б) канал?

при доплере и канале тоже будет работать
вот для плохого канала по ITU-R F.1487 сдвиг времени на 100 отсчетов, уход времени из за нестабильности генератора ~2,5 отсчета/сек и сдвиг частоты на 30% между поднесущими
Нажмите для просмотра прикрепленного файла

на скока хорошо, надо смотреть) пока непонятно как вообще это использовать

вот для среднего канала при тех же условиях тока длину блока сделал B=32
Нажмите для просмотра прикрепленного файла


а вот плохой канал для B=64
Нажмите для просмотра прикрепленного файла
Ivan55
Есть у кого какие идеи?
Ivan55
как оценить SNR для расчета метрики Beek?
KalashKS
Большого смысла оценивать ОСШ нет, кроме того алгоритм работает первым и информацию брать практически неоткуда. Удобно задать ОСШ бесконечным и получить точность временной синхронизации близкую к оптимальной с некоторым ухудшением при низких реальных ОСШ. Точность оценки частоты от ошибки по времени зависит слабо и оценка ОСШ на нее почти не влияет.
Ivan55
Цитата(KalashKS @ Dec 1 2016, 13:45) *
Большого смысла оценивать ОСШ нет, кроме того алгоритм работает первым и информацию брать практически неоткуда. Удобно задать ОСШ бесконечным и получить точность временной синхронизации близкую к оптимальной с некоторым ухудшением при низких реальных ОСШ. Точность оценки частоты от ошибки по времени зависит слабо и оценка ОСШ на нее почти не влияет.


да не могу понять почему созвездие сильно поворачивается. Сделал Beekа усреднил по 50ти символам, оценил время частоту, время держит четко частоту (нормированную на растояние между поднесущими) оценил с точностью 10^-4. Это в AWGN канале с фиксированым смещением времени на 200ти отсчетов и смещением частоты на 0,3 (величина нормирована на растояние между поднесущими), SNR в канале задал равным 20.
Результат такой что он захватил но созвездие балтается, т.е. поворачивается из стороны в сторону, иногда доходит до того что угол этого поворота составляет 45градусов


Нажмите для просмотра прикрепленного файла
KalashKS
Реализованный алгоритм следит за частотой, а не за фазой. Фаза будет гулять, и ее нужно выправлять дальше. Если передача потоковая, то с этим справится эквалайзер. Если пакетная - нужна ФАП.
Ivan55
Цитата(KalashKS @ Dec 1 2016, 15:32) *
Реализованный алгоритм следит за частотой, а не за фазой. Фаза будет гулять, и ее нужно выправлять дальше. Если передача потоковая, то с этим справится эквалайзер. Если пакетная - нужна ФАП.


1. Т.е. на данном этапе синхронизации такие колебания нормальны? вследствии того что фаза болтается
2. Да передача потоковая. Эквалайзер получается просто по пилотам оценит фазовую характеристику и повернет, так?
KalashKS
Да. Главное, чтобы колебания фазы на интервале оценивания канала были незначительными.
Ivan55
Цитата(KalashKS @ Dec 1 2016, 15:52) *
Да. Главное, чтобы колебания фазы на интервале оценивания канала были незначительными.

это сколько?
KalashKS
Цитата(Ivan55 @ Dec 1 2016, 15:56) *
это сколько?

Настолько, чтобы оценку канала не смазать. Будет зависеть от используемой модуляции. Точных оценок не делал, на глаз - плюс-минус пять градусов. Как добавите эквалайзер, сами увидите, сколько потребуется.
Ivan55
Цитата(KalashKS @ Dec 1 2016, 16:05) *
Настолько, чтобы оценку канала не смазать. Будет зависеть от используемой модуляции. Точных оценок не делал, на глаз - плюс-минус пять градусов. Как добавите эквалайзер, сами увидите, сколько потребуется.

у меня уже не 5градусов crying.gif а 45 laughing.gif
KalashKS
Пилоты для оценивания канала как размещены?
Ivan55
Цитата(KalashKS @ Dec 1 2016, 16:10) *
Пилоты для оценивания канала как размещены?


вот так
Нажмите для просмотра прикрепленного файла
по частоте через восемь поднесущих, с каждым последующим символом сдвигаясь на одну, т.е. давольно таки часто)
petrov
Цитата(Ivan55 @ Dec 1 2016, 16:09) *
у меня уже не 5градусов crying.gif а 45 laughing.gif


Пофиг если на всех 50 символах 45, плохо если от символа к символу на 45 скачет.
KalashKS
Если на периоде размещения пилотов фаза не будет убегать, то канал приемлемо оценится и сигнал восстановится. Как petrov сказал, важна не сама фаза, а ее дрожжание во время оценки канала, которую вы получите за 8-16 символов.
quato_a
Цитата(Ivan55 @ Dec 1 2016, 15:08) *
Результат такой что он захватил но созвездие балтается, т.е. поворачивается из стороны в сторону, иногда доходит до того что угол этого поворота составляет 45градусов

Чем меньше длина автокорреляции, тем грубее будет определение частотного смещения (CFO).
Я бы пилот-тоны передавал во всех символах, иначе, боюсь, что оценка фазового смещения (CPO) будет некорректна для последующих 2-х символов без пилотов. rolleyes.gif
Ivan55
Цитата(quato_a @ Dec 3 2016, 09:28) *
Чем меньше длина автокорреляции, тем грубее будет определение частотного смещения (CFO).
Я бы пилот-тоны передавал во всех символах, иначе, боюсь, что оценка фазового смещения (CPO) будет некорректна для последующих 2-х символов без пилотов. rolleyes.gif


Длин префикса бесконечной быть не может, поэтому и корреляция такая какая получилась
А пилоты у меня и стоят в каждом символе
quato_a
Цитата(Ivan55 @ Dec 5 2016, 11:26) *
Длин префикса бесконечной быть не может, поэтому и корреляция такая какая получилась


Вот поэтому я использую преамбулу sm.gif
Ivan55
Цитата(quato_a @ Dec 5 2016, 20:42) *
Вот поэтому я использую преамбулу sm.gif


что за преамбула?
quato_a
Цитата(Ivan55 @ Dec 6 2016, 12:44) *
что за преамбула?

http://sdsu-dspace.calstate.edu/bitstream/....pdf?sequence=1
стр.18 Long Preamble
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.