Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: структура модема при 8psk
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2, 3, 4, 5
petrov
Цитата(Виктор39 @ Sep 17 2013, 15:04) *
это уже другой тип сигнала... есть сигналы с пилотами, а есть такие, как я описал в предыдущем сообщении


Не валите все в одну кучу, разбивайте вопросы на более простые, давайте ссылку на стандарт, никто не будет в угадайку играть и сочинения на несколько страниц писать на все возмоможные варианты.
Виктор39
Цитата(petrov @ Sep 17 2013, 14:10) *
Не валите все в одну кучу, разбивайте вопросы на более простые, давайте ссылку на стандарт, никто не будет в угадайку играть и сочинения на несколько страниц писать на все возмоможные варианты.

ссори.
разрабатываемый приемник должен удовлетворять нескольким стандартам. думаю достаточно будет одного вот этого Нажмите для просмотра прикрепленного файла, чтобы закрыть все вопросы.
краткое описание типов сигнала в таблице TABLE C-III. Burst waveform characteristics. ст.284. разумеется, наибольший интерес вызывает BW2...
petrov
Цитата(Виктор39 @ Sep 17 2013, 15:58) *
ссори.
разрабатываемый приемник должен удовлетворять нескольким стандартам. думаю достаточно будет одного вот этого Нажмите для просмотра прикрепленного файла, чтобы закрыть все вопросы.
краткое описание типов сигнала в таблице TABLE C-III. Burst waveform characteristics. ст.284.


Есть быстрое преобразование Уолша-Адамара.

Цитата(Виктор39 @ Sep 17 2013, 15:58) *
разумеется, наибольший интерес вызывает BW2...


Этот документ видели?
http://www.radioscanner.ru/files/download/...stanag_4285.pdf
Виктор39
Цитата
Есть быстрое преобразование Уолша-Адамара.

спасибо. буду копать в эту сторону.
Цитата

спасибо за документ. я его впервые вижу. только он полезной информации практически никакой не дал. в документе описывается стандарт, когда передаваемые данные, действительно, делятся на кадры по 48 символов (32 неизвестных/16 известных). только вот в отличие от моего стандарта, где данные могу таким образом передаваться достаточно большой промежуток времени (FIGURE C-9. ст. 303 в доке MIL_STD_188_141B), в данном документе рассматривается случай, когда через каждые 4 кадра передается синхронизирующая последовательность состоящая из 80 символов. конечно, 80 символов им вполне достаточно, чтобы обучать эквалайзер снова и снова. как быть в случае, когда нет этих 80-ти символьных известных последовательностей, а только 16-ти символьные.
Corner
Цитата(Виктор39 @ Sep 18 2013, 15:49) *
спасибо. буду копать в эту сторону.

спасибо за документ. я его впервые вижу. только он полезной информации практически никакой не дал. в документе описывается стандарт, когда передаваемые данные, действительно, делятся на кадры по 48 символов (32 неизвестных/16 известных). только вот в отличие от моего стандарта, где данные могу таким образом передаваться достаточно большой промежуток времени (FIGURE C-9. ст. 303 в доке MIL_STD_188_141B), в данном документе рассматривается случай, когда через каждые 4 кадра передается синхронизирующая последовательность состоящая из 80 символов. конечно, 80 символов им вполне достаточно, чтобы обучать эквалайзер снова и снова. как быть в случае, когда нет этих 80-ти символьных известных последовательностей, а только 16-ти символьные.


16 символов недостаточно для коррекции. У Вас очень узкая полоса для такой скорости передачи данных (я так понимаю 1200*3=3600). Из-за это предыдущее фазовое состояние влияет на следующее. Нужно иметь перебор парных состояний фазы. Это где-то 70... 80 символов.

По минимуму надо иметь пары переходов дающие артефакты в виде выхода сигнала за полосу при мгновенной фазовой коммутации. Это сочетания символов состоящие из +90, -90, +45, -45 и 0 градусов (любое после любого).
petrov
Цитата(Виктор39 @ Sep 18 2013, 15:49) *
только он полезной информации практически никакой не дал.


То есть SECOND EXAMPLE OF DEMODULATION TECHNICUE вы уже сделали?
Corner
Цитата(petrov @ Sep 19 2013, 15:30) *
То есть SECOND EXAMPLE OF DEMODULATION TECHNICUE вы уже сделали?


Спасибо за этот документ. Теперь стало понятно что и как... Какой город? Пиво пьете?
Виктор39
Цитата(petrov @ Sep 19 2013, 14:30) *
То есть SECOND EXAMPLE OF DEMODULATION TECHNICUE вы уже сделали?

не заметил сразу. прочитал в начале FIRST EXAMPLE OF DEMODULATION TECHNICUE и подумал, что нет ничего нового под солнцем.
после прочтения у меня остались некоторые вопросы по алгоритму. основная система уравнений, которую предстоит решать
где - принятые дынные (т.е. они известны);
- известные передаваемые данные;
- неизвестные данные, которые предстоит найти;
и - канальные веса.
Не понятно, откуда брать значения и и каким образом их разделить на две части, две матрицы? в начальный момент я их могу рассчитать по преамбуле, с помощью адаптивного фильтра, а дальше как быть? в алгоритме описывается, что они каким-то образом должны обновляться, но не понятно каким.

также не все понятно, как быть с двумя отсчетами на символ, но в начале бы разобраться с одним...

alex_os
Цитата(Виктор39 @ Sep 20 2013, 12:37) *
не заметил сразу. прочитал в начале FIRST EXAMPLE OF DEMODULATION TECHNICUE и подумал, что нет ничего нового под солнцем.
после прочтения у меня остались некоторые вопросы по алгоритму. основная система уравнений, которую предстоит решать
где - принятые дынные (т.е. они известны);
- известные передаваемые данные;
- неизвестные данные, которые предстоит найти;
и - канальные веса.
Не понятно, откуда брать значения и и каким образом их разделить на две части, две матрицы? в начальный момент я их могу рассчитать по преамбуле, с помощью адаптивного фильтра, а дальше как быть? в алгоритме описывается, что они каким-то образом должны обновляться, но не понятно каким.

