Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выделение тактовой синхронизации
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
evg123
Задача такая: Есть поток 16-ричных цифр - оцифровнный аналоговый сигнал на фоне гауссового шума со скоростью где-то 100-200 KSPS т.е. цифровой сигнал. Сигнал представляет собой медленную последовательность нулей и единиц (10 кБод) пропущенную через фильтр преподнятого косинуса и переданную в эфир. Из этих, полученных из эфира, волн требуется выделить тактовую синхронизацию, т.е. место стробирования в котором нулевая ISI. Задача классическая, может быть кто-то знает алгоритм как это сделать.
fontp
Цитата(evg123 @ Sep 15 2006, 15:31) *
Задача такая: Есть поток 16-ричных цифр - оцифровнный аналоговый сигнал на фоне гауссового шума со скоростью где-то 100-200 KSPS т.е. цифровой сигнал. Сигнал представляет собой медленную последовательность нулей и единиц (10 кБод) пропущенную через фильтр преподнятого косинуса и переданную в эфир. Из этих, полученных из эфира, волн требуется выделить тактовую синхронизацию, т.е. место стробирования в котором нулевая ISI. Задача классическая, может быть кто-то знает алгоритм как это сделать.



Надо понимать так, что у вас амплитудно-модулированый сигнал. Можно считать что это последовательность из 1, -1. Алгоритм зависит от того какая точность вам нужна. Кроме того
зависит от того блочно или последовательно вы будете весть обработку.
Простейший алгоритм будет пытаться определить фазу точек перехода через 0 (1 -> -1 или -1 -> 1).
В простейшем случае возводим сигнал в квадрат и для N позиций тактовой фазы внутри битового интервала (N число отсчётов на бит) посдчитываем сумму этих самых квадратов с шагом Tb.
T/e считается N сумм с индексом суммирования t= t(i) + Tb*j, сумма по j, t(i) = Tb/N*i, i=0...N-1
К той фазе, которая даст минимум, добавим половину битового интервала Tb/2. Иногда вместо квадрата используют модуль или ещё какую нелинейную функцию.
Всё.

Очень грамотно для блочной обработки делать так. Если огибаящая S(t) (квадрат сигнала в данном случае)
подсчитываем
A = СУММА (S(t)*sin(2*pi*t/Tb))
B = СУММА (S(t)*cos(2*pi*t/Tb)),
Tb - бодовый интервал (битовый в данном случае)

тогда фаза Ф точки тактовой выборки (eye openning point) есть
Ф = arctg(A/B)

В какой-то степени эти алгоритмы можно переформулировать в последовательном виде.
Вообще-то для последовательного обнаружения есть своя наука например алгоритм Гарднера
+ ФАПЧ
http://www.edaboard.com/viewtopic.php?t=18...ght=timingerror

Много букв, еле осилил wink.gif
Fast
только я не понял, какой вид модуляции используется: ФМ(ОФМ), ЧМ, ММС
там тактироваться по-разному придется
fontp
Для большинства видов простой модуляции можно использовать упомянутые алгоритмы. Если выделить сначала "информационную" огибающую

Например для ЧМ - Ставим два фильтра на соответствующие частоты, фильтруем, вычитаем, возводим в квадрат. То, cё. Имеем огибающую.
Для ФМ - сносим на нулевую частоту, фильтруем согласованым фильтром, берём модуль сигнала (хоть действительного, хоть комплесного). Все дела, хоть BPSK, хоть QPSK
Ну и т.д. Примерно так можно сформировать сигнал который в основном постоянный, а в точках перехода (смены инф. символов) имеет выбросы. Эта огибающая есть случайный набор коротких импульсов с периодичностью равной исходной символьной. Случайный, с пропусками импульсов.
Строго периодическим он был бы только на меандре.
И все 3 упомянутых алгоритма будут работать.
evg123
Уточняю: Речь идет на самом деле о черырех-уровневом сигнале., т.е. QFSK. Но сигнал уже перенесен на BASEband, посредством частотного дискриминатора. Т.е. получен из эфира, снесен на ПЧ, снесен на BaseBand, и имею такие гладкие четырех-уровневые видео волны (с возможными прыжками между самым нижним и самым верхним уровнями), только не в аналоге, а в цифровом потоке.

