Перейти к содержанию
    

KalashKS

Участник
  • Постов

    245
  • Зарегистрирован

  • Посещение

Весь контент KalashKS


  1. ИХ может и должна влиять если она длиннее, чем ЦП. Почему у вас работает без ЦП пока понять не могу. В принипе, ваш результат воспроизводится моделированием с той лишь разницей, что у меня ЦП помогает убрать помеху, а у вас наоборот.
  2. Попробуйте округлять к ближайшему целому. Для этого перед отбросом младших бит сначала прибавляйте половину младшего (после округления) разряда.
  3. Правильно ли я понял, что без ЦП ухудшения MER не наблюдается? Вообще говоря, это странно. Судя по созвездию, наблюдаемая помеха синхронна символьной частоте. Иначе вместо полосок были бы круги. На мой взляд, это говорит о том, что есть ошибки в формировании или обработке сиганала. У вас на нулевой частоте на вход ОБПФ, подается ноль? Если да, проверьте округление на выходе ОБПФ и фильтра. Простое отбрасывание младших разрядов даст существенное смещение по постоянной составляющей, которое пройдя через трансформаторы должно дать наблюдаемый эффект.
  4. Совсем без них, может быть, и не получится. Просто их будет меньше. Строго не выводил, но по ощущениям МП-синхронизация по нескольким символам должна сводиться к усреднению корреляции и энергии: Correlation_mean=zeros(1,numel(Correlation)-3*137); Energy_mean=zeros(1,numel(Correlation)-3*137); for k=0:3, Correlation_mean=Correlation_mean+Correlation(k*137+(1:numel(Correlation_mean))); Energy_mean=Energy_mean+Energy(k*137+(1:numel(Energy_mean))); end Ложных пиков будет еще меньше.
  5. С чего вы это взяли? Даже при цифровом преобразовании частоты преобразователь не сбрасывается каждый символ. Он вообще не имеет представления о типе сигнала и границах символов в нем. Кстати, про синхронизацию по коротким префиксам. Оптимальный алгоритм, вообще говоря, требует учитывать энергию сигнала на интервале корреляции. Без этого учета ошибка синхронизации больше. А с короткими префиксами можно вообще получить ложные пики даже без шума. Алгоритм с учетом энергии выглядит примерно так. signal=exp(1i*pi/2*randi(4,128,100)); signal=ifft(signal); signal=[signal(120:128,:);signal]; signal=reshape(signal,1,numel(signal)); Correlation=(filter(ones(9,1),1,conj(signal(1:end-128)).*signal(129:end))); Energy=(filter(ones(9,1),1,abs(signal(1:end-128)).^2+abs(signal(129:end)).^2))/2; plot(abs(Correlation)-Energy)
  6. Может быть, тогда все нормально и вы видите отклики от разных лучей в эфире.
  7. Код выше, как я понял, описывает согласованный фильтр с ИХ zc_time. Если он не дает выраженных пиков, то скорее всего дело в неправильной ИХ. Что касается поворотов по фазе от символа к символу, то они скорее всего вызваны остаточным частотным рассогласованием. Если при этом скачки большие, то можно предположить, что рассогласование кратно расстоянию между несущими. Тогда фаза будет поворачиваться на 2*pi*Ncp/Nfft*df, где df - относительное рассогласование.
  8. Этот эффект вызван случайностью модуля отсчетов сигнала, которая зашумляет корреляционный пик. Причем в окрестности максимума перекосы будут одинаковыми что для большого числа несущих, что для малого, вызывая одинаковую абсолютную ошибку синхронизации, но относительная ошибка при малом числе несущих будет больше. При наличии шума есть шанс вообще не увидель одиночный пик, поэтому если использовать усреднение по нескольким символам, то усреднаять надо саму АКФ, а не оценку начала символа. Если в пилотном символе последовательность Задова-Чу, то модуль отсчетов сигнала будет почти постоянным и дополнительной ошибки синхронизации появляться не должно.
  9. В предложенном мной варианте нормируется мощность сигнала. Средний квадрат равен единице (при амплитудах несущих, нормированных при помощи modnorm). Амплитуда сигнала распределена приблизительно по Релею, поэтому шанс выйти за тройку чуть больше 1e-4. Если выбросы вас устраивают, доделите еще на 3. Если нет, делите еще сильнее, или принимайте меры по ограничению пик-фактора.
  10. Если используется матлабовское IFFT, то надо домножить на корень из размера БПФ. А потом еще на корень из его отношения к числу используемых несущих.
  11. Из любопытсва глянул в матлабе. Для ФМ2 и АГБШ полубайтовый RS (8,4) выигрывает у 4-х Хэммингов примерно 0,5 дБ по PER 1e-4. А дальше, как написали выше, нужна конкретика про ваш канал и то, какие там ошибки.
  12. Все-таки наврал, вы правы. Исправляет 2 ошибки. Пойду вспоминать, как они работают. А по реализации на таких длинах, возможно, готовые блоки будут неоптимальны. Если тактовые частоты позволяют, табличное декодирование может быть лучшим вариантом.
  13. Если не вру, то должен быть код (8,4), укороченный из (15,11) с 4-хбитными символами и исправлением одной символьной ошибки. Можно сделать укороченный БЧХ (32,16) с исправлением двух битовых ошибок. Лучше будет, или хуже зависит от характера ошибок.
  14. На местном FTP можно поискать. А по поводу версий у меня есть гипотеза, что могут быть проблемы с лицензией, но я ее не проверял.
  15. Вспомнил, что аналогичную проблему встречал в Riviera-PRO того же альдека. Сунул туда ваш код и получил один в один ваш результат. Как это побеждать, не придумал. Поэтому настоятельно рекомендую попробовать сменить хотя бы версию Active-HDL. У меня наиболее стабильно работали 9.3 и 10.3. 9.1 - точно глючная, хотя не помню, в каких местах, 10.4 по слухам тоже не очень, 10.1 ваш код съела без проблем до 10.5 руки не дошли.
  16. Нельзя не согласиться. Особенно после больших апдейтов. Поэтому попробовать другой софт или даже другую версию альдека - вполне рабочий вариант.
  17. Тогда у меня больше нет вариантов. Хотя, покажите еще окно Stimulators для ваших портов.
  18. Логи компиляции и запуска моделирования смотрели?
  19. Похоже на правду. Сдвиг умножится на коэффициент деления в ОС. Остаток от деления на 360 даст 60 градусов.
  20. Было. На первой странице в последнем посте. Теоретически, может быть всякое. Только при чем здусь квартус, если вы в альдеке моделируете? И что значит "задавал"? Если что я моделировал в Active-HDL 10.3.
  21. Это несколько сбивает с толку. У вас вашего DFF4 в иерархии нет вообще, как будто его нет в коде. Даже если он не подцепился, в иерархии должен присутствовать модуль U1 хотя бы в сером цвете. Изучите лог компиляции и моделирования на предмет варнингов. А так, как есть, получается, что DFF4 отсутствует, а QT0...QT1 драйвятся дефолтными нулями из объявления и никогда не меняются. То, что раньше при моделировании у вас были иксы, говорит о том, что вы что-то сломали.
  22. В Альдеке можно выводить не только сигналы верхнего уровня, но и любого уровня иерархии. Обычно иерархическое дерево после запуска моделирования находится слева от временной диаграммы на месте списка файлов. В вашем случае интересно, что происходит внутри модуля U1. Ткните в него и вытащите все внутренние сигналы.
  23. Вытащите эти сигналы и порты на временную диаграмму. Там видно будет. Код пока можно считать нормальным.
×
×
  • Создать...