также не все понятно, как быть с двумя отсчетами на символ, но в начале бы разобраться с одним...

Я так понимаю это т.н. DDA, или NDDA.
http://www.docshut.com/ktrtih/data-directe...-hf-modems.html
W2 это матрица свертки сделанная из ИХ каналa. А вот что такое W1?...
p.s. почему-то статья на радиосканере недоступна.
petrov
Цитата(Виктор39 @ Sep 20 2013, 12:37) *
после прочтения у меня остались некоторые вопросы по алгоритму.


http://www.freepatentsonline.com/4365338.pdf

Вообще пробегитесь по патентам, иногда там стоящие вещи можно найти.


Цитата(alex_os @ Sep 20 2013, 13:18) *
p.s. почему-то статья на радиосканере недоступна.


http://www.n2ckh.com/MARS_ALE_FORUM/s4285.PDF

Ещё

http://www.google.com/patents/?vid=USPAT67...&output=pdf
Corner
Цитата(petrov @ Sep 20 2013, 13:22) *
http://www.freepatentsonline.com/4365338.pdf
Вообще пробегитесь по патентам, иногда там стоящие вещи можно найти.


Весьма занятная статья. Дополнительный обработчик (считай коррелятор) выделяет известные последовательности и по ним обучает основной обработчик. А патентов с непрерывным самообучением Вам не попадалось?
Виктор39
добрый день.
могли бы вы мне подсказать, что в данном алгоритме не так?! почему-то не работает... спасибо.
вот, что я делаю:
1) принимаю очередных 48 символов R, 32 неизвестных B и 16 известных A2.

2) по формуле Bestim = inv(W2^H*W2)*(W2^H(R-W1*A)) вычисляю 32 неизвестных значений(Bestim), где H - комплексно-сопряженное транспонирование; A - вектор состоящий из известных данных(A1) предыдущего кадра и текущего (A2)

3) рассчитываю ошибку, для обновления коэффициентов входного фильтра (weight), для этого от вектора принятых 48 символов R, отнимаю вектор состоящий из 32 оцененных значений(Bestim) и 16 известных(A2): errors = R - [Bestim A2];

4) суммирую элементы вектора ошибок, и усредняю.
E = sum(errors )/length(errors );

5) обновляю весовые коэффициенты(weight) фильтра с учетом заранее подобраного коэффициента усиления К, который определяет скорость обновления коэффициентов. делаю это следующим образом:
weight = weight + K*E;

6)далее принимаю решение относительно первого оцененного значения неизвестных данных, т.е. выбираю его как ближайшее значение Bestim(1) к одной из 8 -ми точек 8psk созвездия

7) алгоритм повторяю (пункт 2 - 6) уже для 31 -ого неизвестного данного., и так пока не станет неизвестных данных.

вопросы:
а) в чем ошибка данного алгоритма? он не работает правильно.
б) может быть входной сигнал реально нужно пропускать через входной фильтр с коэффициентами weight, т.е. принимаемый сигнал R брать как свертку weight с входными данными? вот этот я момент не понял. нужен ли этот фильтр, либо все фильтрация и исправление происходит в формуле Bestim = inv(W2^H*W2)*(W2^H(R-W1*A))?
в) как мне знать в начальный момент весовые коэффициенты weight ? нужно какое-то обучение? либо по нескольким кадрам с помощью уравнения weight = weight + K*E эти коэффициенты подбираются?

спасибо
вот я быстро код набросал для данного алгоритма, чтобы можно было посмотреть, как все работает.
Нажмите для просмотра прикрепленного файла
alex_os
Цитата(Виктор39 @ Sep 23 2013, 10:03) *
5) обновляю весовые коэффициенты(weight) фильтра с учетом заранее подобраного коэффициента усиления К, который определяет скорость обновления коэффициентов. делаю это следующим образом:
weight = weight + K*E;



Кажется здесь ошибка. Должно быть что-то вроде weight = weight + K * E .* conj ( R ) ;
Т.е если у нас идеальные веса weight то ошибка ортогональна принятым данным R и подстройка
weight не происходит.
Виктор39
Цитата(alex_os @ Sep 23 2013, 15:19) *
Кажется здесь ошибка. Должно быть что-то вроде weight = weight + K * E .* conj ( R ) ;
Т.е если у нас идеальные веса weight то ошибка ортогональна принятым данным R и подстройка
weight не происходит.


только вот не понятно. у меня вектор весов weight состоит из 17 коэффициентов. вектор принятых данных R из 48 символов. каким образом я смогу к 17-ти разрядному вектору прибавить 48-ми разрядный?!
alex_os
Цитата(Виктор39 @ Sep 23 2013, 16:46) *
только вот не понятно. у меня вектор весов weight состоит из 17 коэффициентов. вектор принятых данных R из 48 символов. каким образом я смогу к 17-ти разрядному вектору прибавить 48-ми разрядный?!

Ну очевидно тут блочная разновидность LMS алгоритма имеет место быть.

Обычный LMS см. формула 1
http://www.arpapress.com/Volumes/Vol7Issue...RRAS_7_1_05.pdf

Блочная версия - это тоже самое , только произведение e( n ) * x( n ) усредняется в течении
блока и веса обновляются один раз на блок. x - вектор размером равный размеру весом, e - скаляр.
Виктор39
Цитата(alex_os @ Sep 23 2013, 16:11) *
Ну очевидно тут блочная разновидность LMS алгоритма имеет место быть.

Обычный LMS см. формула 1
http://www.arpapress.com/Volumes/Vol7Issue...RRAS_7_1_05.pdf

Блочная версия - это тоже самое , только произведение e( n ) * x( n ) усредняется в течении
блока и веса обновляются один раз на блок. x - вектор размером равный размеру весом, e - скаляр.