Цитата(fontp @ Sep 15 2006, 16:26) *
Цитата(evg123 @ Sep 15 2006, 15:31) *

Задача такая: Есть поток 16-ричных цифр - оцифровнный аналоговый сигнал на фоне гауссового шума со скоростью где-то 100-200 KSPS т.е. цифровой сигнал. Сигнал представляет собой медленную последовательность нулей и единиц (10 кБод) пропущенную через фильтр преподнятого косинуса и переданную в эфир. Из этих, полученных из эфира, волн требуется выделить тактовую синхронизацию, т.е. место стробирования в котором нулевая ISI. Задача классическая, может быть кто-то знает алгоритм как это сделать.



Надо понимать так, что у вас амплитудно-модулированый сигнал. Можно считать что это последовательность из 1, -1. Алгоритм зависит от того какая точность вам нужна. Кроме того
зависит от того блочно или последовательно вы будете весть обработку.
Простейший алгоритм будет пытаться определить фазу точек перехода через 0 (1 -> -1 или -1 -> 1).
В простейшем случае возводим сигнал в квадрат и для N позиций тактовой фазы внутри битового интервала (N число отсчётов на бит) посдчитываем сумму этих самых квадратов с шагом Tb.
T/e считается N сумм с индексом суммирования t= t(i) + Tb*j, сумма по j, t(i) = Tb/N*i, i=0...N-1
К той фазе, которая даст минимум, добавим половину битового интервала Tb/2. Иногда вместо квадрата используют модуль или ещё какую нелинейную функцию.
Всё.

Очень грамотно для блочной обработки делать так. Если огибаящая S(t) (квадрат сигнала в данном случае)
подсчитываем
A = СУММА (S(t)*sin(2*pi*t/Tb))
B = СУММА (S(t)*cos(2*pi*t/Tb)),
Tb - бодовый интервал (битовый в данном случае)

тогда фаза Ф точки тактовой выборки (eye openning point) есть
Ф = arctg(A/B)

В какой-то степени эти алгоритмы можно переформулировать в последовательном виде.
Вообще-то для последовательного обнаружения есть своя наука например алгоритм Гарднера
+ ФАПЧ
http://www.edaboard.com/viewtopic.php?t=18...ght=timingerror

Много букв, еле осилил wink.gif

Спасибо. Логика понятна. Для чтырехуровневого сигнала - это будет три глаза. Но по-видимому это ничего не меняет.
fontp
Типа того. Вы должны придумать нелинейную схему предварительной обработки при которой переход превращается в единичный импульс, а отсутствие перехода - идёт как постоянная составляющая, а лучше 0. Дальше всё будет работать
kons
Для выделения тактовой синхронизации из baseband данных обычно использую ФАПЧ со следующим дискриминатором: err[k] = x[k-0.5]*(x[k]-x[k-1]), где x[k] - отсчеты с выхода согласованного фильтра, вычисляемые с удвоенной битовой частотой (отсюда - x[k-0.5]). Кроме того, использовал модификацию этого алгоритма для выделения тактов из комплексного QPSK сигнала, причем до восстановления несущей.
evg123
Цитата(kons @ Sep 18 2006, 12:23) *
Для выделения тактовой синхронизации из baseband данных обычно использую ФАПЧ со следующим дискриминатором: err[k] = x[k-0.5]*(x[k]-x[k-1]), где x[k] - отсчеты с выхода согласованного фильтра, вычисляемые с удвоенной битовой частотой (отсюда - x[k-0.5]). Кроме того, использовал модификацию этого алгоритма для выделения тактов из комплексного QPSK сигнала, причем до восстановления несущей.

