Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Восстановление частоты несущей при больших расстройках
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
des00
Добрый день!
Гуру модемостроения, подскажите последние тендеции в модемостроении при построение цепей AFC (работа с большими изначальными расстройками).

Из обзора литературы я понял что используется либо :
1. система поиска частоты (при больших расстройках медленно и есть определенные проблемы с детекторами захвата, особенно в шумах).
2. система основанная на BandEdge фильтрах (фильтры +-1/2T с выравниванием мощности), но она очень чувствительна к перекосам спектра.
3. система на ортогональных пилот сигналах/нелинейного выделения частоты несущей + классическое выделение расстройки по несушей с помощью cross/dot product (чувствительна к проникновению данных в пилот/ухудшение с/ш по захвату + высокий шум)
4. системы на основе FFT/банка фильтров (нужен ресурс под все это дело)
5. системы на основе преамбулы + FFT (как в TDMA, как тут с ресурсом еще не разобрался).

Другого, в доступной мне литературе не нашел. Может быть я что-то пропустил и прогрессивное человечество придумало что-то новое?

Спасибо!!!
Serg76
я использую FFT от нелинейного преобразования сигнала (возведение в степень для снятия модуляции). Работает как в непрерывных сигналах, так и в TDMA. единственное для TDMA, если потом нужно подстраиваться по каждому пакету, то не всегда подходит такой метод, ибо пакеты короткой и длины и точно оценить отстройку без ухудшения С/Ш не получается, поэтому удерживаю несущую только за счет фазы. И еще при низком исходном соотношении С/Ш возведение в степень сильно разгоняет шум, особенно для 8PSK/16APSK. но в основном все устраивает, поиск даже при достаточно больших отстройках. sm.gif
iiv
Я правда в модемах ни бум-бум, но, по восстановелнию частоты несущей, можно вставить свои пять копеек? Линейное предсказание, код у тебя есть, единственно, это довольно трудоемкая процедура, может поесть все доступные умножители, наверное из-за этого - не распространено. Причем одна часть алгоритма на плиску хорошо ложится, а вот другую я только на писишке смог гонять, там больно много условий и ветвлений. Вкрячивать ниос и на нем на С программировать - так и не научился.

Реально где это мейн стрим - ядерный магнитный резонанс, но там стоимость прибора сравнима с хорошим суперкомпьютером, поэтому народ там на терафлопсах не экономит. Если заинтересует, могу кинуть (если быстро отсканирую) хороший обзор, или несколько своих статей, и доступно об этом порассказываю.
des00
Цитата(Serg76 @ Nov 3 2011, 09:44) *
я использую FFT от нелинейного преобразования сигнала (возведение в степень для снятия модуляции).

странно что используете FFT, если снять модуляцию можно через аркангенс и cross/dot product вычислить расстройку. Хотя не знаю как там будет с шумами, ведь помимо возведения в квадрат, будет еще умножение сигналов между собой. И для индексов модуляции высоких порядков этот метод не сильно подходит (QAM32 и выше).

Немного вопросов о размере FFT, не могли бы вы указать ширину полосы, частоту АЦП и размер FFT используемого вами. Т.к. ИМХО если взять полосу в 20МГц, тактовую в 100МГц, для разрешения по частоте 10КГц потребуется фурье на 5000 точек. Что занимает кучу времени и ресурса. Или вы считаете не все бины FFT, а только часть нужных вам точек?

Цитата(iiv @ Nov 3 2011, 10:37) *
Я правда в модемах ни бум-бум, но, по восстановелнию частоты несущей, можно вставить свои пять копеек? Линейное предсказание, код у тебя есть, единственно, это довольно трудоемкая процедура
...
Если заинтересует, могу кинуть (если быстро отсканирую) хороший обзор, или несколько своих статей, и доступно об этом порассказываю.

обзоры бы посмотрел, спасибо! а по применению сомневаюсь я что-то, особенно для low-cost модемов %)
Serg76
Цитата(des00 @ Nov 3 2011, 21:25) *
странно что используете FFT, если снять модуляцию можно через аркангенс и cross/dot product вычислить расстройку. Хотя не знаю как там будет с шумами, ведь помимо возведения в квадрат, будет еще умножение сигналов между собой. И для индексов модуляции высоких порядков этот метод не сильно подходит (QAM32 и выше).


FFT более универсален, подходит практически под любые моды, алгоритм реализации прост, а через арктангенс по-моему алгоритм по-сложнее будет. Делал на персоналке, поэтому в ресурсах не был стеснен.