т.е. для 48 R принятых символов, имея 48 оцененных Restim, длину вектора весов - 17, все может выглядеть примерно так?
for i = 1:(48-17)
errors = errors + (R(i:i+16) - Restim(i:i+16)).*conj(R(i:i+16)) ; % суммируем
end
E = errors/(48-17); % и усредняем ошибку

%обновляем коэффициенты
weight = weight + K * E
?
alex_os


Цитата(Виктор39 @ Sep 23 2013, 17:55) *
т.е. для 48 R принятых символов, имея 48 оцененных Restim, длину вектора весов - 17, все может выглядеть примерно так?
for i = 1:(48-17)
errors = errors + (R(i:i+16) - Restim(i:i+16)).*conj(R(i:i+16)) ; % суммируем
end
E = errors/(48-17); % и усредняем ошибку

%обновляем коэффициенты
weight = weight + K * E
?


Скорее так:

errors = errors + (R(i+16) - Restim(i+16)).*conj( R(i+16: -1: i ) ) ; % суммируем

Ошибка это скаляр, а R(i:i+16) задержанные входные отсчеты.

Да вы обычный LMS прикрутите а потом его в блочный легко сможете переделать .
Виктор39
1)
вопрос по SECOND EXAMPLE OF DEMODULATION TECHNICUE описанной в статье http://www.n2ckh.com/MARS_ALE_FORUM/s4285.PDF
согласно Annex D, пункт 1 - d, оценивать параметры канала и обновлять веса следует не менее одного раза, желательно четыре
согласно Annex D, пункт 3 - b, оценка параметров канал происходит на основание 32-ух принятых решений, относительно всех неизвестных передаваемых данных в кадре
согласно Annex D, пункт 2 - e, принятие решений относительно передаваемых 32 неизвестных данных происходит итерационно, как я понял, по 2 символа, смежным с известными последовательностями. (получается 16 итераций)
вопрос: оценивать параметры канала и обновлять следует на каждой из 16-ти итераций, либо только после всех принятых решений по неизвестным данным? и что значит желательно 4 раза оценивать и обновлять веса канала?

2)
Цитата(alex_os @ Sep 23 2013, 17:19) *
Да вы обычный LMS прикрутите а потом его в блочный легко сможете переделать .

согласно обычного LMS, при обновлении весов, ошибку умножаем на комплексно-сопряженный вектор принятого сигнала. но все в том же доке по data-directed technique, алгоритм обновления коэффициентов описывается следующим образом (Annex D, пункт 3 - b ):
Цитата
Based upon these 32 decisions, the two sets of 16 known transmitted values and the weights for the previous frame, the 48 received values can be predicted and 48 errors between the prediction and observed received values can be calculated. These errors are then correlated (multiplied and averaged) with the 64 assumed transmitted values corresponding to each of the channel weights in the predictions.

т.е. здесь написано, что ошибка должна умножаться не на принятый сигнал, а на "идеальный", сигнал после принятия решений? как правильно все-таки делать?
в данном доке написано что ошибка должна коррелировать с 64 assumed transmitted values, а в патенте написано, что не с 64-мя, а только с 48 -ми символами

3)
и кстати, я так и не понял, на входе демодулятора должен стоять фильтр(эквалайзер), т.е. входными данными R для алгоритма оценивания Bestim = inv(W2^H*W2)*(W2^H(R-W1*A)), являются предварительно "выровненными" или никакого фильтра(эквалайзера) на входе не должно быть, и вся эквализация происходит в этой формуле Bestim = inv(W2^H*W2)*(W2^H(R-W1*A))?
Виктор39
1)разобрался с реализацией SECOND EXAMPLE OF DEMODULATION TECHNICUE(data-directed equalization) в случае одного отсчета на символ. схема работает, как мне кажется, очень даже не плохо. только вот в реальных условиях у меня используется 2 отсчета на символ. а когда пытаюсь схему адаптировать к двум отсчетам на символ, все работает очень плохо. может подскажете, что я не правильно делаю?
в Annex D, пункт 2 (f) имеется следующая информация:
Цитата
In order to reduce the stress associated with the symbol synchronization process, it is desirable to obtain two received samples per symbol. In this case, two separate sets of channel weight estimates must be obtained, one for each of the sampling phases. Equation D-3 [Bestim = inv(W2^H*W2)*(W2^H(R-W1*A))] can still be used where the matrix and vector elements are the average of the two values obtained during each phase;

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

2)при вычисление ИХ канала, главный (центральный) коэффициент получается крайним. и это не есть хорошо. так как при небольшом сбое символьной синхронизации, он сразу же убежит за край... после вычисления ИХ канала, мне его нужно как-то сдвигать в центр?
alex_os
Цитата(Виктор39 @ Sep 25 2013, 18:22) *
1)разобрался с реализацией SECOND EXAMPLE OF DEMODULATION TECHNICUE(data-directed equalization) в случае одного отсчета на символ. схема работает, как мне кажется, очень даже не плохо. только вот в реальных условиях у меня используется 2 отсчета на символ. а когда пытаюсь схему адаптировать к двум отсчетам на символ, все работает очень плохо. может подскажете, что я не правильно делаю?
в Annex D, пункт 2 (f) имеется следующая информация:

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

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

1. Усреднение двух фаз ИХ это както сомнительно. Самое простое и возможно самое лучшее - оценивать ИХ для обоих фаз, но для оценки переданных данных использовать только одну, ту у которой меньшая ошибка получается в процессе измерения ИХ. Центрирование максимума Их должно легко получаться корректировкой системы синхронизации.
Виктор39
Цитата(alex_os @ Sep 25 2013, 20:27) *
Усреднение двух фаз ИХ это както сомнительно.
1) а усреднение двух фаз принимаемых данных это нормально?

Цитата(alex_os @ Sep 25 2013, 20:27) *
Самое простое и возможно самое лучшее - оценивать ИХ для обоих фаз, но для оценки переданных данных использовать только одну, ту у которой меньшая ошибка получается в процессе измерения ИХ.
2) не очень понимаю, как мне определить ту лучшую из двух оцененных ИХ. Как определить ИХ с наименьшей ошибкой? или я как обычно туплю?

