<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

信道編碼器與譯碼器原理仿真

冬至子 ? 來源:Houman Zarrinkoub ? 作者:Houman Zarrinkoub ? 2023-10-10 14:58 ? 次閱讀

3.12 MATLAB信道編碼例子

在本節中,我們將使用一種教學方法和一系列MATLAB程序,檢查工具箱在信道編碼方面提供的內容。首先,我們將建立一個系統,使用卷積編碼和基于硬判決解碼的維特比譯碼。然后,我們將使用軟判決譯碼更新算法。最后,我們將用卷積編碼算法代替卷積編碼,并比較每個階段的性能。通過這些簡單的練習,我們不僅將了解使用MATLAB和通信系統工具箱為移動通信模型增加更多復雜性是多么容易,而且我們將清楚地看到,BER性能的顯著提高解釋了turbo編碼在LTE標準的信道編碼中所起的重要作用。

3.12.1 誤差校正與檢測

信道編碼包括錯誤檢測和糾錯。通過使用CRC(循環冗余校驗)檢測器進行錯誤檢測,接收器可以請求傳輸的重復,這被稱為自動重復請求。前向糾錯編碼允許基于傳輸信號中包括的冗余比特來校正錯誤。錯誤檢測和前向糾錯的混合稱為HARQ(Hybrid Automatic Repeat Request,混合自動重復請求)構成了大多數3G標準的組成部分,并且也被用于LTE標準。糾錯碼通常分為分組碼和卷積碼。卷積碼在2G和3G移動通信標準中有著廣泛的應用,主要是因為其復雜度較低。

在這一節中,我們將詳細說明我們已經增長的Matlab模型,它已經包含了調制,包括信道編碼。作為解釋在LTE標準中使用turbo編碼的價值和動機的完美工具,我們將比較卷積編碼和turbo編碼的性能。此外,為了解釋在使用接收機設計中所涉及的折衷,我們將比較具有和不帶軟判決譯碼的調制編碼組合的性能。

3.12.2 卷積碼

卷積碼是由輸入序列與編碼器的脈沖響應卷積而產生的。編碼器接受k位輸入樣本塊,并通過對當前數據塊和m個先前輸入塊進行操作,產生n位輸出樣本塊。編碼器的編碼速率由比Rc=k/n給出,卷積編碼器由這三個參數(n,k,m)指定。圖3.6示出了卷積編碼器。

圖片

3.12.3 硬判決Viterbi譯碼

在本練習的第一次迭代中,我們修改了上一節中的MATLAB函數,以在調制中添加信道編碼方案。當使用信道編碼方案時,發射機通過無線信道發送冗余比特和消息比特。接收機接收發送的信號,并使用冗余位來檢測和校正信道引入的一些錯誤。讓我們開始向通信系統添加卷積編碼器和維特比解碼器。該通信系統使用硬判決維特比譯碼,其中解調器將接收信號映射到位,然后將位傳遞到維特比譯碼器進行糾錯。下面的MATLAB函數(chap3_ex03_qpsk_viterbi)使用QPSK調制和AWGN信道的硬判決Viterbi解碼。

1function [ ber,bits ] = chap3_ex03_qpsk_viterbi( EbNo,maxNumErrs,maxNumBits )
 2%% Initializations
 3
 4persistent Modulator AWGN DeModulator BitError ConvEncoder Viterbi
 5
 6if isempty(Modulator)
 7    Modulator = comm.QPSKModulator('BitInput',true);
 8    AWGN = comm.AWGNChannel;
 9    DeModulator = comm.QPSKDemodulator('BitOutput',true);
10    BitError = comm.ErrorRate;
11    ConvEncoder = comm.ConvolutionalEncoder('TerminationMethod','Terminated');
12    Viterbi = comm.ViterbiDecoder('InputFormat','Hard','TerminationMethod','Terminated');
13end
14%% Constants
15FRM = 2048;
16M = 4;
17k = log2(M);
18codeRate = 1/2;
19snr = EbNo + 10*log10(k)+10*log10(codeRate);
20AWGN.EbNo = snr;
21
22%% Processing loop modeling transmitter, channel model and receiver
23numErrs = 0;
24numBits = 0;
25results = zeros(3,1);
26while((numErrs< maxNumErrs)&&(numBits< maxNumBits))
27    % Transmitter
28    u = randi([0 1],FRM,1);
29    encoded = ConvEncoder.step(u);
30    mod_sig = Modulator.step(encoded);
31
32    % Channel 
33    rx_sig = AWGN.step(mod_sig);
34
35    % Receiver
36    demod = DeModulator.step(rx_sig);
37    decoded = Viterbi.step(demod);
38    y = decoded(1:FRM);
39    results = BitError.step(u,y);
40    numErrs = results(2);
41    numBits = results(3);
42end
43
44%% Clean up & collect results
45ber = results(1);
46bits = results(3);
47reset(BitError);
48
49end