Цитата(des00 @ Nov 3 2011, 21:25) *
Немного вопросов о размере FFT, не могли бы вы указать ширину полосы, частоту АЦП и размер FFT используемого вами. Т.к. ИМХО если взять полосу в 20МГц, тактовую в 100МГц, для разрешения по частоте 10КГц потребуется фурье на 5000 точек. Что занимает кучу времени и ресурса. Или вы считаете не все бины FFT, а только часть нужных вам точек?


нет, считал полное FFT, потому как отстройка заранее неизвестна и могла иметь любое значение, сравнимое с полосой сигнала, опять же повторюсь делал на персоналке, поэтому ресурсы были предоставлены + ускорение за счет инстриктов процессора. Размер окна FFT уже не помню какой брал, но по-моему побольше 5000.
Serg76
2 des00 можно попробовать еще сделать гибрид: FFT (для начальной грубой оценки) + обычная узкополосная ФАПЧ. тогда вроде как ресурсов немного понадобится на FFT.
des00
Цитата(Serg76 @ Nov 4 2011, 00:30) *
можно попробовать еще сделать гибрид: FFT (для начальной грубой оценки) + обычная узкополосная ФАПЧ. тогда вроде как ресурсов немного понадобится на FFT.

По моим расчетам получается не так. Для примера возьмем полосу 20МГц и частоту оцифровки 100МГц. Как показывает мой опыт полоса захвата петель по несушке (например известный TanLock loop) порядка 15-20кГц. Поэтому при оценке по FFT желательно иметь размер шага в половину петли захвата. Получается 10Кгц, для этого требуемое кол-во точек FFT 50МГц/10кГц = 5000.

В моем случае полосы достаточно широкие, модем линейный и расстройка будет порядка +-200КГц, вот и думаю как бы "дешевле" по ресурсам это сделать. Судя по тому что пишет альтера в FFT MegaCore Function User Guide в варианте 4096 точек ~6000LC ну совсем не гуманно %)

Еще рассматриваю вариант сделать BPSK преамбулу (немного подожму скругление и задеру символьную), может быть у кого то есть хорошие доки по синхронизации TDMA? чтобы не искать wink.gif

Grumbler_2002
А если взять, к примеру, БПФ на 32 или более точек, а потом Герцеля с десяток раз запустить?
GetSmart
При больших шумах, чем больше точек БПФ, тем лучше. Другими словами, при определённых больших шумах, БПФ на мало точек может ничего полезного не определить. А уж Герцель потом хз что насчитает.
Grumbler_2002
Цитата(GetSmart @ Nov 6 2011, 11:26) *
При больших шумах, чем больше точек БПФ, тем лучше. Другими словами, при определённых больших шумах, БПФ на мало точек может ничего полезного не определить. А уж Герцель потом хз что насчитает.


При больших - это каких? Что-то конкретных цифр у ТС я не заметил. Мне почему-то кажется, что необходимое число точек будет существенно меньше 5к.
GetSmart
Шумы не озвучены. Но я предупредил sm.gif
Serg76
Цитата(Grumbler_2002 @ Nov 6 2011, 12:37) *
Мне почему-то кажется, что необходимое число точек будет существенно меньше 5к.

как? не производя никаких дополнительных интерполяций?
alex_os
Цитата(des00 @ Nov 5 2011, 17:11) *
В моем случае полосы достаточно широкие, модем линейный и расстройка будет порядка +-200КГц, вот и думаю как бы "дешевле" по ресурсам это сделать. Судя по тому что пишет альтера в FFT MegaCore Function User Guide в варианте 4096 точек ~6000LC ну совсем не гуманно %)

Еще рассматриваю вариант сделать BPSK преамбулу (немного подожму скругление и задеру символьную), может быть у кого то есть хорошие доки по синхронизации TDMA? чтобы не искать wink.gif


Если взять полосу в 200 КГц отфильтровать и децимировать то можно и маленьким FFT обойтись. Еще дешевый вариант -
пилот в виде немодулированной несущей, на приемной стороне частотный детектор для начального захвата.
Serg76
Цитата(alex_os @ Nov 6 2011, 12:45) *
Если взять полосу в 200 КГц отфильтровать и децимировать то можно и маленьким FFT обойтись. Еще дешевый вариант -
пилот в виде немодулированной несущей, на приемной стороне частотный детектор для начального захвата.

