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

структура модема при 8psk

добрый день. как я писал выше, первоначальную частотную синхронизацию я делаю по преамбуле. т.е. принятый сигнал перемножаю с комплексно-сопряженной преамбулой, тем самым снимается модуляция и остается гармоника отстройки, которую я и должен определить... в матлабовском коде я просто делал fft по большому количеству точек и затем определял максимальную составляющую спектра. в железе ведь так не возможно сделать из-за большой сложности вычислений. немного почитав на форуме, понял, что можно вместо fft делать Герцеля. так как я ловлю преамбулу с помощью банка фильтров, частотную отстройку я изначально знаю с точностью до +/- 7 Гц(Fs = 9600). далее я делаю Герцеля, по нескольким точкам в диапазоне предполагаемого максимума. потом увеличиваю количество точек, и снова герцеля. но это тоже получается весьма затратно, так как скажем для точность в пол герца требуется десятки тысяч точек. а у меня для определения частоты используется 128 отсчетов.. нужно в сотни раз интерполировать исходный сигнал, и рассчитывать десятки тысяч коэффициентов для определения только одной спектральной составляющей... а это тоже очень вычислительно затратно... может вы мне можете что-нибудь посоветовать?!

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


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

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

 

так как я ловлю преамбулу с помощью банка фильтров, частотную отстройку я изначально знаю с точностью до +/- 7 Гц(Fs = 9600).

 

А в чём разница?

 

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


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

А в чём разница?

ни в чем нет разницы. может я что-то не понятно написал.

возможная частотная отстройка у меня +/- 90 Гц. использую банк из 7 фильтров на разных частотах. (90*2)/7 = 26 Гц диапазон на каждый фильтр. т.е. получается, определив наличие сигнала, я уже знаю его частоту с точностью не до +/- 7 Гц, как я писал выше, а до +/- 13 Гц, но это не важно. для определения более точно частотной отстройки следующую часть принятого сигнала(преамбулы) перемножаю с комплексно-сопряженным, получаю сигнал на частоте отстройки. а вот как далее быть, я не совсем понимаю, о чем и спрашиваю у вас...

 

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


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

http://electronix.ru/forum/index.php?s=&am...t&p=1141738

 

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

 

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


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

http://electronix.ru/forum/index.php?s=&am...t&p=1141738

 

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

Спасибо. надеюсь это то, что мне нужно.

пробую делать квадратичную интерполяцию предложенную fontp - ом, описанную в статье. https://ccrma.stanford.edu/STANM/stanms/stanm114/index.html в данной статье описывается на 3-ей странице алгоритм квадратичного FFT метода обнаружения частоты(QIFFT). на 6-ом шаге там нужно вычесть пик из fft и повторять алгоритм для каждого пика. могли бы вы объяснить что это значит? для какого еще для каждого пика? ведь у нас пик один. вот я набросал код QIFFT интерполяции. но он оценивает расположение пика только один раз, но как я понял, оценка должна происходить итерационно. спасибо.

 

function testQIFFT %%(signal, Fs, M)
close all; clear all;

Fs = 9600;
t = 1:200;
Fref = 500;
signal =  sin(2*pi*Fref*t/Fs);
signal = awgn(signal, 10, 'measured');
signal = hilbert(signal);
%% step 1 - делаем FFT
M = 400; 
F=fft(signal,M);
F = abs(F);

%% step 2 - находим номер отсчета с максимальной амплитудой
[e,Kmax] = max(F);

F_fft = Fs*(Kmax-1)/M % print F_fft

% точки преамбулы
y1 = F(Kmax - 1);   y2 = F(Kmax);   y3 = F(Kmax + 1);
x1 = Kmax - 1;      x2 = Kmax;      x3 = Kmax + 1;


%% step 3 -  квадратичная интерполяция; нахождение дельты

% рассчитываем коэффициенты параболы
a = (y3 - ((x3*(y2-y1)+x2*y1-x1*y2)/(x2 - x1))) / (x3*(x3 - x1 - x2) + x1*x2);
b = (y2 - y1)/(x2-x1) - a*(x1+x2);
c = (x2*y1-x1*y2)/(x2-x1) + a*x1*x2;

Xmax = -b/(2*a);
delta = Kmax - Xmax;

%% step 4 - определение амплитуды пика и расчет исправленной частоты 
Ymax = -(b^2 - 4*a*c)/(4*a);

F_correct = (Kmax - 1 - delta)*Fs/M  % print F_correct

%% step 5 - not required 

%% step 6 - не понятно, что делать на этом шаге?! 

% Kmax = Kmax - delta; 
% 
% x2 = Kmax;  
% y2 = Ymax;  

