Эта модель показывает улучшение производительности BER при использовании логарифмического отношения правдоподобия (LLR) вместо демодуляции трудного решения в convolutionally закодированной линии связи.
Эта модель в качестве примера моделирует convolutionally закодированную систему связи, имеющую один передатчик, канал AWGN и три получателя. Сверточный энкодер имеет уровень кода 1/2. Система использует 16-QAM модуляцию. Модулируемый сигнал проходит через аддитивный белый Гауссов шумовой канал. Лучший получатель выполняет демодуляцию трудного решения в сочетании с Декодером Витерби, который настраивается, чтобы выполнить декодирование трудного решения. Второму получателю сконфигурировали демодулятор, чтобы вычислить логарифмические отношения правдоподобия (LLRs), которые затем квантуются с помощью 3-битного квантизатора. Известно, что уровни квантования зависят от шумового отклонения для оптимальной производительности [2]. Точные контуры квантизатора опытным путем определяются здесь. Декодер Витерби, который настраивается для мягкого декодирования решения, обрабатывает эти квантованные значения. Значения LLR, вычисленные демодулятором, умножаются на-1, чтобы сопоставить их с правильным индексом квантизатора для использования с Декодером Витерби. Чтобы вычислить LLR, демодулятору нужно дать отклонение шума, как замечено в его входе. Третий получатель включает демодулятор, который вычисляет LLRs, которые обрабатываются Декодером Витерби, который настраивается в неквантованном режиме. Производительность BER каждого получателя вычислена и отображена.
modelName = 'commLLRvsHD';
open_system(modelName);
Моделируйте эту систему в области значений информационного бита значения Eb/No. Настройте эти значения Eb/No для закодированных битов и многоразрядных символов, чтобы потребовать шумовых значений отклонения для блока AWGN и блока Rectangular QAM Baseband Demodulator. Соберите результаты BER для каждого значения Eb/No и визуализируйте результаты.
EbNo = 2:0.5:8; % information rate Eb/No in dB codeRate = 1/2; % code rate of convolutional encoder nBits = 4; % number of bits in a 16-QAM symbol Pavg = 10; % average signal power of a 16-QAM modulated signal snr = EbNo - 10*log10(1/codeRate) + 10*log10(nBits); % SNR in dB noiseVarVector = Pavg ./ (10.^(snr./10)); % noise variance % Initialize variables for storing the BER results ber_HD = zeros(1, length(EbNo)); ber_SD = zeros(1, length(EbNo)); ber_LLR = zeros(1, length(EbNo)); % Loop over all noiseVarVector values for idx=1:length(noiseVarVector) noiseVar = noiseVarVector(idx); %#ok<NASGU> sim(modelName); % Collect BER results ber_HD(idx) = BER_HD(1); ber_SD(idx) = BER_SD(1); ber_LLR(idx) = BER_LLR(1); end % Perform curve fitting and plot the results fitBER_HD = real(berfit(EbNo, ber_HD)); fitBER_SD = real(berfit(EbNo, ber_SD)); fitBER_LLR = real(berfit(EbNo, ber_LLR)); semilogy(EbNo, ber_HD, 'r*', ... EbNo, ber_SD, 'g*', ... EbNo, ber_LLR, 'b*', ... EbNo, fitBER_HD, 'r', ... EbNo, fitBER_SD, 'g', ... EbNo, fitBER_LLR, 'b'); legend('Hard Decision Decoding','Soft Decision Decoding','Unquantized Decoding'); xlabel('Eb/No (dB)'); ylabel('BER'); title('LLR vs. Hard Decision Demodulation with Viterbi Decoding'); grid on;
Чтобы экспериментировать с этой системой далее, попробуйте различные типы модуляции. Эта система использует сопоставленную схему модуляции двоичного файла более быстрого ошибочного набора, но известно, что сопоставленное сигнальное созвездие Грэя обеспечивает лучшую производительность BER. Экспериментируйте с различными опциями упорядоченного расположения совокупности в блоках демодулятора и модуляторе. Сконфигурируйте блок демодулятора, чтобы вычислить аппроксимированный LLR, чтобы видеть различие в производительности BER по сравнению с демодуляцией трудного решения и LLR. Испытайте различную область значений значений Eb/No. Наконец, исследуйте различные контуры квантизатора для своей схемы модуляции и значений Eb/No.
Можно сконфигурировать этот пример, чтобы использовать управляемое данными выполнение путем установки Доменного параметра на поток данных для Подсистемы Потока данных. С потоком данных блоки в области выполняются на основе доступности данных в противоположность шагу расчета Simulink. Simulink автоматически делит систему в параллельные потоки. Это авторазделение ускоряет симуляцию и увеличивает пропускную способность. Чтобы узнать больше о потоке данных и как запустить этот пример с помощью нескольких потоков, смотрите Многожильную Симуляцию Сравнения Типов Демодуляции.
% Cleanup close_system(modelName, 0); clear modelName EbNo codeRate nBits Pavg snr noiseVarVector ... ber_HD ber_SD ber_LLR idx noiseVar fitBER_HD fitBER_SD fitBER_LLR;
[1] Дж. Л. Мэсси, "Кодируя и модуляция в цифровой связи", Proc. Международный Цюрихский семинар по цифровой связи, 1974
[2] Дж. А. Хеллер, я. М. Джейкобс, "Viterbi, Декодирующий для Спутника и Космической связи", IEEE® Trans. Comm. Tech. vol COM-19, октябрь 1971