通過在BERTool中運行該函數,我們可以測量硬判決維特比譯碼的性能,并與上限理論結果進行比較。檢查圖3.7中的結果,我們可以看到模擬的BER曲線低于理論上限值,這與我們的期望是一致的。這些結果表明,為了達到更好的性能,我們需要改進我們的解碼算法。

圖片

圖3.7 Viterbi譯碼的性能和AWGN信道的QPSK調制對比

3.12.4 軟判決Viterbi譯碼

在這個迭代中,我們通過使用軟判決譯碼算法來改進BER性能結果。在軟判決譯碼中,解調器將接收到的信號映射到對數似然比。這些概率度量是基于接收到正確數據的可能性的對數而不是損壞的數據。當提供對數似然比作為對維特比解碼器的輸入時,解碼器的誤碼率性能得到改善。通過改變幾個解調器和維特比譯碼器系統目標參數,可以得到一種實現軟判決維特比譯碼的算法。下面的MATLAB函數(chap3_ex04_qpsk_viterbi_soft() )已被更新為使用軟判決維特比譯碼。

1function [ ber,bits ] = chap3_ex04_qpsk_viterbi_soft( EbNo,maxNumErrs,maxNumBits )
 2%% Initializations
 3
 4persistent Modulator AWGN DeModulator BitError ConvEncoder Viterbi Quantizer
 5
 6if isempty(Modulator)
 7    Modulator = comm.QPSKModulator('BitInput',true);
 8    AWGN = comm.AWGNChannel;
 9    DeModulator = comm.QPSKDemodulator('BitOutput',true,'DecisionMethod','Log-likelihood ratio','VarianceSource','Input port');
10    BitError = comm.ErrorRate;
11    ConvEncoder = comm.ConvolutionalEncoder('TerminationMethod','Terminated');
12    Viterbi = comm.ViterbiDecoder('InputFormat','Soft','SoftInputWordLength',4,'OutputDataType','double','TerminationMethod','Terminated');
13    Quantizer = dsp.ScalarQuantizerEncoder('Partitioning','Unbounded','BoundaryPoints',-7:7,'OutputIndexDataType','uint8');
14
15
16end
17%% Constants
18FRM = 2048;
19M = 4;
20k = log2(M);
21codeRate = 1/2;
22snr = EbNo + 10*log10(k)+10*log10(codeRate);
23noise_var = 10.^(-snr/10);
24AWGN.EbNo = snr;
25
26%% Processing loop modeling transmitter, channel model and receiver
27numErrs = 0;
28numBits = 0;
29results = zeros(3,1);
30while((numErrs< maxNumErrs)&&(numBits< maxNumBits))
31    % Transmitter
32    u = randi([0 1],FRM,1);
33    encoded = ConvEncoder.step(u);
34    mod_sig = Modulator.step(encoded);
35
36    % Channel 
37    rx_sig = AWGN.step(mod_sig);
38
39    % Receiver
40    demod = DeModulator.step(rx_sig,noise_var);
41    llr = Quantizer.step(-demod);
42    decoded = Viterbi.step(llr);
43    y = decoded(1:FRM);
44    results = BitError.step(u,y);
45    numErrs = results(2);
46    numBits = results(3);
47end
48
49%% Clean up & collect results
50ber = results(1);
51bits = results(3);
52reset(BitError);
53
54end

理論上,我們預期結果會有2dB的改進,這正是圖3.8中所示的模擬曲線。接下來,我們檢查Turbo編碼,看看它是否可以提供任何改進的BER結果。

圖片

圖3.8 硬判決Viterbi譯碼 Vs 軟判決Viterbi譯碼

3.12.5 Turbo 編碼

Turbo碼大大提高了軟判決Viterbi譯碼的誤碼率性能。Turbo編碼在發射機處并行使用兩個卷積編碼器,在接收機處串聯使用兩個A后驗概率(APP)解碼器。此示例使用率1/3 turbo編碼器。對于每個輸入位,輸出具有一個系統位和兩個奇偶位,總共三位。