% --> step 2-4
%% step 7 - ???

%% show ##
x = x1-2:x3+2;
hold on;
plot(x, a.*x.^2 + b.*x + c);
xspoint = [x1,x2,x3];
yspoint = [y1,y2,y3];
plot(xspoint,yspoint,'r*')
plot(Xmax,Ymax,'g*')

return;

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


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

Попробуйте для начала метод из статьи "Fast, Accurate Frequency Estimators" Eric Jacobsen and Peter Kootsookos.

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


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

Попробуйте для начала метод из статьи "Fast, Accurate Frequency Estimators" Eric Jacobsen and Peter Kootsookos.

я пробовал этот метод первым делом, потому что он проще. как я понял, в нем оценка происходит только один раз, а в QIFFT, наверное, несколько раз. могли бы вы сказать, какой из методов более точный? судя по моим тестам QIFFT более точен, хотя я так и не разобрался еще, как его правильно до конца сделать...

 

и еще, мне очень сложно подобрать длину окна FFT, чтобы это было не сильно вычислительно затратно, и чтобы точность не сильно страдала. понимаю, что все относительно, но не могли бы вы мне посоветовать, какую длину лучше выбирать. я остановился на длине окна 400 отсчетов (100 символов, Fs = 9600), Zero-padding factor = 4 т.е.1600 точек FFT.

Изменено пользователем Виктор39

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


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

я пробовал этот метод первым делом

 

Вывод какой? Не хватает точности?

 

 

Ещё учитывайте что не чистый синус оцениваем, а преамбула+многолучёвка+данные+помехи, сигнал с совсем другой функцией неопределённости, не буду утверждать, но возможно суперточные методы для синусов здесь вообще смысла не имеют.

 

 

и еще, мне очень сложно подобрать длину окна FFT, чтобы это было не сильно вычислительно затратно, и чтобы точность не сильно страдала. понимаю, что все относительно, но не могли бы вы мне посоветовать, какую длину лучше выбирать. я остановился на длине окна 400 отсчетов (100 символов, Fs = 9600), Zero-padding factor = 4 т.е.1600 точек FFT.

 

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

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


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

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

не могу понять, как можно обойтись без FFT. имеем частотную расстройку +/- 90 Гц, 7 фильтров, следовательно точность 26 Гц. но, для того, чтобы интерполировать спектр, мне нужно иметь сигнал в частотной области. банк фильтров мне всего лишь может дать сигнал на частоте отстройки (КФ при пиковом значении). что мне в таком случае интерполировать?

 

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


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

не могу понять, как можно обойтись без FFT. имеем частотную расстройку +/- 90 Гц, 7 фильтров, следовательно точность 26 Гц. но, для того, чтобы интерполировать спектр, мне нужно иметь сигнал в частотной области. банк фильтров мне всего лишь может дать сигнал на частоте отстройки (КФ при пиковом значении). что мне в таком случае интерполировать?

 

FFT(скользящее, нужно чтобы не пропустить пик АКФ) всего лишь штука эквивалентная картинке по ссылке https://ccrma.stanford.edu/~jos/sasp/Filter...rpretation.html

 

Частотная область - это выходы фильтров. Окно - это КИХ ФНЧ , в нашем случае оно должны быть согласовано с преамбулой. Расстояние по частоте между фильтрами 1/L, где L - длительность преамбулы, это минимум без частотной интерполяции.

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


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

пробую делать квадратичную интерполяцию

занятный документ-диссертация : Phase and Frequency Estimation: High-Accuracy and Low-Complexity Techniques by Yizheng Liao

гуглиться свободно, есть описание и сравнение методов оценивания. бонусом в конце документа матлабовский код для ML + Secand метода

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


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

не могу понять, как можно обойтись без FFT. имеем частотную расстройку +/- 90 Гц, 7 фильтров, следовательно точность 26 Гц. но, для того, чтобы интерполировать спектр, мне нужно иметь сигнал в частотной области. банк фильтров мне всего лишь может дать сигнал на частоте отстройки (КФ при пиковом значении). что мне в таком случае интерполировать?

 

Будем рассуждать логически.

Нам известна предельная оценка Крамера-Рао, по которой можно оценить длину преамбулы при заданном отношении сигнал шум и требованию к точности оценки частоты. Никаким способом вы не сможете оценить ее более точно, что бы не мнил об этом ваш заказчик или начальник. Для работы ФАПЧ без переходного периода, обычно достаточно точности 1 гц - вот и оцените необходимую длину преамбулы. Меньшая работать не может.

