Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Дробная интерполяция
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
x67
Доброе время суток!
Помогите чайнику.
Есть QPSK сигнал
Частота дискретизации 500 кГц.
Символьная скорость 182044 Гц.
Нужно произвести демодуляцию (программная реализация).
Использовал за основу схему Петрова(qpsk_fb_symbol_sync_fb_phase_sync_agc_2008_05_15)

По схеме на вход поступает сигнал с частотой дискретизайии в 8 раз превышающей символьную, для отработки на фильтре Фэрроу 3го порядка.
Вопрос в том, что если на мою реализацию этой схему подается сигнал с Fd = nFs(n-целое), то все работает, я интерполирую сигнал, чтобы было 8 Fd, выход четкий как нужно.
Но если, как в приведенных выше услових, т.е. нужна дробная интерполяция, то вылетает полная ерунда.

Я действую так: интерполирую сигнал в три раза(простым добавлением нулей + КИХ фильтр) Fd = 3*500000 = 1500000 Гц
А потом получается нужно получить частоту дискретизации 8*Fs = 8*182044 = 1456352 Гц.
т.е провести децимацию сигнала в 1500000/1456352 = 1,02997 раза.
Я это делаю путем прибавления к выходу схемы Гарднера (-0,02997/8). Это значение идет в фильтр Фэрроу. 8 потому что 8 отсчетов на 1 символ.

Я либо все сильно усложняю, либо чего-то не понимаю, но не пойму что именно.
Помогите разобраться!
des00
почему сразу не сделать приемник на 8.24sps ?
Fast
в схеме выше ерунда получается или в программной реализации ?
x67
Цитата
почему сразу не сделать приемник на 8.24sps ?

Вы имеете в виду почему сразу не интерполировать до нужной частоты дискретизации?
А как это сделать если она дробная?

Цитата(Fast @ May 6 2011, 15:10) *
в схеме выше ерунда получается или в программной реализации ?


Трудно сказать, схема под MatLab работает, но она также работает если выход Гарднера заменить на const 1...
Если вы знаете, то подскажите какой блок нужно поставить в MatLab, чтобы он вносил дополнительно ошибку по времени(тогда проверю работоспособность схемы MatLab)
В любом случае моя реализация работает на сигналах, где нет нужды в дробной интерполяции, значит ошибка должна быть там.

Мне кажется что в место, где нужно провести децимацию в 1,02997 раза, должно быть сделано по другому, но я не знаю как!
И гугл ничего не подсказывает.
Fast
по матлабу не подскажу, делаю всегда и модели и прототипы на C/C++
фарроу 3 порядка не использую, т.к. он себя плохо ведет на малых кратностях sps
особенно, если сигнал компактно сформирован с малым roll-off. Не хватает ему полосы.
использую классический Лагранж 6-8 порядка, и 4 отсчета на посылку.