下面的MATLAB函數已被更新,使用Turbo編碼器和解碼器。注意,Turbo解碼是一個迭代迭代,性能隨著迭代次數的增加而提高。在這個例子中,我們選擇了六作為解碼器執行的迭代次數。

1function [ ber,bits ] = chap3_ex05_qpsk_turbo( EbNo,maxNumErrs,maxNumBits )
 2%% Constants
 3FRM = 2048;
 4Trellis = poly2trellis(4,[13 15],13);
 5Indices = randperm(FRM);
 6M = 4;
 7k = log2(M);
 8R = FRM/(3*FRM+4*3);
 9
10snr = EbNo + 10*log10(k)+10*log10(R);
11noise_var = 10.^(-snr/10);
12
13%% Initializations
14persistent Modulator AWGN DeModulator BitError TurboEncoder TurboDecoder
15
16if isempty(Modulator)
17    Modulator = comm.QPSKModulator('BitInput',true);
18    AWGN = comm.AWGNChannel;
19    DeModulator = comm.QPSKDemodulator('BitOutput',true,'DecisionMethod','Log-likelihood ratio','VarianceSource','Input port');
20    BitError = comm.ErrorRate;
21    TurboEncoder = comm.TurboEncoder('TrellisStructure',Trellis,'InterleaverIndices',Indices);
22    TurboDecoder = comm.TurboDecoder('TrellisStructure',Trellis,'InterleaverIndices',Indices,'NumIterations',6);
23end
24
25
26%% Processing loop modeling transmitter, channel model and receiver
27AWGN.EbNo = snr;
28numErrs = 0;
29numBits = 0;
30results = zeros(3,1);
31while((numErrs< maxNumErrs)&&(numBits< maxNumBits))
32    % Transmitter
33    u = randi([0 1],FRM,1);
34    encoded = TurboEncoder.step(u);
35    mod_sig = Modulator.step(encoded);
36
37    % Channel 
38    rx_sig = AWGN.step(mod_sig);
39
40    % Receiver
41    demod = DeModulator.step(rx_sig,noise_var);
42
43    decoded = TurboDecoder.step(-demod);
44    y = decoded(1:FRM);
45    results = BitError.step(u,y);
46    numErrs = results(2);
47    numBits = results(3);
48end
49
50%% Clean up & collect results
51ber = results(1);
52bits = results(3);
53reset(BitError);
54
55end

圖3.9示出了在AWGN信道下QPSK調制中turbo編碼的結果。注意,在1dB,我們有一個BER值發生在5dB的硬判決和3dB軟判決解碼。這清楚地表明了Turbo編碼算法的優越性。記住,這種性能增益是以計算復雜性的增加為代價的 (我的電腦單單計算 Turbo Coding 就花費了很長時間,而我的電腦配置是最新的 CORE i7)。我們的Turbo解碼器經過六次迭代譯碼以達到這一性能。我們將在Turbo譯碼器中研究性能和復雜性之間的折衷。

圖片

3.13 本章總結

Simulink及其工具箱提供了用于建模、仿真、評估性能、以及最終生成和實現通信系統代碼的能力。對于建模和仿真,我們可以使用來自通信系統工具箱的算法構建塊,作為系統對象或Simulink塊。在MATLAB中可以更有效地對移動標準的PHY處理的許多方面進行建模和仿真,因為我們可以專注于將更高級的功能引入系統模型,而不是創建諸如調制器和編碼器之類的構建塊。特別感興趣的是通信系統工具箱的系統對象。系統對象是為基于塊的流系統的建模而設計的自文檔化、易于使用和定制的建模和仿真組件。

當模擬復雜系統時,我們需要訪問各種加速技術。這些技術幫助我們處理更多的測試數據,并在合理的模擬時間內獲得統計上正確的評估。MATLAB工具箱,如并行處理工具箱和MATLAB編碼器可以加快仿真。最后,為了在軟件或硬件上實現設計,我們可以使用代碼生成產品通過自動C或HDL代碼生成來獲得對精確實現細節的訪問。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 解調器
    +關注

    關注

    0

    文章

    284

    瀏覽量

    25612
  • MATLAB仿真
    +關注

    關注

    4

    文章

    175

    瀏覽量

    19661
  • QPSK調制
    +關注

    關注

    0

    文章

    9

    瀏覽量

    7567
  • CRC效驗
    +關注

    關注

    0

    文章

    30

    瀏覽量

    1072
  • 卷積編碼器
    +關注

    關注

    0

    文章

    6

    瀏覽量

    2383
