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

Vehfl

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

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

  • Посещение

Репутация

0 Обычный
  1. Не понял этот кусок кода. Мне для работы алгоритма надо ставить в нуль первые пятнадцать разрядов регистра. Пришедшие данные на диаграмме в переменой In. Самый первый бит пришедших данных не входит в регистр, начинает входить со второго.
  2. Пишу описание декодера, работающего в нескольких режимах: 0 - начальная установка, 1 - запись в регистр, 2 - считывание. Режим записи длится ровно столько тактов сколько бит должно войти в регистр. В режиме записи в сдвиговый регистр не берется первый пришедший бит, все что идет дальше заходит в регистр. Есть ли способ это исправить или можно только внести дополнительную задержку чтобы первый бит приходил во второй такт режима считывания? Ниже код и временная диаграмма. always @(posedge clk) begin if (reset) begin mode <= 0; cnt <= 0; shiftreg <= 0; end else case (mode) 0: begin mode <= 1; shiftreg[0:14] <= 0; end 1: begin cnt <= cnt + 1; shiftreg <= {In, shiftreg[0:271]}; if (cnt==257) begin mode <= 2; cnt <= 0; end else mode <= 1; end
  3. Я так понимаю, это программа является решением моим. А могли бы Вы объяснить зачем в строке, описывающей PULSE_WIDTH надо делить на 1000. И еще, я читал $clog2 берет логарифм по основанию е. Я так понимаю, в моем же случае нужен логарифм по основанию 2?
  4. Не опытен в разработки на ПЛИС и поэтому прошу совета. Мне нужно разработать источник импульсов такого вида: Прямоугольный импульс длится время t, следующий такой импульс появляется через 19*t. t=6 нс. Пытался сделать такой генератор с помощью блоков System Generator в Simulink. Блок counter считывает содержимое памяти (вектор 100000000000000000000) с заданной частотой. Импульсы выводил на пин. После загрузки получившейся прошивки на плату измерительный прибор показывает не то что надо. Возможно я не правильно реализую то, что мне нужно? Или может выводить на пин не целесообразно? Как лучше сделать такой генератор?
  5. Тогда был бы признателен если вы как-нибудь передали мне блоки закодированные, например на почту. Вы могли бы послать мне их?
  6. Спасибо Думал что может в кодере из matlab тоже ошибка. У вас нету сведений о его правильности?
  7. Был бы признателен если бы вы предоставили закодированные блоки с исходными сообщениями для нескольких скоростей скажем для 1/2,2/5 и 1/3. У нас есть подозрения на неправильную работу кодера.
  8. Да, это было бы прекрасно иметь наглядный алгоритм декодирования.
  9. Не могли бы поделиться алгоритмом декодирования который использовали. Спасибо.
  10. Пожалуйста можете поподробней и что вы имеете ввиду под реализацией с фиксированной точкой?
  11. Случайно не в матлабе моделировали? У меня в матлабе при отношении С/Ш=0, BER=0. Ведь физически такого не может быть? Код программы в матлабе: format long clear all; r=2/3 H = dvbs2ldpc®; %e=0 % spy(H); % Visualize the location of nonzero elements in H. % Construct a default LDPC encoder object henc = fec.ldpcenc(H); for SNRdB = 0 for n=1:100; % Generate a random binary message msg = randint(1,henc.NumInfoBits,2); % Encode the message codeword = encode(henc, msg); % Verify the parity checks (which should be a zero vector) paritychecks = mod(henc.ParityCheckMatrix * codeword', 2); hdec = fec.ldpcdec(H); % Construct a BPSK modulator object modObj = modem.pskmod('M',2,'InputType','Bit'); % Modulate the signal (map bit 0 to 1 + 0i, bit 1 to -1 + 0i) modulatedsig = modulate(modObj, codeword); % Noise parameters sigma = sqrt(10^(-SNRdB/10)); % Transmit signal through AWGN channel receivedsig = awgn(modulatedsig, SNRdB, 0); % Signal power = 0 dBW % % Visualize received signal % scatterplot(receivedsig) % Construct a BPSK demodulator object to compute % log-likelihood ratios demodObj = modem.pskdemod(modObj,'DecisionType','LLR', ... 'NoiseVariance',sigma^2); % Compute log-likelihood ratios (AWGN channel) llr = demodulate(demodObj, receivedsig); % Decode received signal decodedmsg = decode(hdec, llr); N_err=nnz(decodedmsg-msg); % % Actual number of iterations executed % disp(['Number of iterations executed = ' ... % num2str(hdec.ActualNumIterations)]); % % Number of parity-checks violated % disp(['Number of parity-checks violated = ' ... % num2str(sum(hdec.FinalParityChecks))]); % % Compare with original message % disp(['Number of bits incorrectly decoded = ' ... % num2str(N_err)]) a(n)=N_err; % Общее количество ошибок end BER=sum(a)/(n*henc.NumInfoBits) end BER FER=(nnz(a))/n
  12. Есть программа на C++ для моделирования кодов LDPC для стандарта DVB-S2, в программе есть матрицы из стандарта, задающие коды, есть модем и канал связи с возможностью установки отношения Eb/No. Для всех кодов кроме скоростей 2/5, 1/3, 1/4 получились приемлимые графики зависимости BER (Bit Error Rate) от Eb/No, сходящиеся с теоретическими из статей. Для скоростей 1/4, 1/3, 2/5 декодер не работает, сам добавляет ошибки даже, если в канале ошибок не было. Может это опечатка в матрицах, взятых из стандарта. Ниже приведен стандарт. Не знаете с чем может быть связано, что не работают три скорости? DVB_S2_en_302307v010201p.pdf
  13. Про какие именно скорости идет речь? Про те, которые не работают у меня в C++ программе (1/4, 1/3, 2/5)?
  14. Мне нужно получить графики зависимости BER (Bit Error Rate) от Eb/N0 , для этого я воспользовался программой, написанной в MATLAB, мною были получены графики для кодов с нормальной длиной кадра со скоростями 9/10, 8/9, 5/6, 4/5, 3/4, для остальных скоростей при отношении Eb/N0=0 BER=0. Параллельно проводил моделирование в программе, написанной на C++. На первый взгляд, в С++ программе все тоже самое что и в MATLAB: канал, модем, матрицы, задающие код. Но в программе, написанной на C++ не работают скорости 1/4, 1/3, 2/5, при выборе этих скоростей даже если не задавать ошибки каналом связи, после декодирования будут появляться ошибки. Буду признателен если поможете, может кто-нибудь получал такие графики.
×
×
  • Создать...