Но децимацию провожу ДО схемы восстановления тактовой синхронизации
т.е. dI = 1,02997 это всегда постоянное соотношение для дробной интерполяции с Fd => Fd` = N*Vm
а ошибка со схемы тактовой dT (умноженная на какой-то Gain) - переменная - прибавляется dI с частотой следования символов Vm

и честно говоря, судя по тому, как описана проблема, даже не понимаю, где может быть косяк в вашей схеме
x67
Цитата(Fast @ May 6 2011, 23:15) *
использую классический Лагранж 6-8 порядка, и 4 отсчета на посылку.

А не подскажите книгу хорошую где про них можно почитать? Если с ссылкой так и вовсе сказка)
А для чего нужна схема Годарда? Так и не нашел нигде вразумительного источника...
Student21
Вообще сказака вот dsplib.ru
там найдёте фильтры Фарроу.
des00
Цитата(x67 @ May 6 2011, 12:09) *
А как это сделать если она дробная?

взять дробный NCO и все.


Цитата(Fast @ May 6 2011, 14:15) *
Но децимацию провожу ДО схемы восстановления тактовой синхронизации

т.е фактически вы используете схему с двойным преобразованием частоты. например для 8.24 спс, вы сначала делаете интерполяцию на 1.24 на не подстраиваемом NCO, а потом делаете 8спс уже в петле ОС?

в таком случае вам требуется в 2 раза больше ресурса, два интерполятора и два NCO. В софтовой реализации это не принципиально, а вот в хардварной...
x67
Цитата(des00 @ May 9 2011, 21:38) *
взять дробный NCO и все.

А можно поподробней?


des00
Цитата(x67 @ May 9 2011, 14:38) *
А можно поподробней?

Куда еще то подробнее? вы же разобрались с принципом работы цифрового восстановления тактовой частоты, в модели петрова изучили как работает целочисленный NCO, осталось сделать один маленький шаг что бы сделать его дробным %)
Fast
Цитата(x67 @ May 9 2011, 19:36) *
А не подскажите книгу хорошую где про них можно почитать? Если с ссылкой так и вовсе сказка)
А для чего нужна схема Годарда? Так и не нашел нигде вразумительного источника...
в разных книгах его встречал, а чтоб именно про лагранжа книга была такого не видел
возьмите википедию или здесь, внизу есть ссылки на книги

схема Годарда используется для начальной слепой настройки корректора. Наберите в гугле "Godard blind equalization"


Цитата(des00 @ May 9 2011, 22:38) *
т.е фактически вы используете схему с двойным преобразованием частоты. например для 8.24 спс, вы сначала делаете интерполяцию на 1.24 на не подстраиваемом NCO, а потом делаете 8спс уже в петле ОС?
а что такое 8.24 и 1.24 ?

у NCO два слагаемого,
первое - постоянное дробное, условно dI, чтобы интерполировать на кратную частоту следования символов.
второе - переменное с выхода схемы тактовой синхронизации dT, поправка для dI. Не знаю, как еще по-другому объяснить.


p.s. -----------------------
да, у меня еще такой вопрос, отчего на Электрониксе все так любит схему Гарднера для тактовой синхронизации, очень часто встречаю, что ее используют в своих моделях ?
В свое время мне пришлось от нее отказаться из-за нестабильного поведения на плохих каналах: с большим МСИ, неравномерностью/завалом АЧХ. Очень высокий шум (джиттер) по выходу получался, может чего не доработал... На хороших каналах, естественно, все гуд.
des00
Цитата(Fast @ May 10 2011, 05:57) *
а что такое 8.24 и 1.24 ?

соотношение тактовой и символьной частоты. 8.24sample per symbol это тактовая частота сигнала в 8.24 раза выше символьной, фактически коэффициент преобразования частоты.

Цитата
у NCO два слагаемого,
первое - постоянное дробное, условно dI, чтобы интерполировать на кратную частоту следования символов.
второе - переменное с выхода схемы тактовой синхронизации dT, поправка для dI. Не знаю, как еще по-другому объяснить.

хмм, может я не правильно что то говорю. вот положим есть демодулятор на нуле с частотой АЦП 8.24спс. Есть два варианта его сделать :
1. Поставить один интерполятор + один NCO с петлей по тактовой, настроить их на 8.24спс и работать.
2. Поставить интерполятор + один NCO вне петли по тактовой, на нем выполнить преобразование 8.24спс в 8спс. Затем поставить еще один интерполятор + один NCO с петлей по тактовой, настроенной на 8спс.

или я не правильно понял вашу фразу laughing.gif
Цитата
Но децимацию провожу ДО схемы восстановления тактовой синхронизации


Кстати проверял лагранжа 3 го порядка (по схеме фарроу), при 4спс уже можно работать, при 6-8 все намного лучше, а начиная с 10-16 ти можно забыть про нелинейности wink.gif

Цитата
да, у меня еще такой вопрос, отчего на Электрониксе все так любит схему Гарднера для тактовой синхронизации, очень часто встречаю, что ее используют в своих моделях ?
В свое время мне пришлось от нее отказаться из-за нестабильного поведения на плохих каналах: с большим МСИ, неравномерностью/завалом АЧХ. Очень высокий шум (джиттер) по выходу получался, может чего не доработал... На хороших каналах, естественно, все гуд.

схема очень простая вот и все %) а на какую схему вы перешли ?

я кстати проверял гарднера + Tanlock на QPSK нормально работает при отношении сигнал шум 6-8дБ и канале с бегающим спектральным нулем в -20дБ (при работающем эквалайзере)
Fast
Цитата(des00 @ May 10 2011, 15:39) *
хмм, может я не правильно что то говорю. вот положим есть демодулятор на нуле с частотой АЦП 8.24спс. Есть два варианта его сделать :
1. Поставить один интерполятор + один NCO с петлей по тактовой, настроить их на 8.24спс и работать.
2. Поставить интерполятор + один NCO вне петли по тактовой, на нем выполнить преобразование 8.24спс в 8спс. Затем поставить еще один интерполятор + один NCO с петлей по тактовой, настроенной на 8спс.
конечно первый вариант, второй не имеет практического смысла. Петля по тактовой дает "прибавку" для дробного NCO.

Цитата(des00 @ May 10 2011, 15:39) *
Кстати проверял лагранжа 3 го порядка (по схеме фарроу), при 4спс уже можно работать, при 6-8 все намного лучше, а начиная с 10-16 ти можно забыть про нелинейности wink.gif
зависит от сигнала и характера искажений/ошибок в канале. С небольшой крутизной огибающей спектра и хорошим SNR можно работать и 2 отсчета на посылку для 3-фарроу, лишь бы выполнялось условие Найквиста для полосы обрабатываемого сигнала и АЧХ фарроу не искажала АЧХ сигнала.

кстати, какие там нелинейности? 3-порядка Фарроу это всего лишь одна из форм реализации 4-узлов Лагранжа. Лагранж это КИХ-фильтр, линейная схема (если не учитывать эффекты квантования и дискретности окна интерполяции).

Цитата(des00 @ May 10 2011, 15:39) *
схема очень простая вот и все %) а на какую схему вы перешли ?
я кстати проверял гарднера + Tanlock на QPSK нормально работает при отношении сигнал шум 6-8дБ и канале с бегающим спектральным нулем в -20дБ (при работающем эквалайзере)
сигнал реальный или модель ?
я работал с позиционностями КАМ в нескольких сотен, там очень чувствуются МСИ и нестабильность опорного гетеродина (смесителя). На предельных SNR пришлось накручивать "кустарные" схемы выделения модуляционной частоты из спектра огибающей (+ PLL к ней для петли ОС) в сочетании со слежением точного пика корректора. И корректор, и петля ФАПЧ работали от общей схемы по решению. Недостаток - узкая полоса захвата, поэтому схема использовалась для установившегося режима без переходных процессов.
des00
Цитата(Fast @ May 10 2011, 08:31) *
зависит от сигнала и характера искажений/ошибок в канале. С небольшой крутизной огибающей спектра и хорошим SNR можно работать и 2 отсчета на посылку для 3-фарроу, лишь бы выполнялось условие Найквиста для полосы обрабатываемого сигнала и АЧХ фарроу не искажала АЧХ сигнала.

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

Цитата
кстати, какие там нелинейности? 3-порядка Фарроу это всего лишь одна из форм реализации 4-узлов Лагранжа. Лагранж это КИХ-фильтр, линейная схема (если не учитывать эффекты квантования и дискретности окна интерполяции).

нелинейности вызванные тем, что АЧХ фарроу постоянно при постоянном mu, но нелинейна при переменном mu. В реальности тактовые генераторы передатчика приемника всегда плывут, и mu скачет. так что.... (mu - дробная ошибка)

Цитата
сигнал реальный или модель ?

реальный модем, на реальном железе.

Цитата
я работал с позиционностями КАМ в нескольких сотен, там очень чувствуются МСИ и нестабильность опорного гетеродина (смесителя)....

это же какое нужно генераторное оборудование что бы запихать хотя бы КАМ512/КАМ1024 в радиоканал rolleyes.gif по остальному понятно
x67
Цитата(des00 @ May 10 2011, 04:40) *
Куда еще то подробнее? вы же разобрались с принципом работы цифрового восстановления тактовой частоты, в модели петрова изучили как работает целочисленный NCO, осталось сделать один маленький шаг что бы сделать его дробным %)

Или я чего-то не понимаю, или поправьте меня)
1. Целочисленная интерполяция - добавляем нулевые отсчеты и подаем на КИХ фильтр
2. Дробная реализуется через схему фэрроу, которая собой представляет тоже КИХ фильтр.
Значит нужно Фэрроу поставит вместо фильтра в первом случае, я правильно ответил на свой вопрос???)))

Цитата(Fast @ May 10 2011, 13:57) *
в разных книгах его встречал, а чтоб именно про лагранжа книга была такого не видел
возьмите википедию или здесь, внизу есть ссылки на книги

схема Годарда используется для начальной слепой настройки корректора. Наберите в гугле "Godard blind equalization"


Спасибо за ссылочки, особенно за Годарада, почитаю))
Лагранж на dsplib все же доступней, попробую просто сделать не 3-го порядка а 6, и посмотреть как себя поведет модель.
Fast
Цитата(des00 @ May 10 2011, 19:19) *
имхо 2спс и фарроу расчитанный по лагранжу не айс. лучше сделать поднять частоту дискретизации в 2 раза, если есть возможность.
поддерживаю, или поставить полифазник, если нельзя поднять частоту, будет лучше.
Цитата(des00 @ May 10 2011, 19:19) *
нелинейности вызванные тем, что АЧХ фарроу постоянно при постоянном mu, но нелинейна при переменном mu. В реальности тактовые генераторы передатчика приемника всегда плывут, и mu скачет. так что.... (mu - дробная ошибка)
понятно теперь, что имелось в виду. джиттеры, девиация Аллана и переходные процессы схем восстановления нелинейно отображаются на полезный сигнал. Это действительно самая дрянь
x67
Доброе время суток.
Тут возникла такая интересная ситуация с интерполятором Фэрроу, даже не знаю что происходит.
Использовал схему Петрова для QPSK feedback демодуляции.
Все работает. все супер, решил удвоить количество отсчетов на такт. (было 2 изначально и 8 после интерполяции, должно было стать 16 с соответствующим пересчетом коэффициентов фильтра Фэрроу.)
Однако в ходе выяснилось, что из-за моей ошибки фильтр Фэрроу не участвовал в обработке. т.е схема Гарднера отрабатывала, но данные проходили мимо фильтра сразу на блок децимации (тоже управляемый выходом Гарднера, как на схеме)
и при этом все работало, и продолжает работать, проблема в том, что после подключения фильтра Фэрроу ничего не изменилось (т.е. визуально картина не стала ни лучше ни хуже)
В симулинке на аналогичной схеме Петрова для 16QAM вырезал фильтр Фэрроу и вместо него просто поставил линию задержки на 2 отсчета. (ню убрал в заглушку) и... ничего не изменилось, т.ею схеиа осталась рабочей.

Насколько я понимаю, схема Гарднера просто позволяет выбрать лучший из 8 отсчетов и просто замыкает схему, как раз на нем, но я не понимаю, почему при подключении собственно фильтра Фэрроу на сигнале никакого воздействия не заметно...

Буду благодарен за любые мысли по этому поводу.
des00
модельку бы увидеть + вы случайно не отключили в модели введение ошибки по тактовой частоте?
x67
Цитата(des00 @ Jul 14 2011, 08:40) *
модельку бы увидеть + вы случайно не отключили в модели введение ошибки по тактовой частоте?


Ничего более не трогал, кроме того свой демодулятор я проверял на реальных сигналах, там ошибку не отключишь.
Ссылки на модельки есть на форуме, сейчас просто нет времени искать, если не возражаете завтра найду ссылку)
MKS
Цитата(x67 @ Jul 13 2011, 23:46) *
Доброе время суток.
Тут возникла такая интересная ситуация с интерполятором Фэрроу, даже не знаю что происходит.
Использовал схему Петрова для QPSK feedback демодуляции.
Все работает. все супер, решил удвоить количество отсчетов на такт. (было 2 изначально и 8 после интерполяции, должно было стать 16 с соответствующим пересчетом коэффициентов фильтра Фэрроу.)
Однако в ходе выяснилось, что из-за моей ошибки фильтр Фэрроу не участвовал в обработке. т.е схема Гарднера отрабатывала, но данные проходили мимо фильтра сразу на блок децимации (тоже управляемый выходом Гарднера, как на схеме)
и при этом все работало, и продолжает работать, проблема в том, что после подключения фильтра Фэрроу ничего не изменилось (т.е. визуально картина не стала ни лучше ни хуже)
В симулинке на аналогичной схеме Петрова для 16QAM вырезал фильтр Фэрроу и вместо него просто поставил линию задержки на 2 отсчета. (ню убрал в заглушку) и... ничего не изменилось, т.ею схеиа осталась рабочей.

Насколько я понимаю, схема Гарднера просто позволяет выбрать лучший из 8 отсчетов и просто замыкает схему, как раз на нем, но я не понимаю, почему при подключении собственно фильтра Фэрроу на сигнале никакого воздействия не заметно...

Буду благодарен за любые мысли по этому поводу.
Возможно при большем количестве отсчётов (16) вы просто не видите разницу между взятием отсчёта в оптимальный момент времени или с небольшой ошибкой (когда сигнал не проходит через интерполятор). В моделях Петрова насколько помню коэффициент скругления близок к 1, что ещё больше нивелирует разницу. Попробуйте поставить roll-off = 0.2 или 0.15 к примеру, если я прав, то скорее всего вы увидите разницу. Теоретически если у вас NCO без интерполятора то двигать фазу вы можете не точнее чем 1/4, 1/8 или 1/16 от символа (если NCO работает соответственно на 4, 8 или 16 отсчётах на символ). Наличие интерполятора позволяет двигать фазу между отсчётами. Да и ещё по модели, возможно там нет отстройки по тактовой частоте, а разность фаз кратна количеству отсчётов на символ поэтому разницы и не видно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.