Цитата(alex_os @ Sep 25 2013, 20:27) *
Центрирование максимума Их должно легко получаться корректировкой системы синхронизации.
3) можете объяснить, как это в данном случае может быть достигнуто?
alex_os
Цитата(Виктор39 @ Sep 26 2013, 09:40) *
1) а усреднение двух фаз принимаемых данных это нормально?

Мне кажется это не правильно, т.к. такое усреднение само по себе внесет приличную
межсимвольную интерференцию.

Цитата(Виктор39 @ Sep 26 2013, 09:40) *
2) не очень понимаю, как мне определить ту лучшую из двух оцененных ИХ. Как определить ИХ с наименьшей ошибкой? или я как обычно туплю?


Ну есть у Вас в процессе измерения измерения ИХ разница между принятыми отсчетами и
детектированными символами свернутыми с ИХ : (R(i:i+16) - Restim(i:i+16)). Суммируете
эти квадраты модулей этих ошибок в каждом из каналов, где сумма меньше - тот канал
удачнее и его использовать для оценки переданных символов. Кажется была статья или патент
какой-то на эту тему.

Цитата(Виктор39 @ Sep 26 2013, 09:40) *
3) можете объяснить, как это в данном случае может быть достигнуто?


В процессе начальной синхронизации наверняка ищется максимум корреляции входных отсчетов с преамбулой. Скажем максимум наблюдается в i-том отсчете и от этого отчета начинаете обработку.
Попробуйте начинать с i + 4 и максимум ИХ cместится на 4 отчета.

p.s. Насчет суммирования четных нечетных отсчетов подумалось вот что есть принятые отчеты четные и нечетные r0, r1, неизвестные данные x, матрицы свертки H0, H1 составленные из ИХ.
Имеем переопределенную систему уравнений.

[H0; H1] * x = [r0; r1]

Решаем в LS смысле т.е получается такое нормальное уравнение.

[H0' * H0 + H1' * H1 ] * x = [H0' * r0 + H1' * r1]

таким образом усреднение имеет место быть но не самих h и r а произведений H' * H, H * r.



Виктор39
Цитата
Ну есть у Вас в процессе измерения измерения ИХ разница между принятыми отсчетами и
детектированными символами свернутыми с ИХ : (R(i:i+16) - Restim(i:i+16)). Суммируете
эти квадраты модулей этих ошибок в каждом из каналов, где сумма меньше - тот канал
удачнее и его использовать для оценки переданных символов. Кажется была статья или патент
какой-то на эту тему.

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

Цитата(alex_os @ Sep 26 2013, 09:50) *
В процессе начальной синхронизации наверняка ищется максимум корреляции входных отсчетов с преамбулой. Скажем максимум наблюдается в i-том отсчете и от этого отчета начинаете обработку. Попробуйте начинать с i + 4 и максимум ИХ cместится на 4 отчета.
спасибо. я так и пытался сделать, только как оказалось я не в ту сторону сдвигал ИХ, и поэтому "центральный" коэффициент убегал сразу за край.

Цитата(alex_os @ Sep 26 2013, 09:50) *
p.s. Насчет суммирования четных нечетных отсчетов подумалось вот что есть принятые отчеты четные и нечетные r0, r1, неизвестные данные x, матрицы свертки H0, H1 составленные из ИХ.
Имеем переопределенную систему уравнений.
[H0; H1] * x = [r0; r1]

Решаем в LS смысле т.е получается такое нормальное уравнение.
[H0' * H0 + H1' * H1 ] * x = [H0' * r0 + H1' * r1]

таким образом усреднение имеет место быть но не самих h и r а произведений H' * H, H * r.
я не пробовал реализовать предложенный вами данный алгоритм, но вот какие проблемы в реализации я вижу. если я правильно понимаю, то x, это якобы "усредненные" принятые данные, т.е. это и есть R для формулы Bestim = inv(W2^H*W2)*(W2^H(R-W1*A)). H0, H1 - это матрицы составленные из четной и нечетной ИХ. так вот, я могу вычислить Bestim, только зная R. для вычисления R, должен знать H0, H1, т.е. четную и нечетную ИХ. но четную и нечетную ИХ я имею только в начале приема сигнала, я ее вычисляю по преамбуле. дальше я буду иметь только одну "символьную" ИХ, которая подставляется в формулу Bestim = inv(W2^H*W2)*(W2^H(R-W1*A)), и которая будет обновляться с учетом оцененных данных Bestim. не буду же я еще постоянно пересчитывать четную и нечетную ИХ. ведь в таком случае смысл DDE алгоритма теряется.

в патенте для данного алгоритма вычитал следующее:
Цитата
In order to reduce loss due to inappropriate sampling time during a symbol time, two samples per symbol may be employed, although the algorithm is appropriate to allow computation where only one decision per two samples is made. The algorithm may be employed twice per frame with each of the two symbol sample phases. It is also possible to apply both samples per symbol to the algorithm at the same time. Although this simultaneous application changes the size of the matrix, it may, in fact, reduce calculation time.