Насколько дешево обойдется децимация? я поэтому и не решился ее предложить. А вот с преамбулой может стоит попробовать.
alex_os
Цитата(Serg76 @ Nov 6 2011, 12:55) *
Насколько дешево обойдется децимация? А вот с преамбулой может стоит попробовать.

Сильно дешевле чем ФФТ на 4K. Какой-нибудь CIC - дециматор 3го порядка + FIR. На высокой частоте несколько аккумуляторов будет работать. Все остальное на пониженной частоте.

upd: 2 Serg76. А что в возведении КАМ в 4ю степень получается чего-нибудь полезное при разумных SNR?
Serg76
Цитата(alex_os @ Nov 6 2011, 13:02) *
Сильно дешевле чем ФФТ на 4K. Какой-нибудь CIC - дециматор 3го порядка + FIR. На высокой частоте несколько аккумуляторов будет работать. Все остальное на пониженной частоте.

может быть, может быть, правда к этому всему все равно еще надо добавить FFT, но уже конечно с меньшим размером. все равно надо прикидывать.
petrov
ИМХО лучший вариант периодически передавать CAZAC последовательность и быстрый банк фильтров для её обнаружения как по времени так и по частоте.
Grumbler_2002
Цитата(Serg76 @ Nov 6 2011, 13:34) *
как? не производя никаких дополнительных интерполяций?


А интерполяции зачем? После относительно короткого БПФ запускается Герцель для уточнения точного положения палки.
alex_os
Цитата(petrov @ Nov 6 2011, 13:11) *
ИМХО лучший вариант периодически передавать CAZAC последовательность и быстрый банк фильтров для её обнаружения как по времени так и по частоте.

А как банком фильтров CAZAC последовательность искать? Выходы фильтров сворачиваются с референсными последовательностями или сама CAZAC как-то в фильтры интегрирована ?
petrov
Цитата(alex_os @ Nov 6 2011, 14:27) *
А как банком фильтров CAZAC последовательность искать? Выходы фильтров сворачиваются с референсными последовательностями или сама CAZAC как-то в фильтры интегрирована ?


Есть такие комплементарные последовательности Голея, согласованный с ними фильтр имеет структуру с низкой вычислительной сложностью, если несколько таких фильтров на разные частоты нарисовать с различными поворачивающими коэффициентами, то становится очевидно что можно сократить вычисления, чем-то похоже на FFT.
alex_os
Цитата(petrov @ Nov 6 2011, 13:42) *
Есть такие комплементарные последовательности Голея, согласованный с ними фильтр имеет структуру с низкой вычислительной сложностью, если несколько таких фильтров на разные частоты нарисовать с различными поворачивающими коэффициентами, то становится очевидно что можно сократить вычисления, чем-то похоже на FFT.

Интересно! Т.е. сама последовательность имеет некую структуру которая позволяет построить экономичный коррелятор?!
Но все равно, такая последовательность должна будет иметь длину порядка 4К. Для необходимого разрешения по частоте..

Можно еще предложить старинный способ когда последовательность с хорошей АКФ повторяется 2 раза. Синхронизация во времени делается простым автокоррелятором. Для синxpонизации по частоты возможны варианты. Если спектр сигнала не сильно кривой то для оценки отстройки несущей можно использовать аргумент максимума автокорреляции.
petrov
Цитата(alex_os @ Nov 6 2011, 15:00) *
Интересно! Т.е. сама последовательность имеет некую структуру которая позволяет построить экономичный коррелятор?!


Да. Нажмите для просмотра прикрепленного файла

Цитата(alex_os @ Nov 6 2011, 15:00) *
Но все равно, такая последовательность должна будет иметь длину порядка 4К. Для необходимого разрешения по частоте..


С чего это? Очень даже короткая она может быть порядка десятков символов. По сути определение частоты тона на выходе банка фильтров аналогично оценке частоты синусоиды с помощью FFT, fontp много раз тут статьи приводил.

Цитата(alex_os @ Nov 6 2011, 15:00) *
Можно еще предложить старинный способ когда последовательность с хорошей АКФ повторяется 2 раза. Синхронизация во времени делается простым автокоррелятором.


Да простой способ, но пик тупой размытый. С многолочёвостью всё это развалится.

Цитата(alex_os @ Nov 6 2011, 15:00) *
Для синxpонизации по частоты возможны варианты.


По времени засинхронизировались, модуляцию сняли и на FFT.
alex_os
Цитата(petrov @ Nov 6 2011, 14:16) *


Спасибо ! Классная статья.

