Jump to content

    

Nabokov

Участник
  • Content Count

    28
  • Joined

  • Last visited

Everything posted by Nabokov


  1. petrov Благодарю за помощь!
  2. я пытаюсь промоделировать работу одной системы связи. Там используется именно rasied cosine (НЕ square root). А не могли бы вы пояснить, почему? Чтобы проще было отслеживать изменения сигналов во времени, например?
  3. Абсолютно с вами согласен. Просто я симулинком не пользовался никогда с целью моделирования. Все писал кодом. Сейчас решил попробовать, но столкнулся с тем, что результаты разные, что неприятно. То есть, в этом блоке задавать коэффициенты, например, и вместо блока Raised Cosine Transmiter\Receiver filter использовать?
  4. Появились еще вопросы. Составил такую модель в симулинке: BER совпадает с теоретическим при использовании обоих фильтров (проверял по bertool'у). 1) Смущает, что в блоках raised cosine filter в параметре Linear amplitude filter gain по умолчанию задается функция rcfiltgaincompat(gcbh). Внутри функции рассчитывается значение к-нта усиления таким образом (g - то что идет на выход функции): switch filtType case 'Normal' b = rcosdesign(R, filtSpan, N, 'normal'); g = 1 / max(b); case 'Square root' b = rcosdesign(R, filtSpan, N, 'sqrt'); g = 1 / max(b) * ((-1/(pi*N)*(pi*(R-1)-4*R))) * sqrt(N); end Если в первом случае, допустим, осуществляется просто нормирование к максимуму ИХ, то что такое ((-1/(pi*N)*(pi*(R-1)-4*R))) * sqrt(N) я понять не могу. Кто-нибудь может подсказать, для чего это? 2) Пытаюсь повторить такой же эксперимент в коде матлаба: SamplePerSymbol = 4; m = 2; M = 2^m; numBit = 5e6; dqpskMod = comm.DQPSKModulator('PhaseRotation',pi/4, ... 'BitInput',true, ... 'SymbolMapping','Gray'); dqpskDemod = comm.DQPSKDemodulator('PhaseRotation', pi/4, ... 'BitOutput', true, ... 'SymbolMapping', 'Gray'); FilterParams.Shape = 'Normal'; FilterParams.RollOffFactor = 0.2; FilterParams.FilterSpan = 16; FilterParams.Gain = 1.93; txFilt = comm.RaisedCosineTransmitFilter(... 'Shape', FilterParams.Shape, ... 'RolloffFactor', FilterParams.RollOffFactor, ... 'OutputSamplesPerSymbol', SamplePerSymbol, ... 'FilterSpanInSymbols', FilterParams.FilterSpan, ... 'Gain', FilterParams.Gain); rxFilt = comm.RaisedCosineReceiveFilter(... 'Shape',FilterParams.Shape, ... 'RolloffFactor',FilterParams.RollOffFactor, ... 'InputSamplesPerSymbol',SamplePerSymbol, ... 'FilterSpanInSymbols', FilterParams.FilterSpan, ... 'DecimationFactor', SamplePerSymbol, ... 'Gain', FilterParams.Gain); if(strcmp(FilterParams.Shape,'Square root')) errorRate = comm.ErrorRate('ReceiveDelay',2*FilterParams.FilterSpan); elseif(strcmp(FilterParams.Shape,'Normal')) errorRate = comm.ErrorRate('ReceiveDelay',FilterParams.FilterSpan); end EbN0 = 10; BER = 0; for i = 1:length(EbN0) %% Модуляция и фильтрация bits = randi([0 1],1,numBit); modSymbols = dqpskMod.step(bits.'); signal = txFilt(modSymbols); %% Шум signalNoise = awgn(signal,EbN0(i) - 10*log10(SamplePerSymbol) + 10*log10(log2(M)),'measured').'; %% Демодуляция if(strcmp(FilterParams.Shape,'Square root')) signalDownsampled = rxFilt(signalNoise.'); elseif(strcmp(FilterParams.Shape,'Normal')) signalDownsampled = downsample(signalNoise,SamplePerSymbol).'; end demodBits = dqpskDemod(signalDownsampled).'; errors = errorRate(bits',demodBits'); BER = errors(1) end Для 'Square root' BER совпадает с тем, что получилось в симулинке. И результат не зависит от параметра 'Gain' В случае когда использую форму ИХ фильтра 'Normal', параметр 'Gain' выбираю такой, какой возвращается функцией rcfiltgaincompat(gcbh) из симулинка (для фильтра с параметром 'Normal', само собой), при этом BER ухудшается на два порядка. Сразу хочу сказать, что при EbNo = inf ошибок нет, все работает правильно. Предполагаю, что тут проблема в этом параметре 'Gain'. Не могу понять, как правильно его задавать. Буду рад помощи.
  5. Всем спасибо за ответы.
  6. Попробую переформулировать. В хелпах матлаба есть пример симулинковской модели, где сравниваются эти два фильтра: В верхней ветке после модулятора стоит sqr-вариант raised cosine фильтра. Для того, чтобы в моменты взятия отсчетов на приемной стороне отсутствовала межсимвольная интерференция, необходимо сигнал пропустить через такой же фильтр. В нижней же ветке используется просто raised cosine. В моменты взятия отсчетов ИХ фильтра равна нулю => вклада от соседних импульсов нет => интерференции нет => просто выбираем отсчеты в нужные моменты времени с помощью downsample. Прошу поправить меня, если в чем-то неправ. Если открыть блок Raised Cosine Receive Filter, то там в параметре Pulse Shape вместо square root варианта можно выбрать просто raised cosine. Вопрос - зачем такая возможность присутствует именно на приемной стороне? Ведь либо фильтровать сигнал вообще не надо (если на передающей стороне использовался raised cosine), либо нужно фильтровать square root cosine фильтром (если на передающей стороне тоже стоял он). В каких ситуациях может возникнуть необходимость ставить raised cosine фильтр на приемной стороне?
  7. Нулю она равна в моменты kT. Поэтому соседние импульсы не ухудшают приема. В случае же square root импульсная хар-ка не равна нулю на всей длительности. Поэтому и надо использовать еще один такой фильтр на приемной стороне. Но это вроде бы не отвечает на мой вопрос. Зачем на приемной стороне устанавливать фильтр raised cosine (т.е. когда в параметрах стоит Normal)?
  8. А может еще кто-нибудь пояснить за параметр Filter shape в параметрах блока Rasid Cosine Transmit Filter. Когда этот параметр равен Normal используется сигнальная посылка со следующей АЧХ: Когда Square root АЧХ имеет следующий вид: Поэтому, когда используется форма сигнальной посылки square root, необходимо на приемной стороне ставить Rasid Cosine Receive Filter с формой фильтра square root. В случае же, когда используется Normal, то на приемной стороне нужно лишь сделать downsample. Но тогда мне не очень понятно зачем в блоке Raised Cosine Receive Filter можно выбрать параметр Normal?
  9. Это помогло. Забыл, что в симулинке это тоже надо делать) Большое спасибо! Да дело было в том, что неправильно задавал значение EbN0. Совет Grizzly помог. Но кстати цвет все равно одинаковый на всей модели. Не знаю, в чем дело.
  10. Так это просто в Constellation Diagram есть настройка Show Signal Trajectory, которая просто соединяет соседние по времени отсчеты. На тех картинках, что я скидывал - это настройка была включена. Если выключить, то будет просто созвездие QPSK: Картинка выше получена без блока АБГШ. Именно этот параметр я и включил. Вы хотите сказать, что после передающего фильтра должен быть другой цвет, так как там повышается число отсчетов на символ?
  11. Да, вы правы, я не ту картинку скинул. Это созвездие уже на выходе фильтра. Вот созвездие на выходе АБГШ при EbN0=inf: Вы вот это имеете в виду? Вроде бы все одного цвета => один сэпл тайм. Правильно я понимаю?
  12. В блоке АБГШ выставил EbN=inf. Ну собственно результат такой же, если блок АБГШ просто убрать из модели. Вот параметры генератора данных, фильтра и блока АБГШ. Не могу понять, где ошибся. Задержка в блоке расчета ошибок выставлена верно: при EbN0 = inf, ber = 0.
  13. Доброго времени суток, форумчане. Составил простую модель в матлабе: генератор рандомных данных, QPSK модулятор, блок АБГШ, демодулятор, блок расчета ошибок. Запустил, BER получается почти такой же, как и теоретические графики в bertool. Далее я добавляю фильтр формирующий форму сигнальной посылки Raised Cosine Transmit Filter и Raised Cosine Receive Filter. Тип фильтра выбрал Square root. При этом помехоустойчивость сильно ухудшается, хотя я вроде бы правильно выставил параметр задержки в блоке расчета ошибок. Не могу разобраться, в чем дело, ведь форма сигнальной посылки не должна влиять на помехоустойчивость. Модель прикрепляю. QPSK.slx
  14. У меня к сожалению кроме этого топика не удалось найти ничего больше. Вы про него имели в виду? Благодарю. Вы имеете в виду функцию snr?
  15. То есть: ((sum(abs(signal).^2)) - (sum(abs(noise).^2)))/(sum(abs(noise).^2)) ? При этом выборки должны быть одинакового размера и как можно большие. Вы имеете в виду топик AWGN Channel Noise Level? Если нет, то не могли бы вы дать ссылку на то, что вы имеете в виду?
  16. Доброго времени суток, уважаемые форумчане. Возможно этот вопрос задавался уже не раз, но все же. У меня имеется запись сигнала с модуляцией QPSK. В записи сигнала также присутствует шум. Для условности можно считать, что канал АБГШ. Так же имеется запись шум без сигнала. Я хочу почитать соотношение С\Ш. Делаю это следующим образом: sum(abs(signal).^2)/(sum(abs(noise).^2)). Получаю отношение с\ш в разах, после чего его можно пересчитать в дБ. Правильно ли я делаю, а если ошибаюсь, то в чем?
  17. У меня такая кривая получается. Это при нулевом смещении фазы и задержкой входного сигнала равной Ts/2.
  18. При разомкнутых петлях - это вы имеете в виду, когда осуществляется просто оценка сдвига, без его коррекции?
  19. "Худо-бедно" - это значит плохо?
  20. ну слушайте, мне это не по своей воле делать надо) так я правильно понял или нет? в OQPSK символьная синхра только СОВМЕСТНО с фазовой должна осуществляться?
  21. Ну то есть правильно ли я понимаю, что для OQPSK, в отличии от QPSK, символьная синхронизация должна осуществляться только совместно с фазовой?
  22. посмотрел. В разделе 8.6.2 описывается как раз детектор Гарднера для OQPSK. Сигнал ошибки у меня рассчитывается по формуле 8.6.41.
  23. Доброго времени суток! Разбираюсь с символьной и фазовой синхронизацией для QPSK и OQPSK модуляций. В случае QPSK у меня все работает. Для символьной синхронизации использую детектор Гарднера. Выбрал его, т.к. он устойчив к небольшим ошибкам фазы. И у меня он действительно работает: при небольших фазовых расстройках символьная синхронизация работает. Для синхронизации по фазе использую детектор, в котором сигнал ошибки рассчитываю по следующей формуле: ek=sign(Re(xk))*Im(xk)-sign(Im(xk))*Re(xk). Формулу взял из хэлпов матлаба. Для символьной синхронизации OQPSK также использую детектор Гарднера. При расчете сигнала ошибки я учел тот факт, что I и Q компоненты смещены друг относительно другу на половину символа. В итоге получается, что символьная синхронизация для OQPSK у меня работает только если полностью отсутствует фазовая расстройка, однако если я добавляю сколь угодно небольшую расстройку по фазе, то символьная синхронизация перестает работать. В чем может быть дело? Я также пытался сместить I компоненту сигнала (чтобы получился обратно QPSK) и попробовать воспользоваться детектором Гарднера, который я применял для QPSK, однако результат не увенчался успехом. Прошу вашей помощи, уважаемые форумчане.
  24. Доброго времени суток! Разбираюсь с символьной и фазовой синхронизацией для QPSK и OQPSK модуляций. В случае QPSK у меня все работает. Для символьной синхронизации использую детектор Гарднера. Выбрал его, т.к. он устойчив к небольшим ошибкам фазы. И у меня это действительно работает: при небольших фазовых расстройках символьная синхронизация работает. Для синхронизации по фазе использую детектор, в котором сигнал ошибки рассчитываю по следующей формуле: ek=sign(Re(xk))*Im(xk)-sign(Im(xk))*Re(xk). Формулу взял из хэлпов матлаба. Для символьной синхронизации OQPSK также использую детектор Гарднера. При расчете сигнала ошибки я учел тот факт, что I и Q компоненты смещены друг относительно другу на половину символа. В итоге получается, что символьная синхронизация для OQPSK у меня работает только если полностью отсутствует фазовая расстройка, однако если я добавляю сколь угодно небольшую расстройку по фазе, то символьная синхронизация перестает работать. В чем может быть дело? Я также пытался сместить I компоненту сигнала (чтобы получился обратно QPSK) и попробовать воспользоваться детектором Гарднера, который я применял для QPSK, однако результат не увенчался успехом. Прошу вашей помощи, уважаемые форумчане.
  25. s1 = mskmod(0,8); s2 = mskmod(1,8); dotProduct = sum(s1.*conj(s2));% dotProduct != 0