пробую реализовать согласно того, как я это понял. в начале рассчитываю ИХ четных и нечетных отсчетов. запускаю сразу же два алгоритма DDE для четных и нечетных принятых отсчетов и рассчитанных ИХ. далее оцениваю в котором из двух случаев данные оценены более верно(не понятно как это делать). для следующего входного кадра, также подаю отдельно четные и нечетные данные на два алгоритма, но ИХ уже подаю одинаковую для двух аллгоритмов, лучшую для предыдущего кадра. и так продолжаю далее... так вот, если в начальный момент лучшие входные данные были четные, то в какой-то момент лучшими могут стать нечетные. очень сложно понять, по какому критерию я должен между ними переключаться? т.е. как мне оценивать, какую из двух ИХ мне подавать на следующий кадр? и правильно ли все это.
так как у меня пакетная передача, я не делаю тактовую синхронизацию. насколько я понимаю, схема должна работать до тех пор, пока "центральный" коэффициент ИХ не сползет за край. за время пакета он не успеет так далеко убежать.
Цитата
It is also possible to apply both samples per symbol to the algorithm at the same time. Although this simultaneous application changes the size of the matrix, it may, in fact, reduce calculation time.
а как все это вместить в одну матрицу, мне даже в голову не приходит.
alex_os
Цитата(Виктор39 @ Sep 26 2013, 14:46) *
я не пробовал реализовать предложенный вами данный алгоритм, но вот какие проблемы в реализации я вижу. если я правильно понимаю, то x, это якобы "усредненные" принятые данные, т.е. это и есть R для формулы Bestim = inv(W2^H*W2)*(W2^H(R-W1*A)). H0, H1 - это матрицы составленные из четной и нечетной ИХ. так вот, я могу вычислить Bestim, только зная R. для вычисления R, должен знать H0, H1, т.е. четную и нечетную ИХ. но четную и нечетную ИХ я имею только в начале приема сигнала, я ее вычисляю по преамбуле. дальше я буду иметь только одну "символьную" ИХ, которая подставляется в формулу Bestim = inv(W2^H*W2)*(W2^H(R-W1*A)), и которая будет обновляться с учетом оцененных данных Bestim. не буду же я еще постоянно пересчитывать четную и нечетную ИХ. ведь в таком случае смысл DDE алгоритма теряется.


Нет x это и есть Bestim. R, r0, r1 - это входные отсчеты. Т.е в "классическом" алгоритме решается система уравнений
W2 * Bestim = R - W1 * A
Cоответственно, ни что не мешает записать две таких системы для четных и для нечетных отсчетов (W1,W2, R будут разные) таким образом получаем систему с тем же числом неизвестных но в два раза больше уравнений, ее и решаем. Возможно это и имеется ввиду:

Цитата
It is also possible to apply both samples per symbol to the algorithm at the same time. Although this
simultaneous application changes the size of the matrix, it may, in fact, reduce calculation time.

Вообще погуглите
Код
data directed estimation hf modems
- куча статей и патентов находится...






Виктор39
Цитата(alex_os @ Sep 26 2013, 15:07) *
Cоответственно, ни что не мешает записать две таких системы для четных и для нечетных отсчетов (W1,W2, R будут разные) таким образом получаем систему с тем же числом неизвестных но в два раза больше уравнений, ее и решаем. Возможно это и имеется ввиду:

Вообще погуглите
Код
data directed estimation hf modems
- куча статей и патентов находится...
спасибо. попробовал так и сделать, если я все правильно понял. алгоритм работает. матрицы получаются только в два раза больше,а четная и нечетная оценка канала обновляется независимо друг от друга. только вот одна проблемка, как мне кажется, данный алгоритм требует достаточно стабильной тактовой(символьной) синхронизации. не удается удерживать схему в рабочем состояние при нестабильной тактовой с помощью обычного дрейфования "центрального" коэффициента ИХ. может быть из-за того, что четная и нечетная ИХ как-бы независимы друг от друга.
надо поискать и почитать еще статьи, как вы и советуете.
Виктор39
я вчера был не прав. данный алгоритм (data directed estimation) способен удерживать тактовую синхронизацию, т.е. значимые коэффициенты ИХ дрейфуют при нестабильной тактовой, и алгоритм остается устойчивым до тех пор, пока значимые коэффициенты ИХ не сползают за край. в данном стандарте используется пакетная передача, а стабильность тактовой приемника достаточно высокая, чтобы позволить мне не реализовывать тактовую. и кстати, большое спасибо petrov-у за этот алгоритм и alex_os за помощь в его реализации. кажется, что он вполне устраивает меня по качеству работы. но, как я понял, требует fpga ресурса.

вот еще вопросы, которые остались у меня.
1) в данном приемопередатчике должен быть предусмотрен помимо пакетной передачи еще и режим потоковой передачи данных. там используются такие же виды сигнала, как и в стандарте описанном выше, но только с тем отличием, что преамбулы используются очень большие. потоковая передача требует от меня тактовой синхронизации. у меня на этот счет есть два предположения, как это сделать. первый, это использовать тактовую гарднера. тактовая по гарднеру, как мне помниться, требует определенного времени "устаканивания". преамбула мне позволяет выделить на устаканивание тактовой 300-400 символов. используя данный метод синхронизации я смогу уменьшить матрицы в алгоритме data directed estimation, работая по одному отсчету на символ. второй способ, это периодически просто значимые коэффициенты ИХ(центр масс) сдвигать в центр. можете сказать, что предпочтительней? какие подводные камни мне не видны?

Цитата(petrov @ Sep 18 2013, 10:59) *
Есть быстрое преобразование Уолша-Адамара.
2) вопрос по другому типу сигнала. там используются передача данных с помощью известных 16-ти разрядных ортогональных последовательностей Уолша, как я и писал выше. вы мне посоветовали использовать каким-то образом быстрое преобразование Уолша-Адамара. вот никак не могу понять, как я эту информацию могу использовать. можно эту информацию использовать применительно к DFE эквалайезру, либо только уже после него я могу выдавить определенную полезную информацию? можете дать какую-нибудь ссылку?
Виктор39
добрый день. так и не смог придумать, как можно применительно к эквалайзеру использовать ортогональные последовательности Уолша... но вот в чем у меня вопрос. передаваемый сигнал до скремблирования 2-ух позиционный (типа bpsk, т.е. состоит из двух возможных символов), после скремблирования он становится 8-ми позиционным(типа 8psk). поэтому я в DFE встроил дескремблер, и таким образом ошибку для подстройки корректоров расчитываю более точно, т.е. беру разность принятого сигнала к ближайшей из двух точек созвездия, а не к ближайшей из 8-ми. в таком случае, как и следовало ожидать, результаты в разы улучшились, но осталась проблема, распространения ошибок через обратный фильтр. т.е. настает момент из-за наличия ошибок в решении, когда, выходной сигнал с обратного фильтра(FB) имеет "большое" значении и получается подавляет прямой фильтр. т.е. эквалайзер хоть и дает хорошие резултат, но очень не устойчив. стандартные схемы которые я пытался встроить ранее (типа годар, стоп-энд-го, и т.д.) разумеется не применимы. обычное ограничение весов обратного фильтра не дало положительных результатов. так вот, реализовал алгоритм следующим образом: оцениваю выход прямого фильтра(outFF) и обратного (outFB). если модуль выходного значения прямого фильтра меньше чем модуль выходного значения обратного фильтра умноженного на какой-то коэффициент k1 (abs(outFF) < k1*abs(outFB)), то я коэффициенты обратного фильтра (weightFB) делю на некоторый коэффициент k2 (weightFB = weightFB./k2). (k1 и k2 подбираю эмпирически(k1 и k2 > 1)). таким образом получается, что в тот момент, когда эквалайзер близок к неустойчивому состоянию, я сразу же ограничиваю влияние обратного фильтра. в результате DFE получается куда более устойчивым. насколько приемлем данный алгоритм? или кто-то может посоветовать что-то лучшее? спасибо.
alex_os
Цитата(Виктор39 @ Oct 2 2013, 14:58) *
добрый день. так и не смог придумать, как можно применительно к эквалайзеру использовать ортогональные последовательности Уолша...