Не совсем понятно. Две выборки на бит? Я что-то не догоняю, как это увязать в алгоритм. Можете по-подробней пояснить? В общем-то проблема еще и в том, что сигнал четырехрпозиционный.
kons
Надо определиться, где стоит АЦП.
Если после аналогового согласованного фильтра, то достаточно двух выборок на бит. При этом должна быть возможность двигать фазу выборки (управлять таймером, пускающим АЦП).
Если же согласованный фильтр цифровой, то желательно иметь хотя бы 4 выборки. Фазу можно двигать как управляя таймером, так и интерполируя между выборками
Если выборок > 8...16, то можно двигать фазу дискретно.
В любом случае отсчеты с выхода согласованного фильтра берутся 2 раза за битовый интервал.
Для четырехпозиционного сигнала могу навскидку предложить:
err[k] = (x[k-0.5] - (x[k]+x[k-1])/2)*(x[k]-x[k-1])
или (сигнал должен быть симметричен относительно 0, позиции: -A,-A/3,A/3,A):
err[k] = x[k-0.5]*( abs(x[k]) - abs(x[k-1]) )
kons
Пардон, последнюю строку надо читать:
err[k] = x[k-0.5]*( sign(x[k]) - sign(x[k-1]) )
evg123
Идея понятна. АЦП стоит после согл. фильтра. Это звукоквой АЦП, который кидает 16-бит слова с частотой 44.1 КГц (AD1870) в синхронном последовательном формате. АЦП (по моему) не удасться запускать самому. Он берет сигнал, децимирует его и цифрует и дает поток данных. 9 выборок на символ. четыре символа, гладкая четырехгорбая волна. С частотй 4.8КГц. Но ваш алгоритм хороший. Пока не знаю как его присобачить.
petrov
Вот моделька простенькая для симулинка (7-ой матлаб), там 8-PSK но это не важно для QPSK тоже самое.
fontp
Цитата(petrov @ Sep 19 2006, 14:00) *
Вот моделька простенькая для симулинка (7-ой матлаб), там 8-PSK но это не важно для QPSK тоже самое.


Правда у него типа QFSK. Кроме того последовательные алгоритмы (с ФАПЧ) подходят больше для случая когда есть аппаратная возможность передвигать точку выборки АЦП. Пересчитывать на лету интерполятор не есть очень здорово в смысле быстродействия.
petrov
Цитата(fontp @ Sep 19 2006, 14:12) *
Цитата(petrov @ Sep 19 2006, 14:00) *

Вот моделька простенькая для симулинка (7-ой матлаб), там 8-PSK но это не важно для QPSK тоже самое.


Правда у него типа QFSK


Ну эту модельку 3 секунды переделать на BPSK, QPSK, 8-PSK.....n-PSK. Можно и реализацию такую сделать чтоб на лету можно было менять, дополнительных ресурсов это практически не потребует. ФАПЧ там нету, всё feedforward. В модели отсчёт с выхода согласованного фильтра берётся с точностью до количества отсчётов на символ(в модели 8). Если этого не достаточно можно поставить интерполятор Farrow, он не требует высоких вычислительных затрат, и хорошо работает при условии передискретизации больше чем в 4,5 отсчёта на символ(зависит ещё от коэффициента ската приподнятого косинуса) что как раз выполняется у автора топика.
fontp
Цитата(petrov @ Sep 19 2006, 14:16) *
Цитата(fontp @ Sep 19 2006, 14:12) *

Цитата(petrov @ Sep 19 2006, 14:00) *

Вот моделька простенькая для симулинка (7-ой матлаб), там 8-PSK но это не важно для QPSK тоже самое.


Правда у него типа QFSK


Ну эту модельку 3 секунды переделать на BPSK, QPSK, 8-PSK.....n-PSK. Можно и реализацию такую сделать чтоб на лету можно было менять, дополнительных ресурсов это практически не потребует.


