1.算法描述
本文推導(dǎo)了符號(hào)間干擾(ISI)信道的矢量形狀因子圖表示。結(jié)果圖具有樹形結(jié)構(gòu),避免了現(xiàn)有圖方法中的短周期問題。基于聯(lián)合高斯近似,我們?cè)贚LR(對(duì)數(shù)似然比)之間建立了聯(lián)系由二進(jìn)制輸入和LMMSE(線性最小均方誤差)驅(qū)動(dòng)的線性系統(tǒng)的估計(jì)器高斯輸入驅(qū)動(dòng)的線性系統(tǒng)的估計(jì)器。此連接有助于應(yīng)用最近提出的ISI信道無周期圖高斯消息傳遞技術(shù)。
LMMSE+Turbo主要原理見如下文獻(xiàn):

從參考文獻(xiàn)中的內(nèi)容可知,整個(gè)系統(tǒng)大概的結(jié)構(gòu)如下所示:

所以,我們按這個(gè)結(jié)構(gòu)進(jìn)行編程設(shè)計(jì)。
LMMSE:
首先將MMSE計(jì)算公式中的XHX用其均值來代替,即

為什么用均值來代替即時(shí)值能降低計(jì)算復(fù)雜度?這需要分析XHX里面的數(shù)據(jù)是什么,它是一個(gè)MM的矩陣,其對(duì)角線上是已知數(shù)據(jù)(導(dǎo)頻信號(hào))的功率,而其他位置的數(shù)據(jù)則是已知數(shù)據(jù)與其自身延遲數(shù)據(jù)的相關(guān),該相關(guān)值可近似為滿足標(biāo)準(zhǔn)正態(tài)分布的信號(hào)(均值為0)。那么對(duì)應(yīng)到E(XHX),其對(duì)角線上的數(shù)據(jù)就是已知數(shù)據(jù)的平均功率,而其他位置的數(shù)據(jù)則為0。因此通過這種替代,可將hmmse進(jìn)一步做如下化簡(jiǎn)


其中SNR為接收信號(hào)的信噪比,而β則是與調(diào)制方式有關(guān)的一個(gè)常數(shù)。
TURBO:
turbo Codes譯碼是一類具有反饋結(jié)構(gòu)的偽隨機(jī)譯碼器,2個(gè)碼可以交替互不影響的譯碼,并且還可以通過關(guān)于系統(tǒng)碼信息位的軟判決輸出相互傳遞信息,進(jìn)行遞推式迭代譯碼。Turbo譯碼結(jié)構(gòu)如圖1所示:

Turbo碼的譯碼算法主要分為兩大類:一類是基于最大后驗(yàn)概率(Maximum A Posteriori,MAP)軟輸出算法,這類算法由標(biāo)準(zhǔn)MAP算法演化得來。對(duì)標(biāo)準(zhǔn)MAP算法取對(duì)數(shù)得到Log-MAP算法,對(duì)Log-MAP算法中的分支度量進(jìn)行簡(jiǎn)化,得到MAX-Log-MAP算法。另一類是基于Viterbi算法的軟輸出算法,是對(duì)卷積碼的譯碼算法Viterbi的改進(jìn),使其滿足SISO特性,軟信息可以在兩個(gè)分量譯碼器之間交換。這種改進(jìn)的Viterbi算法為軟輸出Viterbi算法(SOVA)。
2.仿真效果預(yù)覽
matlab2022a仿真結(jié)果如下:


3.MATLAB核心程序
for j=1:length(SNR_in_dB)
%通過既有碼間干擾又有白噪聲信道
for jj = 1:1000
j
jj
info ?????= [ones(1,2048),func_random_binary(N)];%產(chǎn)生二進(jìn)制信號(hào)序列
%Encoder
info2 = [];
for ii = 1:(N+2048)/length(Interleaver)
tmps ?= info(length(Interleaver)*(ii-1)+1:length(Interleaver)*ii);
info2 = [info2,tmps(Interleaver)];%交織
end
%turbo編碼
turbo_code = [func_turbo_encode_map(logical((info2+1)/2)),zeros(1,10000)];%82954,76810=6144
%多徑噪聲信道
[y,len,h] ?= func_channel(2*turbo_code-1,SNR_in_dB(j));
if j==1
info4 = zeros(size(info));
end
%LMMSE均衡
z ?????????= func_LMMSE_eq(y,h,SNR_in_dB(j),info4);
decis ?????= [2*[z>=0]-1]';
%獲得均衡后數(shù)據(jù)
XX ????????= [decis(6:82953+5)];
%demap_decode,譯碼
output= 2*func_turbo_decode_demap(XX,ITER)-1;%82953
%解交織
info3 = [];
for ii = 1:(N+2048)/length(De_Interleaver)
tmps2 ?= output(length(De_Interleaver)*(ii-1)+1:length(De_Interleaver)*ii);
info3 = [info3,tmps2(De_Interleaver)];%交織
end
%反饋,交織
info4 = [];
for ii = 1:(N+2048)/length(Interleaver)
tmps3 = info3(length(Interleaver)*(ii-1)+1:length(Interleaver)*ii);
info4 = [info4,tmps3(Interleaver)];%交織
end
%初始誤碼統(tǒng)計(jì)數(shù)
NumErr1 = sum(info(1:27499)~=info3(1:27499));
if NumErr1 == 0%無法統(tǒng)計(jì)到誤碼率
NumErr1 = 1;
end
Pe4(j,jj) ?= NumErr1/N;
end
end; ?
01-142m