Та разновидность сигнала, где Уолшем передаются биты, в эквалайзере не нуждается, там нечто-то вроде
Rake receiver нужно.
Виктор39
Цитата(alex_os @ Oct 3 2013, 08:40) *
Та разновидность сигнала, где Уолшем передаются биты, в эквалайзере не нуждается, там нечто-то вроде
Rake receiver нужно.


т.е. можно просто использовать банк фильтров(корреляторов)? или я что-то не правильно понял
alex_os
Цитата(Виктор39 @ Oct 4 2013, 11:06) *
т.е. можно просто использовать банк фильтров(корреляторов)? или я что-то не правильно понял

Ну да, только главная засада тут в том, что память канала примерно соизмерима с длительностью символа.
Виктор39
добрый день. как я писал выше, первоначальную частотную синхронизацию я делаю по преамбуле. т.е. принятый сигнал перемножаю с комплексно-сопряженной преамбулой, тем самым снимается модуляция и остается гармоника отстройки, которую я и должен определить... в матлабовском коде я просто делал fft по большому количеству точек и затем определял максимальную составляющую спектра. в железе ведь так не возможно сделать из-за большой сложности вычислений. немного почитав на форуме, понял, что можно вместо fft делать Герцеля. так как я ловлю преамбулу с помощью банка фильтров, частотную отстройку я изначально знаю с точностью до +/- 7 Гц(Fs = 9600). далее я делаю Герцеля, по нескольким точкам в диапазоне предполагаемого максимума. потом увеличиваю количество точек, и снова герцеля. но это тоже получается весьма затратно, так как скажем для точность в пол герца требуется десятки тысяч точек. а у меня для определения частоты используется 128 отсчетов.. нужно в сотни раз интерполировать исходный сигнал, и рассчитывать десятки тысяч коэффициентов для определения только одной спектральной составляющей... а это тоже очень вычислительно затратно... может вы мне можете что-нибудь посоветовать?!
petrov
Цитата(Виктор39 @ Oct 10 2013, 11:20) *
первоначальную частотную синхронизацию я делаю по преамбуле. т.е. принятый сигнал перемножаю с комплексно-сопряженной преамбулой, тем самым снимается модуляция и остается гармоника отстройки, которую я и должен определить... в матлабовском коде я просто делал fft по большому количеству точек и затем определял максимальную составляющую спектра. в железе ведь так не возможно сделать из-за большой сложности вычислений.


Цитата(Виктор39 @ Oct 10 2013, 11:20) *
так как я ловлю преамбулу с помощью банка фильтров, частотную отстройку я изначально знаю с точностью до +/- 7 Гц(Fs = 9600).


А в чём разница?
Виктор39
Цитата(petrov @ Oct 10 2013, 12:34) *
А в чём разница?

ни в чем нет разницы. может я что-то не понятно написал.
возможная частотная отстройка у меня +/- 90 Гц. использую банк из 7 фильтров на разных частотах. (90*2)/7 = 26 Гц диапазон на каждый фильтр. т.е. получается, определив наличие сигнала, я уже знаю его частоту с точностью не до +/- 7 Гц, как я писал выше, а до +/- 13 Гц, но это не важно. для определения более точно частотной отстройки следующую часть принятого сигнала(преамбулы) перемножаю с комплексно-сопряженным, получаю сигнал на частоте отстройки. а вот как далее быть, я не совсем понимаю, о чем и спрашиваю у вас...
petrov
http://electronix.ru/forum/index.php?s=&am...t&p=1141738

Обсуждалось уже в вашей же теме, по выходам банка фильтров согласованных с преамбулой значение частоты уточняется интерполяцией.
Виктор39
Цитата(petrov @ Oct 10 2013, 14:24) *
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 интерполяции. но он оценивает расположение пика только один раз, но как я понял, оценка должна происходить итерационно. спасибо.

CODE
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
Попробуйте для начала метод из статьи "Fast, Accurate Frequency Estimators" Eric Jacobsen and Peter Kootsookos.
Виктор39
Цитата(petrov @ Oct 11 2013, 12:12) *
Попробуйте для начала метод из статьи "Fast, Accurate Frequency Estimators" Eric Jacobsen and Peter Kootsookos.

я пробовал этот метод первым делом, потому что он проще. как я понял, в нем оценка происходит только один раз, а в QIFFT, наверное, несколько раз. могли бы вы сказать, какой из методов более точный? судя по моим тестам QIFFT более точен, хотя я так и не разобрался еще, как его правильно до конца сделать...

и еще, мне очень сложно подобрать длину окна FFT, чтобы это было не сильно вычислительно затратно, и чтобы точность не сильно страдала. понимаю, что все относительно, но не могли бы вы мне посоветовать, какую длину лучше выбирать. я остановился на длине окна 400 отсчетов (100 символов, Fs = 9600), Zero-padding factor = 4 т.е.1600 точек FFT.
petrov
Цитата(Виктор39 @ Oct 11 2013, 14:17) *
я пробовал этот метод первым делом