частотная модуляция, не фазовая
petrov
Цитата(fontp @ Sep 19 2006, 14:20) *
Цитата(petrov @ Sep 19 2006, 14:16) *

Цитата(fontp @ Sep 19 2006, 14:12) *

Цитата(petrov @ Sep 19 2006, 14:00) *

Вот моделька простенькая для симулинка (7-ой матлаб), там 8-PSK но это не важно для QPSK тоже самое.


Правда у него типа QFSK


Ну эту модельку 3 секунды переделать на BPSK, QPSK, 8-PSK.....n-PSK. Можно и реализацию такую сделать чтоб на лету можно было менять, дополнительных ресурсов это практически не потребует.


частотная модуляция, не фазовая


Простите действительно о частотной речь идёт, вместо QFSK QPSK померещилось.
kons
Вопрос к evg123: а у вас кодек оцифровывает baseband или последнюю (низкую) ПЧ? Если ПЧ - то могу дать модификацию для QPSK, а если baseband после ограничителя/дискриминатора - то применяйте обычный early-late синхронизатор, все равно "все украдено до нас".
Дискриминатор для такого синхронизатора: err=x[k]*(x[k+1]-x[k-1]), где k - момент принятия решения о символе. Он будет стараться вытащить вас на гребень волны. При 9 отсчетах/бит фазу можно двигать дискретно, без всякого управления АЦП и интерполятора.
А вообще, ФАПЧ алгоритмы требуют меньших ресурсов, но время захвата у них больше, чем у алгоритмов с разомкнутым контуром, особенно в шумах. Так что - все зависит от ваших требований и возможностей...
fontp
Цитата(kons @ Sep 19 2006, 20:06) *
Вопрос к evg123: а у вас кодек оцифровывает baseband или последнюю (низкую) ПЧ? Если ПЧ - то могу дать модификацию для QPSK, а если baseband после ограничителя/дискриминатора - то применяйте обычный early-late синхронизатор, все равно "все украдено до нас".
Дискриминатор для такого синхронизатора: err=x[k]*(x[k+1]-x[k-1]), где k - момент принятия решения о символе. Он будет стараться вытащить вас на гребень волны. При 9 отсчетах/бит фазу можно двигать дискретно, без всякого управления АЦП и интерполятора.
А вообще, ФАПЧ алгоритмы требуют меньших ресурсов, но время захвата у них больше, чем у алгоритмов с разомкнутым контуром, особенно в шумах. Так что - все зависит от ваших требований и возможностей...


Если отсчётов на символ много, то конечно интерполятор не нужен.
Если отсчётов мало - нужен интерполятор, как вариант типа сплайна. Или ещё делают отсчётов много фиксироваными сдвиговыми полифазными фильтрами. Что тоже интерполятор.
evg123
Цитата(kons @ Sep 19 2006, 20:06) *
Вопрос к evg123: а у вас кодек оцифровывает baseband или последнюю (низкую) ПЧ? Если ПЧ - то могу дать модификацию для QPSK, а если baseband после ограничителя/дискриминатора - то применяйте обычный early-late синхронизатор, все равно "все украдено до нас".
Дискриминатор для такого синхронизатора: err=x[k]*(x[k+1]-x[k-1]), где k - момент принятия решения о символе. Он будет стараться вытащить вас на гребень волны. При 9 отсчетах/бит фазу можно двигать дискретно, без всякого управления АЦП и интерполятора.
А вообще, ФАПЧ алгоритмы требуют меньших ресурсов, но время захвата у них больше, чем у алгоритмов с разомкнутым контуром, особенно в шумах. Так что - все зависит от ваших требований и возможностей...

Да. BaseBand. Первая ПЧ - 21МГц идет на вход филипсовской SA625, после которой идет самый что ни наесть BaseBand. Затем идет кодек и DSP (320-5509)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.