Цитата
С чего это? Очень даже короткая она может быть порядка десятков символов. По сути определение частоты тона на выходе банка фильтров аналогично оценке частоты синусоиды с помощью FFT, fontp много раз тут статьи приводил.

Ну несколько десятков это Вы перегнули sm.gif. Допустим нужно разрешение по частоте Fs/4096 что достигается в лоб при помощи FFT выборки размером в 4K. Врядли интерполяция позволит уменьшить размер выборки на два порядка. Ну на порядок я еще поверю..

Цитата
Да простой способ, но пик тупой размытый. С многолочёвостью всё это развалится.

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




Serg76
Цитата(Grumbler_2002 @ Nov 6е 2011, 14:15) *
А интерполяции зачем? После относительно короткого БПФ запускается Герцель для уточнения точного положения палки.

Герцель тоже придется не один раз запускать, получается таже интерполяция, имхо.
petrov
Цитата(alex_os @ Nov 6 2011, 15:44) *
Ну несколько десятков это Вы перегнули sm.gif. Допустим нужно разрешение по частоте Fs/4096 что достигается в лоб при помощи FFT выборки размером в 4K. Врядли интерполяция позволит уменьшить размер выборки на два порядка. Ну на порядок я еще поверю..


Не нужно нам никакое разрешение, мы же не грамоники друг от друга отделяем. Длина последовательности будет определятся только соотношением сигнал/шум и необходимой дисперсией оценки частоты, фазы, символьной фазы, 4K это какой-то гигантский оверхэд, на данные места не останется.
Grumbler_2002
Цитата(Serg76 @ Nov 6 2011, 15:56) *
Герцель тоже придется не один раз запускать, получается таже интерполяция, имхо.


Я так и написал, что не раз. Только вот это не интерполяция, а совершенно аналогичный результат длинному БПФ, поскольку это один хрен, только сбоку. После относительно короткого БПФ получаем некий диапазон частот, в котором уже, последовательно применяя Герцеля, улучшаем оценку расстройки по частоте . По ресурсам будет выигрыш, по остальному - так же или проигрыш.
Serg76
Цитата(Grumbler_2002 @ Nov 6 2011, 15:27) *
После относительно короткого БПФ получаем некий диапазон частот, в котором уже, последовательно применяя Герцеля, улучшаем оценку расстройки по частоте.

Я как раз и имел ввиду, что последовательное применение Герцеля и есть своего рода интерполяция, ведь мы ее можем провести после получения грубой оценки FFT? имхо, конечно.
Grumbler_2002
Цитата(Serg76 @ Nov 6 2011, 16:58) *
Я как раз и имел ввиду, что последовательное применение Герцеля и есть своего рода интерполяция, ведь мы ее можем провести после получения грубой оценки FFT? имхо, конечно.


И что? Где же здесь интерполяция? Интерполяция - это когда по уже известным точкам вычисляются промежуточные. А здесь идет полное вычисление промежуточных сходящихся точек. Это скорее можно назвать аппроксимацией, нежели интерполяцией. Понятно, что результат сильно зависит от первой грубой стадии, но при превышении определенной длины БПФ это негативное влияние будет незначительно.
Serg76
Цитата(Grumbler_2002 @ Nov 6 2011, 18:21) *
И что? Где же здесь интерполяция? Интерполяция - это когда по уже известным точкам вычисляются промежуточные. А здесь идет полное вычисление промежуточных сходящихся точек. Это скорее можно назвать аппроксимацией, нежели интерполяцией. Понятно, что результат сильно зависит от первой грубой стадии, но при превышении определенной длины БПФ это негативное влияние будет незначительно.

Аппроксимация это замена реальной функции некой другой, которая схожа с ней по характеристикам, но проще в построении. Здесь она вообще непричем. А вот Герцель своего рода и является интерполяцией (опять же условно говоря, на самом деле конечно же это не так), т.е. нахождением промежуточных значений, только и всего. Ладно, предлагаю забить, тема сейчас не об этом. sm.gif
Grumbler_2002
Цитата(Serg76 @ Nov 6 2011, 18:55) *
Аппроксимация это замена реальной функции некой другой, которая схожа с ней по характеристикам, но проще в построении. Здесь она вообще непричем. А вот Герцель своего рода и является интерполяцией (опять же условно говоря, на самом деле конечно же это не так), т.е. нахождением промежуточных значений, только и всего. Ладно, предлагаю забить, тема сейчас не об этом. sm.gif