Вывод какой? Не хватает точности?


Ещё учитывайте что не чистый синус оцениваем, а преамбула+многолучёвка+данные+помехи, сигнал с совсем другой функцией неопределённости, не буду утверждать, но возможно суперточные методы для синусов здесь вообще смысла не имеют.


Цитата(Виктор39 @ Oct 11 2013, 14:17) *
и еще, мне очень сложно подобрать длину окна FFT, чтобы это было не сильно вычислительно затратно, и чтобы точность не сильно страдала. понимаю, что все относительно, но не могли бы вы мне посоветовать, какую длину лучше выбирать. я остановился на длине окна 400 отсчетов (100 символов, Fs = 9600), Zero-padding factor = 4 т.е.1600 точек FFT.


Окно - это ваша преамбула, размер FFT не должен быть равен размеру окна, определяется только максимальной расстройкой по частоте и интерполяцией(если требуется) по частоте, т. е. количеством фильтров в банке по выходам которых вы ловите максимальный пик и вычисляете дробный максимум по частоте в его окрестности, в лоб можно вообще без FFT сделать.
Виктор39
Цитата(petrov @ Oct 11 2013, 15:07) *
Окно - это ваша преамбула, размер FFT не должен быть равен размеру окна, определяется только максимальной расстройкой по частоте и интерполяцией(если требуется) по частоте, т. е. количеством фильтров в банке по выходам которых вы ловите максимальный пик и вычисляете дробный максимум по частоте в его окрестности, в лоб можно вообще без FFT сделать.

не могу понять, как можно обойтись без FFT. имеем частотную расстройку +/- 90 Гц, 7 фильтров, следовательно точность 26 Гц. но, для того, чтобы интерполировать спектр, мне нужно иметь сигнал в частотной области. банк фильтров мне всего лишь может дать сигнал на частоте отстройки (КФ при пиковом значении). что мне в таком случае интерполировать?
petrov
Цитата(Виктор39 @ Oct 11 2013, 17:40) *
не могу понять, как можно обойтись без FFT. имеем частотную расстройку +/- 90 Гц, 7 фильтров, следовательно точность 26 Гц. но, для того, чтобы интерполировать спектр, мне нужно иметь сигнал в частотной области. банк фильтров мне всего лишь может дать сигнал на частоте отстройки (КФ при пиковом значении). что мне в таком случае интерполировать?


FFT(скользящее, нужно чтобы не пропустить пик АКФ) всего лишь штука эквивалентная картинке по ссылке https://ccrma.stanford.edu/~jos/sasp/Filter...rpretation.html

Частотная область - это выходы фильтров. Окно - это КИХ ФНЧ , в нашем случае оно должны быть согласовано с преамбулой. Расстояние по частоте между фильтрами 1/L, где L - длительность преамбулы, это минимум без частотной интерполяции.
des00
Цитата(Виктор39 @ Oct 11 2013, 03:00) *
пробую делать квадратичную интерполяцию

занятный документ-диссертация : Phase and Frequency Estimation: High-Accuracy and Low-Complexity Techniques by Yizheng Liao
гуглиться свободно, есть описание и сравнение методов оценивания. бонусом в конце документа матлабовский код для ML + Secand метода
fontp
QUOTE (Виктор39 @ Oct 11 2013, 17:40) *
не могу понять, как можно обойтись без FFT. имеем частотную расстройку +/- 90 Гц, 7 фильтров, следовательно точность 26 Гц. но, для того, чтобы интерполировать спектр, мне нужно иметь сигнал в частотной области. банк фильтров мне всего лишь может дать сигнал на частоте отстройки (КФ при пиковом значении). что мне в таком случае интерполировать?


Будем рассуждать логически.
Нам известна предельная оценка Крамера-Рао, по которой можно оценить длину преамбулы при заданном отношении сигнал шум и требованию к точности оценки частоты. Никаким способом вы не сможете оценить ее более точно, что бы не мнил об этом ваш заказчик или начальник. Для работы ФАПЧ без переходного периода, обычно достаточно точности 1 гц - вот и оцените необходимую длину преамбулы. Меньшая работать не может.
Теоретически увеличивая длину преамбулы, можно в разумных пределах повышать точность измерения частоты, в соответствии с предельной оценкой. Однако в этом деле тоже нужно иметь чувство меры, ибо на слишком длинном периоде частота будет нестабильна. Нельзя увеличивать длительность преамбулы за пределы времени когерентности несущей. В вашем случае dopler spread лучей вообще может разрушить модель при которой работает интерполяция, но тогда вы частоту несущей не сможете определить уже никаким другим способом и ваша задача безнадежна. Будем считать, что преамбула передается периодически и несмотря на сильно кривую многолучевость, вклады в спект разных лучей по крайней мере дадут один единственный пик в спектре при данном разрешении анализа. Тогда вы можете захватить частоту по крайней мере иногда, за несколько попыток,только еще нужно приделать оценку сигнал/шум оценки, чтобы отличить этот случай, от случая, огда обнаружить преамбулу не удалось.

Способов интерполяции спекта много. В случае малой частотной расстройки (по отношению к частоте Найквиста) можно использовать линейную
интерполяцию по ДПФ (как в "Fast, Accurate Frequency Estimators" Eric Jacobsen and Peter Kootsookos.). Если расстройка большая - можно использовать другие варианты, например, ту же квадратичную. Но есть и другие методы.
Многократно проводить анализ и интерполяцию с разной детальностью обычно нет смысла, поскольку предельная оценка по Крамеру-Рао от этого не улучшается. Снижается только систематическая ошибка присущая методу, но она обычна мала в рабочей области сигнал/шум модемов. Многократно анализ с увеличивающейся детальностью (то есть кратность добавления нулей в QIF) применяют только когда систематическая ошибка больше случайной. FFT редко есть смысл использовать, обычно нужно использовать ДПФ в более узком диапазоне частот и переформулировать задачу в реализации как банк фильтров. Интерполяция позволяет получить оценку частоты на порядок и больше более точную , чем бин ДПФ.
Виктор39
Цитата(petrov @ Oct 11 2013, 15:07) *
в лоб можно вообще без FFT сделать.
в лоб не получается. слишком короткая у меня преамбула используемая в банке фильтров для обнаружение сигнала. 48 символов (4 отсчета на символ), 192 отсчета - маловато получается.

