dasha39 0 23 сентября, 2013 Опубликовано 23 сентября, 2013 (изменено) · Жалоба Ну очевидно тут блочная разновидность 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 ? Изменено 23 сентября, 2013 пользователем Виктор39 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex_os 0 23 сентября, 2013 Опубликовано 23 сентября, 2013 · Жалоба т.е. для 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 прикрутите а потом его в блочный легко сможете переделать . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 24 сентября, 2013 Опубликовано 24 сентября, 2013 (изменено) · Жалоба 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) Да вы обычный 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))? Изменено 24 сентября, 2013 пользователем Виктор39 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба 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 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба 1)разобрался с реализацией SECOND EXAMPLE OF DEMODULATION TECHNICUE(data-directed equalization) в случае одного отсчета на символ. схема работает, как мне кажется, очень даже не плохо. только вот в реальных условиях у меня используется 2 отсчета на символ. а когда пытаюсь схему адаптировать к двум отсчетам на символ, все работает очень плохо. может подскажете, что я не правильно делаю? в Annex D, пункт 2 (f) имеется следующая информация: если я правильно понимаю суть написанного, то я должен отдельно рассчитать ИХ канала для четных и нечетных отсчетов. затем просуммировать их и поделить на два, и таким образом в результате я буду иметь символьную ИХ канала. также должен поступить и с принимаемыми данными, т.е. каждые очередные два отсчета просуммировать и поделить на два. реализуя модель таким образом, в результате имею большой процент ошибок даже на идеальных каналах, когда модулируемый сигнал пропускается только через фильтр с характеристикой приподнятого косинуса. что я делаю не так? 2)при вычисление ИХ канала, главный (центральный) коэффициент получается крайним. и это не есть хорошо. так как при небольшом сбое символьной синхронизации, он сразу же убежит за край... после вычисления ИХ канала, мне его нужно как-то сдвигать в центр? 1. Усреднение двух фаз ИХ это както сомнительно. Самое простое и возможно самое лучшее - оценивать ИХ для обоих фаз, но для оценки переданных данных использовать только одну, ту у которой меньшая ошибка получается в процессе измерения ИХ. Центрирование максимума Их должно легко получаться корректировкой системы синхронизации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба Усреднение двух фаз ИХ это както сомнительно. 1) а усреднение двух фаз принимаемых данных это нормально? Самое простое и возможно самое лучшее - оценивать ИХ для обоих фаз, но для оценки переданных данных использовать только одну, ту у которой меньшая ошибка получается в процессе измерения ИХ. 2) не очень понимаю, как мне определить ту лучшую из двух оцененных ИХ. Как определить ИХ с наименьшей ошибкой? или я как обычно туплю? Центрирование максимума Их должно легко получаться корректировкой системы синхронизации. 3) можете объяснить, как это в данном случае может быть достигнуто? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex_os 0 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба 1) а усреднение двух фаз принимаемых данных это нормально? Мне кажется это не правильно, т.к. такое усреднение само по себе внесет приличную межсимвольную интерференцию. 2) не очень понимаю, как мне определить ту лучшую из двух оцененных ИХ. Как определить ИХ с наименьшей ошибкой? или я как обычно туплю? Ну есть у Вас в процессе измерения измерения ИХ разница между принятыми отсчетами и детектированными символами свернутыми с ИХ : (R(i:i+16) - Restim(i:i+16)). Суммируете эти квадраты модулей этих ошибок в каждом из каналов, где сумма меньше - тот канал удачнее и его использовать для оценки переданных символов. Кажется была статья или патент какой-то на эту тему. 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 26 сентября, 2013 Опубликовано 26 сентября, 2013 (изменено) · Жалоба Ну есть у Вас в процессе измерения измерения ИХ разница между принятыми отсчетами и детектированными символами свернутыми с ИХ : (R(i:i+16) - Restim(i:i+16)). Суммируете эти квадраты модулей этих ошибок в каждом из каналов, где сумма меньше - тот канал удачнее и его использовать для оценки переданных символов. Кажется была статья или патент какой-то на эту тему. спасибо. я идею понял. но не могли бы вы сказать, как эта статья или патент может называться. хотелось бы найти, почитать. В процессе начальной синхронизации наверняка ищется максимум корреляции входных отсчетов с преамбулой. Скажем максимум наблюдается в 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. я не пробовал реализовать предложенный вами данный алгоритм, но вот какие проблемы в реализации я вижу. если я правильно понимаю, то 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. а как все это вместить в одну матрицу, мне даже в голову не приходит. Изменено 26 сентября, 2013 пользователем Виктор39 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex_os 0 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба я не пробовал реализовать предложенный вами данный алгоритм, но вот какие проблемы в реализации я вижу. если я правильно понимаю, то 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 - куча статей и патентов находится... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба Cоответственно, ни что не мешает записать две таких системы для четных и для нечетных отсчетов (W1,W2, R будут разные) таким образом получаем систему с тем же числом неизвестных но в два раза больше уравнений, ее и решаем. Возможно это и имеется ввиду: Вообще погуглите data directed estimation hf modems - куча статей и патентов находится... спасибо. попробовал так и сделать, если я все правильно понял. алгоритм работает. матрицы получаются только в два раза больше,а четная и нечетная оценка канала обновляется независимо друг от друга. только вот одна проблемка, как мне кажется, данный алгоритм требует достаточно стабильной тактовой(символьной) синхронизации. не удается удерживать схему в рабочем состояние при нестабильной тактовой с помощью обычного дрейфования "центрального" коэффициента ИХ. может быть из-за того, что четная и нечетная ИХ как-бы независимы друг от друга. надо поискать и почитать еще статьи, как вы и советуете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 27 сентября, 2013 Опубликовано 27 сентября, 2013 · Жалоба я вчера был не прав. данный алгоритм (data directed estimation) способен удерживать тактовую синхронизацию, т.е. значимые коэффициенты ИХ дрейфуют при нестабильной тактовой, и алгоритм остается устойчивым до тех пор, пока значимые коэффициенты ИХ не сползают за край. в данном стандарте используется пакетная передача, а стабильность тактовой приемника достаточно высокая, чтобы позволить мне не реализовывать тактовую. и кстати, большое спасибо petrov-у за этот алгоритм и alex_os за помощь в его реализации. кажется, что он вполне устраивает меня по качеству работы. но, как я понял, требует fpga ресурса. вот еще вопросы, которые остались у меня. 1) в данном приемопередатчике должен быть предусмотрен помимо пакетной передачи еще и режим потоковой передачи данных. там используются такие же виды сигнала, как и в стандарте описанном выше, но только с тем отличием, что преамбулы используются очень большие. потоковая передача требует от меня тактовой синхронизации. у меня на этот счет есть два предположения, как это сделать. первый, это использовать тактовую гарднера. тактовая по гарднеру, как мне помниться, требует определенного времени "устаканивания". преамбула мне позволяет выделить на устаканивание тактовой 300-400 символов. используя данный метод синхронизации я смогу уменьшить матрицы в алгоритме data directed estimation, работая по одному отсчету на символ. второй способ, это периодически просто значимые коэффициенты ИХ(центр масс) сдвигать в центр. можете сказать, что предпочтительней? какие подводные камни мне не видны? Есть быстрое преобразование Уолша-Адамара. 2) вопрос по другому типу сигнала. там используются передача данных с помощью известных 16-ти разрядных ортогональных последовательностей Уолша, как я и писал выше. вы мне посоветовали использовать каким-то образом быстрое преобразование Уолша-Адамара. вот никак не могу понять, как я эту информацию могу использовать. можно эту информацию использовать применительно к DFE эквалайезру, либо только уже после него я могу выдавить определенную полезную информацию? можете дать какую-нибудь ссылку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 2 октября, 2013 Опубликовано 2 октября, 2013 · Жалоба добрый день. так и не смог придумать, как можно применительно к эквалайзеру использовать ортогональные последовательности Уолша... но вот в чем у меня вопрос. передаваемый сигнал до скремблирования 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 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба добрый день. так и не смог придумать, как можно применительно к эквалайзеру использовать ортогональные последовательности Уолша... Та разновидность сигнала, где Уолшем передаются биты, в эквалайзере не нуждается, там нечто-то вроде Rake receiver нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dasha39 0 4 октября, 2013 Опубликовано 4 октября, 2013 · Жалоба Та разновидность сигнала, где Уолшем передаются биты, в эквалайзере не нуждается, там нечто-то вроде Rake receiver нужно. т.е. можно просто использовать банк фильтров(корреляторов)? или я что-то не правильно понял Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex_os 0 4 октября, 2013 Опубликовано 4 октября, 2013 · Жалоба т.е. можно просто использовать банк фильтров(корреляторов)? или я что-то не правильно понял Ну да, только главная засада тут в том, что память канала примерно соизмерима с длительностью символа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться