|
|
 |
Ответов
(1 - 45)
|
May 18 2011, 11:47
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-10-07
Пользователь №: 31 658

|
Дело в том, что я уже почти реализовал это в виде двух эквалайзеров, один для действительной части, другой для мнимой, но сейчас сомнения появились в том правильно это или нет. Цитата Делайте для каждого канала свой эквалайзер, в этом случае можно избежать проблемы разбаланса между квадратурами, но больше вычислительных затрат Т.е. если я сделаю скажем для каждой компоненты I и Q свой эквалайзер всё должно работать? Цитата В комплексном виде должно работать, на форуме модели в симулинке выкладывались. Мне нужно это реализовать на C( а конвертация из симулинка в C не годится). Первоначально планирую в Matlab написать в виде m файла. А где можно прочесть про реализацию в комплексном виде?
Сообщение отредактировал Wanderer.I - May 18 2011, 11:52
|
|
|
|
|
May 18 2011, 12:25
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-10-07
Пользователь №: 31 658

|
Цитата Ну а мне на VHDL, модели симуликовские они для понимания исключительно В чём их наглядность интересно? Если это чёрный ящик по сути?
|
|
|
|
|
May 18 2011, 12:47
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-10-07
Пользователь №: 31 658

|
Цитата(petrov @ May 18 2011, 15:30)  С чего вы взяли? Каким образом можно посмотреть каким образом работает данный блок более детально? Ведь максимум можно увидеть пару кирпичиков, достаточно много функциональных
|
|
|
|
|
May 18 2011, 13:02
|
Гуру
     
Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937

|
Цитата(Serg76 @ May 18 2011, 16:37)  Схема квадратурной дискретизации, когда в аналоговом виде осуществляется гетеродинирование и НЧ фильтрация в каждом из подканалов и затем уже независимая оцифровка каждой из компонент. Разбаланс возникает из-за неидеальности характеристик двух плеч. Но, правда, такая схема уже не находит применения, сейчас сигнал дискретизируется непосредственно уже по ПЧ, с последующей обработкой в цифре. У автора топика не об этом вопрос был. Цитата(Wanderer.I @ May 18 2011, 16:47)  Каким образом можно посмотреть каким образом работает данный блок более детально? Ведь максимум можно увидеть пару кирпичиков, достаточно много функциональных Вы слишком предвзято относитесь, на C вы можете пользоваться дллками скрытыми, можете руками делать, и в симулинке так же.
|
|
|
|
|
May 18 2011, 13:10
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-10-07
Пользователь №: 31 658

|
Цитата Дело в том, что я уже почти реализовал это в виде двух эквалайзеров, один для действительной части, другой для мнимой, но сейчас сомнения появились в том правильно это или нет. Цитата Делайте для каждого канала свой эквалайзер, в этом случае можно избежать проблемы разбаланса между квадратурами, но больше вычислительных затрат
Т.е. если я сделаю скажем для каждой компоненты I и Q свой эквалайзер всё должно работать? Цитата В комплексном виде должно работать, на форуме модели в симулинке выкладывались.
Мне нужно это реализовать на C( а конвертация из симулинка в C не годится). Первоначально планирую в Matlab написать в виде m файла. А где можно прочесть про реализацию в комплексном виде? Я видимо немного не так понял тебя, я думал речь идёт о готовых блоках. Теперь всё ясно. Сейчас поиском займусь тогда, спасибо! Просто всё это дело надо ещё в фикспоинт уложить, поэтому вариант с двумя каналами будет проще.
Сообщение отредактировал Wanderer.I - May 18 2011, 13:20
|
|
|
|
|
May 18 2011, 16:17
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(petrov @ May 18 2011, 20:07)  Может чего-то не понимаю, но ИМХО неправильно это, поэтому и вопрос был по конкретной схеме эквалайзера. Присоединяюсь! Например, ИХ канала h = [1, 0+0.5i] как можно вещественными коэффициентами это скорректировать ?!
--------------------
ну не художники мы...
|
|
|
|
|
May 18 2011, 16:21
|
Профессионал
    
Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775

|
Цитата(petrov @ May 18 2011, 19:07)  Может чего-то не понимаю, но ИМХО неправильно это, поэтому и вопрос был по конкретной схеме эквалайзера. Почему неправильно? При подстройке к-ов корректора для каждого из каналов участвует только одна, соответствующая данному квадратурному каналу, проекция вектора ошибки, а если использовать в корректоре для обоих каналов одну и ту же импульсную характеристику (ИХ), то тогда при расчете к-ов ИХ необходимо учитывать общий вклад проекций ошибок обоих каналов. Вроде так где-то, у меня работали оба варианта Цитата(alex_os @ May 18 2011, 19:17)  Присоединяюсь! Например, ИХ канала h = [1, 0+0.5i] как можно вещественными коэффициентами это скорректировать ?! Отдельно корректировать мнимую и вещественную часть h
|
|
|
|
|
May 18 2011, 17:41
|
Гуру
     
Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937

|
Цитата(Serg76 @ May 18 2011, 20:55)  Может не так объясняю, попробую еще раз. Демодулятор построен по квадратурной схеме, в котором для коррекции МСИ используются 2 корректора, один для коррекции в синфазном канале, другой в квадратурном. Подстройка ИХ каждого из каналов осуществляется независимо, по соответствующим проекциям вектора ошибки. Обе эти ИХ в итоге и будут давать общую комплексную ИХ канала. Или я в чем-то неправ? Сигнал комплексный, ИХ эквалайхера комплексная, умножаем (a+bi)*(c+di)=(ac-bd)+(bc+ad)i, очевидно что в действительную часть выходного сигнала входит как действительная так и мнимая часть входного, так и в мнимую часть выходного входит как действительная так и мнимая часть входного сигнала, если у вас так значит у вас комплексный эквалайзер.
|
|
|
|
|
May 19 2011, 13:56
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-10-07
Пользователь №: 31 658

|
Вот у меня тоже возникли подозрения, что обработка по отдельности квадратур - это неправильно. Так как банальная операция умножения двух комплексных чисел( которая используется в LMS) не равна произведению мнимой и действительной части в отдельности.
|
|
|
|
|
May 22 2011, 10:37
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-10-07
Пользователь №: 31 658

|
При реализации алгоритма согласно "Adaptive Filter Theory. Simon Naykin":  Данные формулы получены из комплексного представления сигнала. При реализации в Matlab получается, что всё расходится: Код b = [ 0.00001 0.0004 0.0002 -0.0010 0.0010 0.0039 -0.0120 ... -0.0300 -0.1800 -0.1000 -0.0300 0.0020 0.0200 0.0500 ... 0.0950 -0.0200 -0.3500 -0.3000 -0.1000 0.3970 0.3500 ... -0.0300 -0.1800 -0.0223 -0.0100 0.0000205 -0.00000039 -0.000000017... 0.000001 0.00000008];
x = randint(10000,1,4); y = modmap(x,1,1,'qask',4);
TXI = y(:,1); TXQ = y(:,2);
I = conv(TXI, b); Q = conv(TXQ, b);
%scatterplot(TXI(15:end)+j*TXQ(15:end));
%I = awgn(I,10,'measured'); %Q = awgn(Q,10,'measured');
%scatterplot(I(15:end)+j*Q(15:end));
WI=zeros(55,1); WQ=zeros(55,1);
mu=0.01;
RX_EQ_I=zeros(1,1); RX_EQ_Q=zeros(1,1);
RXI = vertcat( zeros(55,1), I(1:end)); RXQ = vertcat( zeros(55,1), Q(1:end));
%компенсация задержки в канале TXI_D = vertcat( zeros(45,1), TXI ); TXQ_D = vertcat( zeros(45,1), TXQ );
for n=1:5000 YI=WI'*RXI(n:n+55-1)-WQ'*RXQ(n:n+55-1); YQ=WI'*RXQ(n:n+55-1)+WQ'*RXI(n:n+55-1); EI=TXI_D(n)-YI; EQ=TXQ_D(n)-YQ; WI=WI+mu*( EI*RXI(n:n+55-1)-EQ*RXQ(n:n+55-1)); WQ=WQ+mu*( EI*RXQ(n:n+55-1)+EQ*RXI(n:n+55-1)); RX_EQ_I=[RX_EQ_I YI]; RX_EQ_Q=[RX_EQ_Q YQ]; end
scatterplot(RX_EQ_I(4000:end)+j*RX_EQ_Q(4000:end)); Может я чего-то не так понял?
|
|
|
|
|
May 23 2011, 06:10
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(Serg76 @ May 23 2011, 09:44)  Это работает в плохих каналах АБГШ, а также в каналах для проводных модемов с плотными сигнальными созвездиями (v.32bis)  Я бы сказал, что это хорошо работает для каналов, AЧХ которых симметрична относительно несущей и как-то работает для всех остальных каналов. Например: x - последовательность комплексных символов на выходе передатчика; y - вход корректора; h = [1, 0.1i] - ИХ канала. Тогда y_re(i) = x_re(i) - 0.1 * x_im(i-1) т.е. для приведенной ИХ, если рассматривать квадратуры не зависимо друг от друга, межсимвольная интерференция выглядит как помеха от квадратурного канала и ни какими силами ее не возможно отфильтровать .
--------------------
ну не художники мы...
|
|
|
|
|
May 23 2011, 07:51
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-10-07
Пользователь №: 31 658