Цитата(des00 @ Oct 12 2013, 18:58) *
занятный документ-диссертация : 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 символьной ИХ.? простите, что так сложно объясняю..
Виктор39
получается, что к алгоритму DDE(data directed estimation) не возможно прикрутить никак непрерывную(или периодическую) частотную синхронизацию?!
alex_os
Цитата(Виктор39 @ Oct 16 2013, 18:27) *
получается, что к алгоритму DDE(data directed estimation) не возможно прикрутить никак непрерывную(или периодическую) частотную синхронизацию?!

Почему нельзя?? Оценка ИХ канала есть. Смещение несущей будет проявляться как вращение коэф ИХ во времени. Берете максимальный коэф. в ИХ и смотрите куда вращается. Для компенсации большой начальной расстройки не подойдет, т.к. DDE развалится, а для устранения влияния медленного ухода частоты в следствии допплера или еще чего-либо самое то.
fontp
QUOTE (Виктор39 @ Oct 16 2013, 18:27) *
получается, что к алгоритму DDE(data directed estimation) не возможно прикрутить никак непрерывную(или периодическую) частотную синхронизацию?!


Вы же говорили, что у вас есть фапч. Вот пусть узкополосный фапч с tanlock по мягким решениям и управляет входным ddc, убирая медленное вращени созвездия. А внутри петли пусть себе работает dde. Чтобы этот узкополостный фапч схватился, ему нужно подсунуть начальное значение частоты с точностью порядка его шумовой полосы. Чтобы определить их один раз ( а не непрерывно или периодически ) и нужен feedforward алгоритм по преамбуле. Если у фапч полоса достаточно узкая (фапч медленней времени замираний ) он не почувствует что там вытворяет dde или fse эквалайзер.
Стучать по петле обратной связи периодически или непрерывно, конечно, не очень
Виктор39
Цитата(fontp @ Oct 17 2013, 18:04) *
Вы же говорили, что у вас есть фапч. Вот пусть узкополосный фапч с tanlock по мягким решениям и управляет входным ddc, убирая медленное вращени созвездия. А внутри петли пусть себе работает dde. Чтобы этот узкополостный фапч схватился, ему нужно подсунуть начальное значение частоты с точностью порядка его шумовой полосы. Чтобы определить их один раз ( а не непрерывно или периодически ) и нужен feedforward алгоритм по преамбуле. Если у фапч полоса достаточно узкая (фапч медленней времени замираний ) он не почувствует что там вытворяет dde или fse эквалайзер.
Стучать по петле обратной связи периодически или непрерывно, конечно, не очень

у меня фапч встроен только в схему где применяется DFE. если я правильно понимаю, то tanlock loop по несущей работает по одному отсчету на символ. а на вход DDE у меня поступает 2 отсчета на символ. пробовал сделать предварительную синхронизацию Гарднера совместно с tanlock по несущей, и на вход DDE подавать уже один отсчет на символ, но это значительно ухудшает качество работы DDE. что я не правильно делаю?


Цитата(alex_os @ Oct 17 2013, 07:36) *
Почему нельзя?? Оценка ИХ канала есть. Смещение несущей будет проявляться как вращение коэф ИХ во времени. Берете максимальный коэф. в ИХ и смотрите куда вращается. Для компенсации большой начальной расстройки не подойдет, т.к. DDE развалится, а для устранения влияния медленного ухода частоты в следствии допплера или еще чего-либо самое то.

очень интересно. у меня две ИХ для четных и нечетных отсчетов. мне нужно максимальный коэффициент с учетом двух ИХ брать для его оценки вращения (типа так max(oddWeight + evenWeight))? и еще вот такая проблемка. с течением времени степень влияния лучей изменяется. т.е. может так случиться, что в какой-то момент времени максимальный коэффициент ИХ перестанет быть максимальным. это нужно как-то учитывать?
Виктор39
столкнулся со следующей проблемой: алгоритм DDE способен работать даже при небольших соотношениях сигнал/шум, в том случае, если изначально ИХ канала рассчитана более-менее хорошо. в тех случаях, когда ИХ измерена плохо, либо алгоритму DDE удается скорректировать ИХ в течение нескольких последующих кадров, либо он просто разваливается. ИХ канала при маленьком отношении сигнал/шум (2-5дБ) измеряется очень плохо. есть ли способы которые как-то уменьшают влияние шума на рассчитываемую ИХ? я имею ввиду, может быть можно рассчитывать ИХ не на N известных отсчетах(пр N известных отсчетах длинна ИХ равна M = N/2 - 1), а на большем интервале времени.? т.е. взять больше количество известных отсчетов (N) для неизменной длинны ИХ (M). преамбула позволяет это сделать.
Виктор39
можете ли мне сказать, правильно ли я задаю шум в канале? в стандарте мне указан уровень шума в полосе 3 кГц. в моей модельке на выходе передатчика частота дискретизации 19,2 кГц. правильно ли будет добавить уровень шума следующим образом:
SNR = SNR - A + B;
где A = 10*log10(9600/3000);
B = 10*log10(E_full/E_3000), где E_full - мощность всего сигнала, E_3000 - мощность сигнала в полосе 3 кГц
Виктор39
я никак не могу найти алгоритм, который мог бы работать с типом сигнала, где биты передаются с помощью ортогональных последовательностей Уолша(MIL-STD-188-141B, ст.284, BW0, BW1, BW3, BW4). подскажите, пожалуйста, какой алгоритм нужно использовать и/или где об этом можно почитать ?!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.