Поясню. Замена БПФ 5к на БПФ 128 - это аппроксимация с моей точки зрения. Герцель интерполяцией ни в коем разе не является и я даже не знаю, с какой стороны ему можно пришить такой криминал, и имеет точность как у ПФ, то есть дополнительную ошибку в результат не вносит. Поэтому мне видится общий результат замены как аппроксимация. Я, конечно, не претендую на точность формулировок, но вот как-то так.
Serg76
Цитата(Grumbler_2002 @ Nov 6 2011, 19:35) *
Поясню. Замена БПФ 5к на БПФ 128 - это аппроксимация с моей точки зрения. Герцель интерполяцией ни в коем разе не является и я даже не знаю, с какой стороны ему можно пришить такой криминал, и имеет точность как у ПФ, то есть дополнительную ошибку в результат не вносит. Поэтому мне видится общий результат замены как аппроксимация. Я, конечно, не претендую на точность формулировок, но вот как-то так.

Ладно, пусть будет так.
des00
Ого, какое обсуждение %)
Цитата(alex_os @ Nov 6 2011, 03:45) *
Если взять полосу в 200 КГц отфильтровать и децимировать то можно и маленьким FFT обойтись. Еще дешевый вариант -
пилот в виде немодулированной несущей, на приемной стороне частотный детектор для начального захвата.

не совсем понял что вы предлагаете. Нужно ловить расстройку +-200Кгц(~50ppm на частоте 5 ГГц), спектра шириной от 2/4/8/16/20МГц. Как вы предлагаете делать частотный детектор? Режим передачи не модулированной несущей не подходит, т.к. преамбулу я смогу вставить в поток, а вот отключить передачу и включать несушку нет. Как уже писал модем линейный, с постоянной передачей информации.


Цитата(petrov @ Nov 6 2011, 04:11) *
ИМХО лучший вариант периодически передавать CAZAC последовательность и быстрый банк фильтров для её обнаружения как по времени так и по частоте.

спасибо за доку, посмотрю внимательно %)

ЗЫ. На основе метода BandEdge фильтров, я сделал модель демодулятора в матлабе, с Loop Back петлей АПЧ(для линейных модемов это допускается), методом непосредственного измерения частоты. Для работы не нужно передавать каких либо преамбул, вычислительная сложность : пара fir/iir фильтров + немного логики, без возведения в квадрат/перемножения. Судя по модельке работает при перекосах спектра до 20дБ и SNR 10 дБ, и по идее независимо от вида модуляции. Если интересно выложу
alex_os
Цитата(des00 @ Nov 6 2011, 19:40) *
не совсем понял что вы предлагаете. Нужно ловить расстройку +-200Кгц(~50ppm на частоте 5 ГГц), спектра шириной от 2/4/8/16/20МГц. Как вы предлагаете делать частотный детектор? Режим передачи не модулированной несущей не подходит, т.к. преамбулу я смогу вставить в поток, а вот отключить передачу и включать несушку нет. Как уже писал модем линейный, с постоянной передачей информации.


Хорошо преамбулу из одного и того же символа повторяющегося N раз можете сделать? Вот Вам и несущая sm.gif. Еще вариант как в модемах для телефонной линии (вроде v32, v34) для синхронизации передавалась последовательность
из двух чередующихся символов PSK4 т.н последовательность ABAB...
des00
Цитата(alex_os @ Nov 6 2011, 13:37) *
Хорошо преамбулу из одного и того же символа повторяющегося N раз можете сделать? Вот Вам и несущая sm.gif.

да, для преамбулы найду место. я правильно понимаю что оценку несущей на коротком интервале прембулы нужно делать либо по фурье, либо банком фильтров ?
x736C
des00, а можно глянуть на модель в образовательных целях?
alex_os
Цитата(des00 @ Nov 7 2011, 07:51) *
я правильно понимаю что оценку несущей на коротком интервале прембулы нужно делать либо по фурье, либо банком фильтров ?

Мне кажется это самый правильный подход, хотя, наверняка, не самый дешевый. Всякие ФАПЧ при расстройке несущей в
0.1 от тактовой сомнительны .
des00
Цитата(x736C @ Nov 6 2011, 23:47) *
а можно глянуть на модель в образовательных целях?

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

ЗЫ. полный демодулятор выкладывать не буду (чтобы СБ не напрягать), в модели только Loopback AFC
Jools
А способы снятия модуляции никто не подскажет?
Видел выше по постам способ с применением арктангенса. Как он правильно называется ?


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.