|
Цитата(alex_os @ May 23 2011, 10:10)  Я бы сказал, что это хорошо работает для каналов, AЧХ которых симметрична относительно несущей и как-то работает для всех остальных каналов. Например: x - последовательность комплексных символов на выходе передатчика; y - вход корректора; h = [1, 0.1i] - ИХ канала. Тогда y_re(i) = x_re(i) - 0.1 * x_im(i-1)
т.е. для приведенной ИХ, если рассматривать квадратуры не зависимо друг от друга, межсимвольная интерференция выглядит как помеха от квадратурного канала и ни какими силами ее не возможно отфильтровать . Т.е. к примеру качестве модели канала, лучше использовать фильтр с комплексной импульсной характеристикой и чтобы комплексная часть и мнимые не совпадали?
|
|
|
|
|
May 23 2011, 08:22
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(Wanderer.I @ May 23 2011, 11:51)  Т.е. к примеру качестве модели канала, лучше использовать фильтр с комплексной импульсной характеристикой и чтобы комплексная часть и мнимые не совпадали? Конечно!
--------------------
ну не художники мы...
|
|
|
|
|
May 23 2011, 08:35
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-10-07
Пользователь №: 31 658

|
Вот только после изучения всего добра, всё равно не заработало ничего, всё расходится.  Шаг я так понимаю 0.01 вполне нормальный.А вот неправильный вариант успешно работает. То ли дело в том что импульсная характеристика канала для мнимой и действительной части у меня одинаковая. Буду дальше экспериментировать с несимметричной.
|
|
|
|
|
May 23 2011, 10:25
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата Wanderer.I: Вот только после изучения всего добра, всё равно не заработало ничего, всё расходится. sad.gif Шаг я так понимаю 0.01 вполне нормальный. Конечно, правильным является использование комплексного алгоритма. Не надо забывать, что либо e, либо u должны быть комплексно сопряженные в формуле пересчета коэффициентов. Что касается шага - он вообще говоря, зависит от длины фильтра. Советую использовать nlms, где в качестве шага используется величина = 1/(сумма квадратов значений линии задержки).
Сообщение отредактировал thermit - May 23 2011, 10:27
|
|
|
|
|
May 23 2011, 20:44
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-10-07
Пользователь №: 31 658

|
Цитата(thermit @ May 23 2011, 14:25)  Конечно, правильным является использование комплексного алгоритма. Не надо забывать, что либо e, либо u должны быть комплексно сопряженные в формуле пересчета коэффициентов. Что касается шага - он вообще говоря, зависит от длины фильтра. Советую использовать nlms, где в качестве шага используется величина = 1/(сумма квадратов значений линии задержки). Конечно NLMS лучше, но мне нужен конкретно LMS просто. Вот что у меня получилось для BPSK:  Однако стоит только помять сигнал на КАМ-4,всё сразу ломается(импульсная характеристика расходится). Смотрел я примеры, но в чём разница не пойму. Может ли проблема быть в модели канала? Что ещё может быть я не знаю.
lms_test.rar ( 1000 байт )
Кол-во скачиваний: 89
|
|
|
|
|
May 24 2011, 10:24
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Что-то вроде этого должно быть: Код clear all; c4=[1+j -1+j 1-j -1-j]; HI = [ 0.00001 0.0004 0.0002 -0.0010 0.0010 0.0039 -0.0120 ... -0.0300 -0.1800 -0.1000 -0.0300 0.0020 0.0200 0.0500 ... 0.0950 -0.0200 -0.3500 -0.3000 -0.1000 0.3970 0.3500 ... -0.0300 -0.1800 -0.0223 -0.0100 0.0000205 -0.00000039 -0.000000017... 0.000001 0.00000008]; HR = [ 0.00001 0.0008 0.0002 -0.0010 0.0010 0.0039 -0.0120 ... -0.0300 -0.1900 0.1000 -0.0300 0.0020 0.0200 0.0500 ... 0.0950 -0.0200 -0.3500 -0.3400 -0.1000 0.470 0.3500 ... -0.0300 -0.1800 -0.0223 -0.0100 0.000205 0.00000039 -0.000000117... 0.000001 0.00000008];
EL=60; NP=4; tx=c4(randint(1,10000,NP)+1);
h=complex(HR,HI);
rx=filter(h,1,tx);
u=0.5/(EL*std(rx)^2); y=lms([zeros(1,(length(h)/2)+EL/2) tx],rx,EL,u);
plot(y(5000:end),'.'); lms.m Код function cs = lms(r,t,N,mu)
mem=zeros(1,N); coeff=zeros(N,1); cs=[]; for i=1:length(t) mem=[t(i) mem(1:end-1)]; ms=mem*coeff; e=r(i)-ms; cs=[cs ms]; coeff=coeff+mem'*mu*e; end;
return;
|
|
|
|
|
May 24 2011, 11:29
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-10-07
Пользователь №: 31 658

|
Спасибо большое! Всё заработало.  Я понял в чём ошибка, при выполнение свёртки я брал импульсную характеристику,транспонировал затем брал комплексно-сопряжённую( эрмитово преобразование), а нужно только транспонировать было.
Сообщение отредактировал Wanderer.I - May 24 2011, 17:31
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|