Теоретически увеличивая длину преамбулы, можно в разумных пределах повышать точность измерения частоты, в соответствии с предельной оценкой. Однако в этом деле тоже нужно иметь чувство меры, ибо на слишком длинном периоде частота будет нестабильна. Нельзя увеличивать длительность преамбулы за пределы времени когерентности несущей. В вашем случае dopler spread лучей вообще может разрушить модель при которой работает интерполяция, но тогда вы частоту несущей не сможете определить уже никаким другим способом и ваша задача безнадежна. Будем считать, что преамбула передается периодически и несмотря на сильно кривую многолучевость, вклады в спект разных лучей по крайней мере дадут один единственный пик в спектре при данном разрешении анализа. Тогда вы можете захватить частоту по крайней мере иногда, за несколько попыток,только еще нужно приделать оценку сигнал/шум оценки, чтобы отличить этот случай, от случая, огда обнаружить преамбулу не удалось.

 

Способов интерполяции спекта много. В случае малой частотной расстройки (по отношению к частоте Найквиста) можно использовать линейную

интерполяцию по ДПФ (как в "Fast, Accurate Frequency Estimators" Eric Jacobsen and Peter Kootsookos.). Если расстройка большая - можно использовать другие варианты, например, ту же квадратичную. Но есть и другие методы.

Многократно проводить анализ и интерполяцию с разной детальностью обычно нет смысла, поскольку предельная оценка по Крамеру-Рао от этого не улучшается. Снижается только систематическая ошибка присущая методу, но она обычна мала в рабочей области сигнал/шум модемов. Многократно анализ с увеличивающейся детальностью (то есть кратность добавления нулей в QIF) применяют только когда систематическая ошибка больше случайной. FFT редко есть смысл использовать, обычно нужно использовать ДПФ в более узком диапазоне частот и переформулировать задачу в реализации как банк фильтров. Интерполяция позволяет получить оценку частоты на порядок и больше более точную , чем бин ДПФ.

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


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

в лоб можно вообще без FFT сделать.
в лоб не получается. слишком короткая у меня преамбула используемая в банке фильтров для обнаружение сигнала. 48 символов (4 отсчета на символ), 192 отсчета - маловато получается.

 

занятный документ-диссертация : Phase and Frequency Estimation: High-Accuracy and Low-Complexity Techniques by Yizheng Liao

гуглиться свободно, есть описание и сравнение методов оценивания. бонусом в конце документа матлабовский код для ML + Secand метода

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

 

1) я сейчас использую схему DDE(data directed estimation) для потоковой передачи данных, и получается что частотная синхронизация происходит только в начале приема полезных данных. далее, в процессе передачи, все частотные расстройки(доплеровский сдвиг) исправляет эквалайзер. этого достаточно, или нужно еще каким-то образом периодически подстраивать частоту? например при использование DFE эквалайзера, параллельно с ним работает еще и ФАПЧ, который следит за стабильностью частоты. а вот как быть с DDE?

 

2) и вот еще такая сложность. в некоторых каналах задана задержка между лучами 5мс. в символах это равно 12. DDE алгоритм использует кадры из 16 известных и 32-ух неизвестных символов. при таком формате данных, ИХ канала в DDE используется длинной 17 символов. возможно ли с такой длинны ИХ принимать сигнал с разностью лучей в 12 символов? вот в чем сложность. в начальный момент я центрирую ИХ характеристику. я рассчитываю центр масс ИХ и смещаю его в центральное положение(при потоковой передаче данных повторяю данную процедуру периодически). если разность хода лучей меньше ИХ/2, то проблем не возникает. но, например, если разность лучей 12 символов, иногда получается так, что один луч значительно больше другого. получается центр масс ИХ находиться не в "центре". т.е. при центрирование ИХ значимые коэффициенты одного луча могут совсем быть выброшены за край(за пределы имеющих 17 символов ИХ). как быть с этим? каким образом мне удерживать коэффициенты двух лучей в пределах 17 символьной ИХ.? простите, что так сложно объясняю..

Изменено пользователем Виктор39

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


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

получается, что к алгоритму DDE(data directed estimation) не возможно прикрутить никак непрерывную(или периодическую) частотную синхронизацию?!

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


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

получается, что к алгоритму DDE(data directed estimation) не возможно прикрутить никак непрерывную(или периодическую) частотную синхронизацию?!

Почему нельзя?? Оценка ИХ канала есть. Смещение несущей будет проявляться как вращение коэф ИХ во времени. Берете максимальный коэф. в ИХ и смотрите куда вращается. Для компенсации большой начальной расстройки не подойдет, т.к. DDE развалится, а для устранения влияния медленного ухода частоты в следствии допплера или еще чего-либо самое то.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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