收藏 人收藏

    評論

    相關推薦

    畢業設計 基于EDA的CMI碼編碼譯碼器的設計

    畢業設計 基于EDA的CMI碼編碼譯碼器的設計,共20頁,7505字  摘要   CMI碼是一種應用于PCM四次群和光纖傳輸系統中的常用線路碼型,它具有碼變換設備簡單、便于時鐘提取、有一定的糾錯能力
    發表于 03-25 13:19

    FPGA基礎學習筆記--組合邏輯電路-編碼器譯碼器

    `FPGA基礎學習筆記--組合邏輯電路-編碼器譯碼器編碼器4輸入2輸出編碼器代碼如下module encoder (input [3:0] iA,output reg [1:0] o
    發表于 02-20 15:36

    求multisim數碼顯示譯碼器仿真?。。?!譯碼器是CC4511

    求multisim數碼顯示譯碼器仿真?。。?!譯碼器是CC4511。。。。。我的調不太通,希望看看大神做的成品,參考一下?。。?!,很急!
    發表于 12-21 21:13

    如何利用FPGA設計Viterbi譯碼器?

    增加一些監督碼元,這些監督碼與信碼之間有一定的關系,接收端可以利用這種關系由信道譯碼器來發現或糾正錯誤的碼元。
    發表于 08-15 06:12

    大圍數QC_LDPC碼的譯碼器該怎么設計?

    LDPC碼是近年來發展較快且日趨成熟的一種信道編碼方案,因其具有的優越性能和實用價值而被人們認知,但由于隨機結構的LDPC碼編譯碼器硬件實現較為復雜,具有的準循環特性QC_LDPC碼已成為IEEE802.11n(WiFi)、IEEE802.16e(WiMAX)、(DVB—
    發表于 09-30 07:19

    視頻編碼器譯碼器的主要特性是什么?

    本文介紹了視頻編碼器譯碼器主要特性。
    發表于 06-02 06:39

    編碼器譯碼器(數電實驗報告)精選資料分享

    編碼器譯碼器一、 實驗目的掌握用邏輯門實現編碼器的方法掌握中規模集成電路編碼器譯碼器的工作原理即邏輯功能掌握 74LS138 用作數據分
    發表于 07-30 07:41

    如何利用譯碼器進行組合邏輯電路的設計呢

    集成電路編碼器譯碼器的工作原理即邏輯功能是什么?如何利用邏輯門去實現一種集成電路編碼器呢?如何利用譯碼器進行組合邏輯電路的設計呢?
    發表于 11-03 06:55

    定時的正交譯碼器功能介紹

    本期內容來介紹一下定時的正交譯碼器功能(編碼器接口)。正交譯碼器是和正交編碼器外設配合使用的,可對編碼
    發表于 08-16 06:46

    編碼器譯碼器

    ? 第4章 ? 編碼器譯碼器
    發表于 12-20 23:14 ?57次下載

    譯碼器課件ppt

    19.4  譯碼器譯碼器的分類         1. 譯碼器 —輸入為非十進制編碼
    發表于 09-27 13:04 ?0次下載

    信道編碼——引言

    信道編碼:從消息到信道波形或矢量的映射目的:了解信道編碼的作用與意義,對信道編碼的研究方法和成果有廣泛的基本認識,學會應用,為進一步研究打下基礎特點:以概
    發表于 08-01 09:11 ?44次下載
    <b class='flag-5'>信道編碼</b>——引言

    Turbo 碼及交織技術在WCDMA 的信道編碼方案中的應用

    文章首先介紹了信道編碼的原理和WCDMA 中的信道編碼方案,然后詳細分析了在WCDMA 系統中Turbo 碼的編譯碼原理,最后根據不同數據傳輸速率的要求對WCDMA 系統中交織器的模式和深
    發表于 08-24 11:48 ?1次下載

    基于FPGA的數字音頻廣播信道編碼器的實現

    介紹了數字音頻廣播(DAB) 信道編碼 的原理和關鍵技術,并應用單片FLEX10K100 系列FPGA 實現DAB 信道編碼器。
    發表于 07-18 17:04 ?68次下載
    基于FPGA的數字音頻廣播<b class='flag-5'>信道編碼器</b>的實現

    如何使用FPGA實現信道編碼

    信道編碼發展迅速, 應用越來越廣泛, 而信道編碼的好壞對眾多工程技術領域的發展有著重要影響,所以對信道編碼的研究工作有著非常重要的意義。本論文從闡述信道編碼理論出發, 介紹了
    發表于 08-18 17:11 ?11次下載
    如何使用FPGA實現<b class='flag-5'>信道編碼</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>