dasha39 0 10 октября, 2013 Опубликовано 10 октября, 2013 · Жалоба добрый день. как я писал выше, первоначальную частотную синхронизацию я делаю по преамбуле. т.е. принятый сигнал перемножаю с комплексно-сопряженной преамбулой, тем самым снимается модуляция и остается гармоника отстройки, которую я и должен определить... в матлабовском коде я просто делал fft по большому количеству точек и затем определял максимальную составляющую спектра. в железе ведь так не возможно сделать из-за большой сложности вычислений. немного почитав на форуме, понял, что можно вместо fft делать Герцеля. так как я ловлю преамбулу с помощью банка фильтров, частотную отстройку я изначально знаю с точностью до +/- 7 Гц(Fs = 9600). далее я делаю Герцеля, по нескольким точкам в диапазоне предполагаемого максимума. потом увеличиваю количество точек, и снова герцеля. но это тоже получается весьма затратно, так как скажем для точность в пол герца требуется десятки тысяч точек. а у меня для определения частоты используется 128 отсчетов.. нужно в сотни раз интерполировать исходный сигнал, и рассчитывать десятки тысяч коэффициентов для определения только одной спектральной составляющей... а это тоже очень вычислительно затратно... может вы мне можете что-нибудь посоветовать?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 10 октября, 2013 Опубликовано 10 октября, 2013 · Жалоба первоначальную частотную синхронизацию я делаю по преамбуле. т.е. принятый сигнал перемножаю с комплексно-сопряженной преамбулой, тем самым снимается модуляция и остается гармоника отстройки, которую я и должен определить... в матлабовском коде я просто делал fft по большому количеству точек и затем определял максимальную составляющую спектра. в железе ведь так не возможно сделать из-за большой сложности вычислений. так как я ловлю преамбулу с помощью банка фильтров, частотную отстройку я изначально знаю с точностью до +/- 7 Гц(Fs = 9600). А в чём разница? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 10 октября, 2013 Опубликовано 10 октября, 2013 · Жалоба А в чём разница? ни в чем нет разницы. может я что-то не понятно написал. возможная частотная отстройка у меня +/- 90 Гц. использую банк из 7 фильтров на разных частотах. (90*2)/7 = 26 Гц диапазон на каждый фильтр. т.е. получается, определив наличие сигнала, я уже знаю его частоту с точностью не до +/- 7 Гц, как я писал выше, а до +/- 13 Гц, но это не важно. для определения более точно частотной отстройки следующую часть принятого сигнала(преамбулы) перемножаю с комплексно-сопряженным, получаю сигнал на частоте отстройки. а вот как далее быть, я не совсем понимаю, о чем и спрашиваю у вас... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 10 октября, 2013 Опубликовано 10 октября, 2013 · Жалоба http://electronix.ru/forum/index.php?s=&am...t&p=1141738 Обсуждалось уже в вашей же теме, по выходам банка фильтров согласованных с преамбулой значение частоты уточняется интерполяцией. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 11 октября, 2013 Опубликовано 11 октября, 2013 · Жалоба 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 11 октября, 2013 Опубликовано 11 октября, 2013 · Жалоба Попробуйте для начала метод из статьи "Fast, Accurate Frequency Estimators" Eric Jacobsen and Peter Kootsookos. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 11 октября, 2013 Опубликовано 11 октября, 2013 (изменено) · Жалоба Попробуйте для начала метод из статьи "Fast, Accurate Frequency Estimators" Eric Jacobsen and Peter Kootsookos. я пробовал этот метод первым делом, потому что он проще. как я понял, в нем оценка происходит только один раз, а в QIFFT, наверное, несколько раз. могли бы вы сказать, какой из методов более точный? судя по моим тестам QIFFT более точен, хотя я так и не разобрался еще, как его правильно до конца сделать... и еще, мне очень сложно подобрать длину окна FFT, чтобы это было не сильно вычислительно затратно, и чтобы точность не сильно страдала. понимаю, что все относительно, но не могли бы вы мне посоветовать, какую длину лучше выбирать. я остановился на длине окна 400 отсчетов (100 символов, Fs = 9600), Zero-padding factor = 4 т.е.1600 точек FFT. Изменено 11 октября, 2013 пользователем Виктор39 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 11 октября, 2013 Опубликовано 11 октября, 2013 · Жалоба я пробовал этот метод первым делом Вывод какой? Не хватает точности? Ещё учитывайте что не чистый синус оцениваем, а преамбула+многолучёвка+данные+помехи, сигнал с совсем другой функцией неопределённости, не буду утверждать, но возможно суперточные методы для синусов здесь вообще смысла не имеют. и еще, мне очень сложно подобрать длину окна FFT, чтобы это было не сильно вычислительно затратно, и чтобы точность не сильно страдала. понимаю, что все относительно, но не могли бы вы мне посоветовать, какую длину лучше выбирать. я остановился на длине окна 400 отсчетов (100 символов, Fs = 9600), Zero-padding factor = 4 т.е.1600 точек FFT. Окно - это ваша преамбула, размер FFT не должен быть равен размеру окна, определяется только максимальной расстройкой по частоте и интерполяцией(если требуется) по частоте, т. е. количеством фильтров в банке по выходам которых вы ловите максимальный пик и вычисляете дробный максимум по частоте в его окрестности, в лоб можно вообще без FFT сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 11 октября, 2013 Опубликовано 11 октября, 2013 · Жалоба Окно - это ваша преамбула, размер FFT не должен быть равен размеру окна, определяется только максимальной расстройкой по частоте и интерполяцией(если требуется) по частоте, т. е. количеством фильтров в банке по выходам которых вы ловите максимальный пик и вычисляете дробный максимум по частоте в его окрестности, в лоб можно вообще без FFT сделать. не могу понять, как можно обойтись без FFT. имеем частотную расстройку +/- 90 Гц, 7 фильтров, следовательно точность 26 Гц. но, для того, чтобы интерполировать спектр, мне нужно иметь сигнал в частотной области. банк фильтров мне всего лишь может дать сигнал на частоте отстройки (КФ при пиковом значении). что мне в таком случае интерполировать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 11 октября, 2013 Опубликовано 11 октября, 2013 · Жалоба не могу понять, как можно обойтись без FFT. имеем частотную расстройку +/- 90 Гц, 7 фильтров, следовательно точность 26 Гц. но, для того, чтобы интерполировать спектр, мне нужно иметь сигнал в частотной области. банк фильтров мне всего лишь может дать сигнал на частоте отстройки (КФ при пиковом значении). что мне в таком случае интерполировать? FFT(скользящее, нужно чтобы не пропустить пик АКФ) всего лишь штука эквивалентная картинке по ссылке https://ccrma.stanford.edu/~jos/sasp/Filter...rpretation.html Частотная область - это выходы фильтров. Окно - это КИХ ФНЧ , в нашем случае оно должны быть согласовано с преамбулой. Расстояние по частоте между фильтрами 1/L, где L - длительность преамбулы, это минимум без частотной интерполяции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 октября, 2013 Опубликовано 12 октября, 2013 · Жалоба пробую делать квадратичную интерполяцию занятный документ-диссертация : Phase and Frequency Estimation: High-Accuracy and Low-Complexity Techniques by Yizheng Liao гуглиться свободно, есть описание и сравнение методов оценивания. бонусом в конце документа матлабовский код для ML + Secand метода Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 13 октября, 2013 Опубликовано 13 октября, 2013 · Жалоба не могу понять, как можно обойтись без FFT. имеем частотную расстройку +/- 90 Гц, 7 фильтров, следовательно точность 26 Гц. но, для того, чтобы интерполировать спектр, мне нужно иметь сигнал в частотной области. банк фильтров мне всего лишь может дать сигнал на частоте отстройки (КФ при пиковом значении). что мне в таком случае интерполировать? Будем рассуждать логически. Нам известна предельная оценка Крамера-Рао, по которой можно оценить длину преамбулы при заданном отношении сигнал шум и требованию к точности оценки частоты. Никаким способом вы не сможете оценить ее более точно, что бы не мнил об этом ваш заказчик или начальник. Для работы ФАПЧ без переходного периода, обычно достаточно точности 1 гц - вот и оцените необходимую длину преамбулы. Меньшая работать не может. Теоретически увеличивая длину преамбулы, можно в разумных пределах повышать точность измерения частоты, в соответствии с предельной оценкой. Однако в этом деле тоже нужно иметь чувство меры, ибо на слишком длинном периоде частота будет нестабильна. Нельзя увеличивать длительность преамбулы за пределы времени когерентности несущей. В вашем случае dopler spread лучей вообще может разрушить модель при которой работает интерполяция, но тогда вы частоту несущей не сможете определить уже никаким другим способом и ваша задача безнадежна. Будем считать, что преамбула передается периодически и несмотря на сильно кривую многолучевость, вклады в спект разных лучей по крайней мере дадут один единственный пик в спектре при данном разрешении анализа. Тогда вы можете захватить частоту по крайней мере иногда, за несколько попыток,только еще нужно приделать оценку сигнал/шум оценки, чтобы отличить этот случай, от случая, огда обнаружить преамбулу не удалось. Способов интерполяции спекта много. В случае малой частотной расстройки (по отношению к частоте Найквиста) можно использовать линейную интерполяцию по ДПФ (как в "Fast, Accurate Frequency Estimators" Eric Jacobsen and Peter Kootsookos.). Если расстройка большая - можно использовать другие варианты, например, ту же квадратичную. Но есть и другие методы. Многократно проводить анализ и интерполяцию с разной детальностью обычно нет смысла, поскольку предельная оценка по Крамеру-Рао от этого не улучшается. Снижается только систематическая ошибка присущая методу, но она обычна мала в рабочей области сигнал/шум модемов. Многократно анализ с увеличивающейся детальностью (то есть кратность добавления нулей в QIF) применяют только когда систематическая ошибка больше случайной. FFT редко есть смысл использовать, обычно нужно использовать ДПФ в более узком диапазоне частот и переформулировать задачу в реализации как банк фильтров. Интерполяция позволяет получить оценку частоты на порядок и больше более точную , чем бин ДПФ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 14 октября, 2013 Опубликовано 14 октября, 2013 (изменено) · Жалоба в лоб можно вообще без 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 символьной ИХ.? простите, что так сложно объясняю.. Изменено 14 октября, 2013 пользователем Виктор39 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 16 октября, 2013 Опубликовано 16 октября, 2013 · Жалоба получается, что к алгоритму DDE(data directed estimation) не возможно прикрутить никак непрерывную(или периодическую) частотную синхронизацию?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex_os 0 17 октября, 2013 Опубликовано 17 октября, 2013 · Жалоба получается, что к алгоритму DDE(data directed estimation) не возможно прикрутить никак непрерывную(или периодическую) частотную синхронизацию?! Почему нельзя?? Оценка ИХ канала есть. Смещение несущей будет проявляться как вращение коэф ИХ во времени. Берете максимальный коэф. в ИХ и смотрите куда вращается. Для компенсации большой начальной расстройки не подойдет, т.к. DDE развалится, а для устранения влияния медленного ухода частоты в следствии допплера или еще чего-либо самое то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться