petrov 7 8 декабря, 2008 Опубликовано 8 декабря, 2008 · Жалоба К вопросу о синхронизации, наткнулся на статью A robust timing and frequency offset estimation OFDM. Там описан процесс синхронизации, без использования pilot тонов, а точнее процесс оценки ошибки временного ухода (timing offset) и частотного (frequency offset), что в принципе и необходимо для схемы синхронизации. Сама статейка очень маленькая, из того что там видно, они симулируют запаздывание, например на 1 отсчёт и строят сигнальные созвездия до запаздывания и после(возводят сигнал в 4 степень). В итоге получают сигнальное созвездие (4th poweк constellation) с одной точкой. И по нему оценивают ошибку. Попытался смоделировать это в Matlab'e но ничего подобного получить не смог. Вот например 1 рисунок Figure 3 - Transmit tone phase vs. tone number - который отображает сигнал без задержки и с задержкой в 1 отсчёт (картинка получается с явным наклоном, т.е. как бы поворачивается) - у меня такого не наблюдалось! Возможно я что-то не понял, поэтому прошу помощи, если кто-то знает подобный алгоритм или у кого есть более подробный документ, где можно почитать про данный алгоритм оценки, буду очень признателен за помощь! Вот вам пример симулинк модель подобной синхронизации: http://electronix.ru/forum/index.php?s=&am...st&p=513268 Там правда не OFDM а FMT, но в данном случае не имеет значения, в FMT поднесущие не перекрываются, нету ICI, нет нужды в защитном интервале. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dub01 0 10 декабря, 2008 Опубликовано 10 декабря, 2008 · Жалоба Вот вам пример симулинк модель подобной синхронизации: http://electronix.ru/forum/index.php?s=&am...st&p=513268 Там правда не OFDM а FMT, но в данном случае не имеет значения, в FMT поднесущие не перекрываются, нету ICI, нет нужды в защитном интервале. Спасибо за отличную модельку! Я посмотрел её, но честно сказать она у Вас построена не потому алгоритму, про который указывалось в статье... Например того же возведения в 4 степень у Вас я нигде не нашёл. Я не специалист в simulink'е, поэтому если мои вопросы покажутся смешными, прошу извинить: 1)Во-первых, поясните пожалуйста почему и для чего Вы чуть ли не в каждом блоке ставите цифровой синтезатор частоты (NCO)? Он присутствует в блоке fmt_modulator, на главной схеме, далее внутри блока two_sps_clock_domain2, в polyphase_FIR_filter, а также в two_sps_clock_domain. Скажите как они связаны между собой и на каких частотах функционируют? Я выполнил цветовую маркировку блоков (Format-Port/Signal Displays -> Sample Time Colors) и у меня вся схема была одного цвета( Это нормально? У Вас ведь столько стробирующих синтезаторов! 2)Во-вторых, поясните как Вы реализовали полифазный фильтр. Пользуюсь описанием http://www.tsi.lv/RSR/vol03/RSR1999v03-10.pdf я с трудом смог сопоставить с Вашей реализацией. На входе как я понял [576x1] блок данных, далее этот блок преобразуется в 2х мерную матрицу [36x16], затем транспонирование в [16x36] параллельно заводится похожая линия ИХ канала. Всё это перемножается и получается некий новый блок данных [16x36]. А вот далее у Вас идёт блок Select Columns (Выбор столбцов). Объясните по какому критерию идёт отбор? ({1:4, 5:32, 33:36} - почему именно так?) В результате получаем кстате уже [16x32] блок данных, т.е. 4 строчки отсеяли... Там ещё у Вас усилитель с коэф. усиления = 1 - какой смысл этого элемента? 3)Как я понял, Ваша моделька - эмуляция 12 канальной системы. Синхронизация осуществляется по схеме Гарднера. Поэкспериментировав с параметрами phase offset & frequency offset пришёл к выводу что схема довольно точно подстраивается по частоте, но при значении 1/2^3 Гц она очень долго отрабатывала. Есть ли какие-нибудь предложения по модификации или доработки текущей модели с целью увеличения производительности и запаса по задержкам (phase offset & frequency offset)? Автокорреляция в OFDM во временной области не эффективна - очень широкий и не выраженный пик. Лучше детектить преамбулу путем автокорреляции в частотной области - точнее автокоррелировать амплитуды поднесущих с амлитудой пилотов в преамбуле. Это позволить задетектировать преамбулу в плюс-минус guard-интервале. Дальнейшее надо предоставить эквалайзеру. Я как раз реализовал синхронизацию во временной области, по средствам автокорреляции циклического префикса. Действительно пики достаточно широкие, но по ним можно с погрешностью +-3 отсчёта засинхронизироваться. Ну а для совсем точной синхронизации можно рассмотреть модельку господина petrov'a, с которой я потихоньку стараюсь разобраться. Что касается Вашего предложения синхронизоваться по преамбуле, то тут нужно сказать что не во всех сигналах она присутствует, точно также как и пилот-тон , а циклический префикс используется почти всегда (кстате он специально предназначался не только для борьбы с замираниями в каналах и с МСИ, но и для частотной и временной синхронизации). Хотя не буду спорить, возможно если есть преамбула или пилот, то по ним проще и лучше синхронизироваться. У Вас есть какие-нибудь результаты? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 11 декабря, 2008 Опубликовано 11 декабря, 2008 · Жалоба Спасибо за отличную модельку! Я посмотрел её, но честно сказать она у Вас построена не потому алгоритму, про который указывалось в статье... Например того же возведения в 4 степень у Вас я нигде не нашёл. Возведение в четвёртую степень это умножение фазы на 4, смотрите в блоке phase_sync. Не забывайте что метод возведения в четвёртую степень работает только для QPSK. Я не специалист в simulink'е, поэтому если мои вопросы покажутся смешными, прошу извинить: 1)Во-первых, поясните пожалуйста почему и для чего Вы чуть ли не в каждом блоке ставите цифровой синтезатор частоты (NCO)? Он присутствует в блоке fmt_modulator, на главной схеме, далее внутри блока two_sps_clock_domain2, в polyphase_FIR_filter, а также в two_sps_clock_domain. Скажите как они связаны между собой и на каких частотах функционируют? NCO просто базовый элемент в алгоритмах синхронизации. На главной странице NCO работает на фиксированной частоте 6 блоков отсчётов на символ(6 отсчётов нужно для того чтобы интерполятор farrow не искажал сигнал), two_sps_clock_domain на частоте два отсчёта на символ но уже синхронно с частотой символов(2 отсчёта нужно для детектора временной ошибки Гарднера), внутри последний тайм домен работает с частотой одного отсчёта на символ(там и вычисляются все алгоритмы синхронизации). В полифазном фильтре NCO нужен для перестановки элементов матрицы в соответствии с принципом работы некритически семплированного банка фильтров. Я выполнил цветовую маркировку блоков (Format-Port/Signal Displays -> Sample Time Colors) и у меня вся схема была одного цвета( Это нормально? У Вас ведь столько стробирующих синтезаторов! Это как вам понравится. :) 2)Во-вторых, поясните как Вы реализовали полифазный фильтр. Пользуюсь описанием http://www.tsi.lv/RSR/vol03/RSR1999v03-10.pdf я с трудом смог сопоставить с Вашей реализацией. Вот почитайте вводную статью и неплохую диссертацию по FMT: http://www.comsoc.org/ci/private/2000/may/pdf/olcer.pdf http://www.cl.cam.ac.uk/research/dtg/publi...s286/thesis.pdf На входе как я понял [576x1] блок данных, далее этот блок преобразуется в 2х мерную матрицу [36x16], затем транспонирование в [16x36] параллельно заводится похожая линия ИХ канала. Всё это перемножается и получается некий новый блок данных [16x36]. А вот далее у Вас идёт блок Select Columns (Выбор столбцов). Объясните по какому критерию идёт отбор? ({1:4, 5:32, 33:36} - почему именно так?) В результате получаем кстате уже [16x32] блок данных, т.е. 4 строчки отсеяли... Тут сложно в рамках форума подробно описать. Ведь по сути это 12 каналов обычного QPSK, их можно традиционным способом сформировать и демодулировать, но если внимательно в матричном виде расписать групповую обработку то становится очевидно что можно гетеродины заменить на FFT, поменять местами FFT и полифазные фильтры, точнее вообще один полифазный фильтр останется на все каналы. Причём для простоты понимания можно вообще 4 или 8 каналов рассмотреть и коротенький полифазный фильтр, для начала лучше критически семплированный банк фильтров взять. Там ещё у Вас усилитель с коэф. усиления = 1 - какой смысл этого элемента? Нету никакого смысла. :) 3)Как я понял, Ваша моделька - эмуляция 12 канальной системы. Синхронизация осуществляется по схеме Гарднера. Поэкспериментировав с параметрами phase offset & frequency offset пришёл к выводу что схема довольно точно подстраивается по частоте, но при значении 1/2^3 Гц она очень долго отрабатывала. Есть ли какие-нибудь предложения по модификации или доработки текущей модели с целью увеличения производительности и запаса по задержкам (phase offset & frequency offset)? По схеме гарднера осуществляется только символьная синхронизация. Фазовая как раз по принципу описанному в вашей статье. Вы заметили наверно что в литературе разделяют две фазы синхронизации acquisition и tracking, так вот по частоте в модели это tracking, если нехватает полосы захвата или слишком долго настраивается ищите другие методы типа acquisition. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leshii 0 11 декабря, 2008 Опубликовано 11 декабря, 2008 · Жалоба NCO просто базовый элемент в алгоритмах синхронизации. На главной странице NCO работает на фиксированной частоте 6 блоков отсчётов на символ(6 отсчётов нужно для того чтобы интерполятор farrow не искажал сигнал), two_sps_clock_domain на частоте два отсчёта на символ но уже синхронно с частотой символов(2 отсчёта нужно для детектора временной ошибки Гарднера), внутри последний тайм домен работает с частотой одного отсчёта на символ(там и вычисляются все алгоритмы синхронизации). В полифазном фильтре NCO нужен для перестановки элементов матрицы в соответствии с принципом работы некритически семплированного банка фильтров. Если у Вас NCO работают на разных частотах, то почему подсветка соединительных линий по признаку скорости оказывается одинаковой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 11 декабря, 2008 Опубликовано 11 декабря, 2008 · Жалоба Если у Вас NCO работают на разных частотах, то почему подсветка соединительных линий по признаку скорости оказывается одинаковой? Вы на FPGA не разрабатывали ничего? Когда все цифровая схема работает на одной тактовой частоте(аналог sample time в симулинке), а работа частей схемы на более низкой частоте реализуется через enable триггеров. Под частотой в модели я имел ввиду частоту разрешения(enable) вычислений на каком то тактовом интервале(sample time). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leshii 0 11 декабря, 2008 Опубликовано 11 декабря, 2008 (изменено) · Жалоба Не могли бы Вы все таки немного подробнее разъяснить нюансы синхронизации симулинковской модели, а то от всевозможных sample time голова кругом идет. 1. sample time всей модели или задающий такт где определяется и чему равен? Не 1/36 как в модуле unit delay (fmt_modulator)? 2. С выхода NCO (fmt_modulator) мы получаем 1 импульс на 36 входных тактов? Почему содержимое выходов sel и underflow идентично? В чем смысл тогда двух выходов, можно же было через один? 3. В блоке baud_clock_domain перед ifft почему используется vert cat, а не буфер?, и в чем смысл добавления 20 нулей? 4. На выходе polyphase_FIR_filter вместо блоков по 32 отсчета появляются блоки по 36 отсчетов, с чем связано такое преобразование? 5. Что дает блок signal specification с принудительным указанием sample time?, вроде раньше 1/36 уже задавалась? 6. В чем суть задания на стороне передатчика задержки на 23 такта модели? 7. В блоке awgn channel зачем опять указывать symbols period, мы же вроде предыдущими действиями и так это определили? И в итоге в конце концов какие соотношения частот работы модели (общего тактового генератора), символьной и битовой оказываются? С плисами пока не работал. Изменено 11 декабря, 2008 пользователем Leshii Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitrmax 0 11 декабря, 2008 Опубликовано 11 декабря, 2008 · Жалоба Я как раз реализовал синхронизацию во временной области, по средствам автокорреляции циклического префикса. Действительно пики достаточно широкие, но по ним можно с погрешностью +-3 отсчёта засинхронизироваться. Ну а для совсем точной синхронизации можно рассмотреть модельку господина petrov'a, с которой я потихоньку стараюсь разобраться. Все дело в том, что схема описаная в статье применима только в том случае, когда ты точно знаешь, что в этом месте есть нужные тебе сигнал. Она будет давать мягко говоря странные результаты, если её применить к шуму. А вот чтобы просто обнаружить OFDM нужно использовать другие методы. Это можно делать разными методами, но корреляция в частотной области мне кажестя наиболее эффективной. Что касается Вашего предложения синхронизоваться по преамбуле, то тут нужно сказать что не во всех сигналах она присутствует, точно также как и пилот-тон , а циклический префикс используется почти всегда (кстате он специально предназначался не только для борьбы с замираниями в каналах и с МСИ, но и для частотной и временной синхронизации). Хотя не буду спорить, возможно если есть преамбула или пилот, то по ним проще и лучше синхронизироваться. У Вас есть какие-нибудь результаты? В реализациях OFDM я ещё не встречал сигналов без преамбулы. Все дело в том, что вы не можете засинхронизироваться точнее чем в отсчет. А промах на t, где 0 <= t < 1/Fs, то есть меньше отсчета, приводит к тому, что фаза n-ой поднесущей убегает относительно фазы 1-ой поднесущей на n*delta_w*t , где delta_w - разнос между двумя соседними поднесущими. То есть фаза у самой высокочастотной поднесущей убежит на довольно большую величину вплоть до Pi. А ваше сигнальное созведие превратится в нечто, что я называю "веером". Такие вещи может и должен исправлять эквалайзер, который строится по заранее известному сигналу, т.е. преамбуле. Что касается статьи - авторы предлагают использовать QPSK манипуляцию для фаз поднесущих. Этот же метод будет работать для BPSK и других фазовых манипуляциях. Однако, например, манипулированный 64-QAM сигнал очень сложно подстраивать, используя такой метод и отказавшись от пилотов. Поэтому и в WiFi и в WiMax они (пилоты) есть. А в IEEE рабоают не дураки (хотя иной раз начинаешь в этом сомниваться). Результат у меня есть в виде работающего кода приема 802.11g. Коллега делал для меня модель в матлабе, но скажем так, в ней будет трудно разобраться непосвещенному :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex65111 0 11 декабря, 2008 Опубликовано 11 декабря, 2008 (изменено) · Жалоба Все дело в том, что схема описаная в статье применима только в том случае, когда ты точно знаешь, что в этом месте есть нужные тебе сигнал. Она будет давать мягко говоря странные результаты, если её применить к шуму. А вот чтобы просто обнаружить OFDM нужно использовать другие методы. Это можно делать разными методами, но корреляция в частотной области мне кажестя наиболее эффективной. Так вроде процессы обнаружения и синхронизации это разные вещи. Разговор идет про синхронизацию, т.е. работа идет не с шумом, а с сигналом. А чем отличается процесс обнаружения ОФДМ от обычного однотонального сигнала?, и в чем суть корреляции в частотной области?, будет разница для однотонального и ОФДМ? В реализациях OFDM я ещё не встречал сигналов без преамбулы так вроде у Петрова и без преамбулы и без префикса все получается? Изменено 11 декабря, 2008 пользователем Alex65111 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 11 декабря, 2008 Опубликовано 11 декабря, 2008 (изменено) · Жалоба Не могли бы Вы все таки немного подробнее разъяснить нюансы синхронизации симулинковской модели, а то от всевозможных sample time голова кругом идет. 1. sample time всей модели или задающий такт где определяется и чему равен? Не 1/36 как в модуле unit delay (fmt_modulator)? Да sample time = 1/36 задаётся в unit delay. 2. С выхода NCO (fmt_modulator) мы получаем 1 импульс на 36 входных тактов? Почему содержимое выходов sel и underflow идентично? В чем смысл тогда двух выходов, можно же было через один? Да на 36 тактовых импульсов мы получаем один enable по которому формируется новый символ QPSK во всех поднесущих. Cодержимое выходов sel и underflow не идентично, sel это индекс который используется для мультиплексирования соответствующего отсчёта с выхода синтезирующего банка фильтров(читайте статью которую выше приводил). 3. В блоке baud_clock_domain перед ifft почему используется vert cat, а не буфер?, и в чем смысл добавления 20 нулей? Поднесущие формируются параллельно 1 раз за 36 отсчётов, это можно сделать и последовательно в реальной реализации, но цель этой модели понимание. Цель 20 нулей в том чтобы полученный сигнал имел передискретизацию например для простоты последующей интерполяции или простоты аналогового фильтра после ЦАПа, можете уменьшить количество нулей и добавить ещё модулированных поднесущих и увидите это на спектрограмме. 4. На выходе polyphase_FIR_filter вместо блоков по 32 отсчета появляются блоки по 36 отсчетов, с чем связано такое преобразование? С тем что это не критически семплированный банк фильтров в отличие от OFDM, символ длится 36 отсчётов или 1 секунда хотя расстояние между поднесущими 36/32=1,125 Гц, поднесущие раcположены чуть дальше друг от друга чем в случае OFDM и имеют более узкий спектр за счёт сглаживания импульсной характеристикой приподнятого косинуса c коэффициентом ската 36/32-1=0.125, длящейся 16 символов, за счёт этого поднесущие имеют большое подавление за пределами своей полосы в отличие от OFDM, ICI в принципе отсутствует(опять же читайте статью). 5. Что дает блок signal specification с принудительным указанием sample time?, вроде раньше 1/36 уже задавалась? Это симулинковские заморочки, можете удалить будет просто очень медленно работать, не видит он корректно семпл тайм что-то там нарушается в симуляции, этим блоком принудительно семпл тайм задаётся. 6. В чем суть задания на стороне передатчика задержки на 23 такта модели? Это сдвиг между начальными фазами символьных генераторов передатчика и приёмника, 23 самый плохой случай когда они на половину символьного интервала сдвинуты, поставьте к примеру 23-36/2=5 и не будет переходного процесса символьной ФАПЧ. 7. В блоке awgn channel зачем опять указывать symbols period, мы же вроде предыдущими действиями и так это определили? Блок awgn просто прибавляет белый шум, он не знает что вы подразумеваете под сигналом который через него проходит, для того чтобы он прибавил шум соответствующий определённому Eb/N0 ему в том числе нужно знать длительность символа. И в итоге в конце концов какие соотношения частот работы модели (общего тактового генератора), символьной и битовой оказываются? Надеюсь что выше ответил на этот вопрос, в любом случае читайте внимательней статью и диссертацию. так вроде у Петрова и без преамбулы и без префикса все получается? Это не совсем OFDM, родственная модуляция, скорее дальнейшее развитие OFDM, и это не полноценный модем а какая-то часть небольшая. В реальности для больших расстроек тоже может потребоваться преамбула. Изменено 11 декабря, 2008 пользователем petrov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex_os 0 11 декабря, 2008 Опубликовано 11 декабря, 2008 · Жалоба В реализациях OFDM я ещё не встречал сигналов без преамбулы. Все дело в том, что вы не можете засинхронизироваться точнее чем в отсчет. А промах на t, где 0 <= t < 1/Fs, то есть меньше отсчета, приводит к тому, что фаза n-ой поднесущей убегает относительно фазы 1-ой поднесущей на n*delta_w*t , где delta_w - разнос между двумя соседними поднесущими. То есть фаза у самой высокочастотной поднесущей убежит на довольно большую величину вплоть до Pi. А ваше сигнальное созведие превратится в нечто, что я называю "веером". Такие вещи может и должен исправлять эквалайзер, который строится по заранее известному сигналу, т.е. преамбуле. Вы конечно правы на 100%, но кажется Dub01 делает 39 tones parallel modem (mil-std-188-110b), а там дифференциальная модуляция, так что на прецизионную синхронизацию с точностью до фазы несущей можно забить и использовать простейший дифференциальный демодулятор (который тупо вычисляет разность фазы между последовательными символами) в каждом подканале, естественно будет некоторая потеря помехоустойчивости. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leshii 0 12 декабря, 2008 Опубликовано 12 декабря, 2008 · Жалоба petrov Предположим имеются биты b1,b2…b16. Необходимо их передать на 4х поднесущих при помощи QPSK. Первый вариант развития событий (рисунок 3 статьи). Формируем пары и отображаем в комплексной плоскости - x1=(b1,b2), x2=(b3,b4), x3=(b5,b6), x4=(b7,b8), x5=(b9,b10), x6=(b11,b12), x7=(b13,b14), x8=(b15,b16). Формируем последовательность столбцов – (x1 x2 x3 x4), (x5 x6 x7 x8), каждую строчку множим на комплексную экспоненту своей частоты, первую на f1, вторую на f2, третью на f3, четвертую на f4. В итоге в момент времени t1 на выходе будет x1*exp(2*pi*f1*t1)+ x2*exp(2*pi*f2*t1)+ x3*exp(2*pi*f3*t1)+ x4*exp(2*pi*f4*t1), в момент времени t2 будет x5*exp(2*pi*f1*t2)+ x6*exp(2*pi*f2*t2)+ x7*exp(2*pi*f3*t2)+ x8*exp(2*pi*f4*t2). Второй вариант развития событий (рисунок 4 статьи). Все то же самое до процесса умножения на комплексные экспоненты, т.е. также формируем x1,x2,…,x8, а затем подаем их на idft, а затем из параллельного выхода разворачиваем их в последовательный выход. Если расскрыть процесс idft, то вроде получается следующее Для передачи столбца (x1 x2 x3 x4) Y1=x1*exp(2*pi*f1*t1’)+ x2*exp(2*pi*f1*t1’’)+ x3*exp(2*pi*f1*t1’’’)+ x4*exp(2*pi*f1*t1’’’’) Y2=x1*exp(2*pi*f2*t1’)+ x2*exp(2*pi*f2*t1’’)+ x3*exp(2*pi*f2*t1’’’)+ x4*exp(2*pi*f2*t1’’’’) Y3=x1*exp(2*pi*f3*t1’)+ x2*exp(2*pi*f3*t1’’)+ x3*exp(2*pi*f3*t1’’’)+ x4*exp(2*pi*f3*t1’’’’) Y4=x1*exp(2*pi*f4*t1’)+ x2*exp(2*pi*f4*t1’’)+ x3*exp(2*pi*f4*t1’’’)+ x4*exp(2*pi*f4*t1’’’’) И когда развернем получится Y1 Y2 Y3 Y4, и далее для передачи другого столбца (x5 x6 x7 x8) получится Y5 Y6 Y7 Y8. В итоге по первому варианту требуется два момента времени (два символа), а по варианту idft 8 моментов времени(символов) да и вообще слабо просматривается идентичность выходов, хотя вроде бы должна быть. Где я ошибся? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 12 декабря, 2008 Опубликовано 12 декабря, 2008 · Жалоба ... Попозже если время будет попробую расписать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 16 декабря, 2008 Опубликовано 16 декабря, 2008 (изменено) · Жалоба Пусть w=e^(j*2*pi/N) Например возьмём N=4. _ _ | w^0 w^0 w^0 w^0 | W= | w^0 w^1 w^2 w^3 | | w^0 w^2 w^4 w^6 | |_w^0 w^3 w^6 w^9_| X=[x3 x2 x1 x0]' ('- транспонирование) Обратное дискретное преобразование фурье от X (масштабирующий коэффициент не рассматриваем): iDFT(X)=W*X Последовательности символов в каждой поднесущей: a0,a1,a2... b0,b1,b2... c0,c1,c2... d0,d1,d2... Импульсная характеристика сглаживающего фильтра, например пусть 5 отсчётов на символ, длительность в 3 символа: h0,h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13,h14 Полифазная декомпозиция фильтра: _ _ | h0 h5 h10 | | h1 h6 h11 | H=| h2 h7 h12 | | h3 h8 h13 | |_h4 h9 h14_| A,B,C,D - векторы столбцы выходы линий задержек с отводами сглаживающих фильтров. Например: А0=[0,0,0]' A1=[a0,0,0]' A2=[a1,a0,0]' A3=[a2,a1,a0]' ... Векторы столбцы выходы чётырёх полифазных фильтров: H*A,H*B,H*C,H*D Мультиплексируя в 5 раз чаще символьной частоты с выхода этих векторов столбцов, от 1-го ряда к 5-му, можем получить четыре последовательности сглаженных символов, которые затем нужно подать на комплексные гетеродины. Выход, вектор столбец, сумма 4-х каналов(.* - поэлементное умножение): _ _ _ _ _ _ _ _ OUT1=H*A1.*| w^0 |+H*B1.*| w^0 |+H*С1.*| w^0 |+H*D1.*| w^0 | | w^0 | | w^1 | | w^2 | | w^3 | | w^0 | | w^2 | | w^4 | | w^6 | | w^0 | | w^3 | | w^6 | | w^9 | |_w^0_| |_w^0_| |_w^0_| |_w^0_| _ _ _ _ _ _ _ _ OUT2=H*A2.*| w^0 |+H*B2.*| w^1 |+H*С2.*| w^2 |+H*D2.*| w^3 | | w^0 | | w^2 | | w^4 | | w^6 | | w^0 | | w^3 | | w^6 | | w^9 | | w^0 | | w^0 | | w^0 | | w^0 | |_w^0_| |_w^1_| |_w^2_| |_w^3_| _ _ _ _ _ _ _ _ OUT3=H*A3.*| w^0 |+H*B3.*| w^2 |+H*С3.*| w^4 |+H*D3.*| w^6 | | w^0 | | w^3 | | w^6 | | w^9 | | w^0 | | w^0 | | w^0 | | w^0 | | w^0 | | w^1 | | w^2 | | w^3 | |_w^0_| |_w^2_| |_w^4_| |_w^6_| ... Мультиплексируя выход вектора столбца OUT в 5 раз чаще символьной частоты получим модуляцию FMT в "лоб". Раскроем OUT1: _ _ OUT1=| h0*(a0*w^0+b1*w^0+c0*w^0+d0*w^0)+h5*0+h10*0 | | h1*(a0*w^0+b1*w^1+c0*w^2+d0*w^3)+h6*0+h11*0 | | h2*(a0*w^0+b1*w^2+c0*w^4+d0*w^6)+h7*0+h12*0 | | h3*(a0*w^0+b1*w^3+c0*w^6+d0*w^9)+h8*0+h13*0 | |_h4*(a0*w^0+b1*w^0+c0*w^0+d0*w^0)+h9*0+h14*0_| Обозначим F=iDFT([a,b,c,d]') F1=iDFT([a0,b0,c0,d0]') F2=iDFT([a1,b1,c1,d1]') F3=iDFT([a2,b2,c2,d2]') ... _ _ OUT1=| h0*F1(1)+h5*0+h10*0 | | h1*F1(2)+h6*0+h11*0 | | h2*F1(3)+h7*0+h12*0 | | h3*F1(4)+h8*0+h13*0 | |_h4*F1(1)+h9*0+h14*0_| _ _ OUT2=| h0*F2(2)+h5*F1(2)+h10*0 | | h1*F2(3)+h6*F1(3)+h11*0 | | h2*F2(4)+h7*F1(4)+h12*0 | | h3*F2(1)+h8*F1(1)+h13*0 | |_h4*F2(2)+h9*F1(2)+h14*0_| _ _ OUT3=| h0*F3(3)+h5*F2(3)+h10*F1(3) | | h1*F3(4)+h6*F2(4)+h11*F1(4) | | h2*F3(1)+h7*F2(1)+h12*F1(1) | | h3*F3(2)+h8*F2(2)+h13*F1(2) | |_h4*F3(3)+h9*F2(3)+h14*F1(3)_| ... FF1=[F1 0 0] FF2=[F2 F1 0] FF3=[F3 F2 F1] ... FF - линия задержки с отводами векторами столбцами, матрица 4x3. OUT1=sum(H.*[FF1(1,:); FF1(2,:); FF1(3,:); FF1(4,:); FF1(1,:)])' ([FF1(1,:); FF1(2,:); FF1(3,:); FF1(4,:); FF1(1,:)] - склейка рядов в матрицу 5x3; sum() - сумма элементов каждого ряда матрицы, в итоге получаем вектор строку из матрицы) OUT2=sum(H.*[FF2(2,:); FF2(3,:); FF2(4,:); FF2(1,:); FF2(2,:)])' OUT3=sum(H.*[FF3(3,:); FF3(4,:); FF3(1,:); FF3(2,:); FF3(3,:)])' OUT4=sum(H.*[FF4(4,:); FF4(1,:); FF4(2,:); FF4(3,:); FF4(4,:)])' ... В результате получаем быстрый алгоритм где вместо комплексного гетеродина на каждую поднесущую имеем быстрое блочное FFT на все поднесущие, вычисляемое на символьной частоте, вместо полифазного фильтра на каждую поднесущую имеем один полифазный фильтр на все поднесущие, работающий на символьной частоте. Изменено 16 декабря, 2008 пользователем petrov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться