Цитата(petrov @ Oct 9 2009, 03:19)

Всё же лучше использовать критерий Годарда, если хочется сэкономить на вычислениях то можно взять в критерии Годарда знак после разности квадрата модуля и константы(можно также использовать разность модуля и корня квадратного из константы), при этом созвездие так же разъедется, это легко лечится подбором константы.
Ещё после умножения входного вектора на знак разности квадрата модуля и константы так же можно только знаки квадратур оставить избавившись тем самым от умножения.
поковырялся тут с эквалайзерами в матлабе и железе, если интересно вот мои выкладки (часть основана только на матлабе, часть на матлабе и железе). Использовался канал со спектральным нулем в 15дБ и не равномерностью в полосе пропускания ~5Дб.
проанализировал следующие детекторы
Код
1. Goddard
E = y*(|y|^2 - R), где
y = y_re + j*y_im
R = E[|const|^4]/E[|const|^2]
2. Simplify Goddard
E = sign_y*(|y|^2 - R), где
sign_y = sign(y_re) + j*sign(y_im)
R = E[|const|^4]/E[|const|^2]
3. Sign Goddard
E = sign_y*(|y_re| + |y_im| - R), где
sign_y = sign(y_re) + j*sign(y_im)
R = sqrt(Ymax^2 + Xmax^2)
4. Sign Goddard Stop And Go
E = sign_y*f*(|y_re| + |y_im| - R), где
sign_y = sign(y_re) + j*sign(y_im)
R = sqrt(Ymin^2 + Xmin^2), if |y_re| + |y_im| < sqrt(Ymid^2 + Xmid^2)
= sqrt(Ymax^2 + Xmax^2), if |y_re| + |y_im| >= sqrt(Ymid^2 + Xmid^2)
f = 0, if sqrt(Ymin^2 + Xmin^2)< |y_re| + |y_im| < sqrt(Ymid^2 + Xmid^2)
= 1, else
5. MMA (Multi Modulus Algorithm)
E = y_re*(y_re^2 - R_re) + j*y_im*(y_im^2 - R_im), где
R_re = E[const_re^4]/E[const_re^2]
R_im = E[const_im^4]/E[const_im^2]
6. Simplify MMA
E = sign(y_re)*(y_re^2 - R_re) + j*sign(y_im)*(y_im^2 - R_im)), где
R_re = E[const_re^4]/E[const_re^2]
R_im = E[const_im^4]/E[const_im^2]
7. SMMA (Sliced Multi Modulus Algorithm)
E = y_re*(y_re^2 - a_re^c*R_re) + j*y_im*(y_im^2 - a_im^c*cR_im), где
a_re - оценка сигнала y_re
a_im - оценка сигнала y_im
R_re = E[const_re^4]/E[const_re^(2+c)]
R_im = E[const_im^4]/E[const_im^(2+c)]
8. Simplify SMMA
E = sign(y_re)*(y_re^2 - a_re^c*R_re) + j*sign(y_im)*(y_im^2 - a_im^c*cR_im), где
a_re - оценка сигнала y_re
a_im - оценка сигнала y_im
R_re = E[const_re^4]/E[const_re^(2+c)]
R_im = E[const_im^4]/E[const_im^(2+c)]
9. PC-SGA
DD детектор + Stop And Go алгоритм на основе детектора SATO
Все слепые методы требуют уменьшения mu если используются только они, но лучше при достижении определенного MSE включать DD детектор. Порог включения уровень ~50% от интервала принятия жесткого решения.
Код
Для QAM16 :
Goddard, Sign Goddard : качество работы нормальное
Simplify Goddard : поворачивает созвездие
Sign Goddard Stop And Go : сжимает и поворачивает созвездие
MMA, Simplify MMA : качество работы хорошее, остаточный MSE немного меньше чем у Goddard
SMMA, Simplify SMMA : для c = 0.5/1 качество работы хорошее, остаточный MSE раза в 2 меньше чем у MMA
PC-SGA не смог развернуть созвездие, хотя квадрат созвездия как то держал
DD не смог развернуть созвездие
Код
Goddard : качество работы нормальное
Sign Goddard : качество работы хуже чем Goddard
Simplify Goddard : поворачивает созвездие
Sign Goddard Stop And Go : даже не проверялся
MMA, Simplify MMA : качество работы хорошее, остаточный MSE немного меньше чем у Goddard
SMMA, Simplify SMMA : для c = 0.5/1 качество работы хорошее, остаточный MSE раза в 2 меньше чем у MMA
PC-SGA не смог развернуть созвездие, хотя квадрат созвездия как то держал
DD не смог развернуть созвездие
Для всех алгоритмов где используется знак надо уменьшать mu, т.к. это уменьшает дрожание коэффициентов, дает меньший mse и это дает более хорошие характеристики переключения между детекторами. Также у таких алгоритмов есть особенность в том, что остаточный MSE много выше чем у базового алгоритма. Это надо учитывать при работе: Например Simplify MMA на кам16 не дает MSE меньше чем 0.004. Но при работе в канале с сильными искажениями данный недостаток не мешает выходить на уровень, достаточный для включения DD детектора. Но при работе на КАМ64 выяснилась следующая неприятность : созвездие расширяется, особенно это заметно при знаковых методах. Настолько что предложенный метод переключения алгоритмов адаптации при знаковом методе вообще не работает.
для LMS алгоритма уменьшение mu для знаковых алгоритмов вообще не дает результата на MSE, а для честных алгоритмов созвездие немного расширяется, но при этом MSE остается достаточно низким. для знакового LMS алгоритма (sign err LMS) детекторы одинаковые(как и должно быть по логике вещей), созвездие сильно расширяется, остаточный mse очень высокий, но высокий он не из-за того что с созвездием все плохо, а из-за того что созвездия шире. Варианты либо делать честный LMS и честные алгоритмы, либо немного подрихтовать пороги в алгоритме. Рихтовка порогов помогает но не сильно, все равно созвездите сильно раздувает.
ДЛЯ SMMA АЛГОРИТМА : чем С ближе к единице тем MSE после сходимости меньше (сравнивал с MMA), но кривая сходимости идет более плавно. Т.е. время сходимости увеличивается. При с = 0.5 сходимость схожа с MMA, а MSE меньше
MMS и SMMA не имеют проблемы поворота созвездия, в отличие от годдарда
PS. Для метода PC SGA пороги надо выбирать как у авторов Picchi & Prati, в приведенной выше статье пороги для старших камов выбираются не верно, и созвездие раздувает !!!
PPS. MSE считается по ошибке DD детектора с фиксированным патерном созвездия.