BPSK QPSK調製下PNC下行鏈路LDPC解碼

2021-08-28 21:36:36 字數 2642 閱讀 1193

%%%%-----此段**完成pnc下行鏈路ldpc解碼,中繼端資料假設是理想接收無差錯---%%%%

clcclear

code_length=24; %碼長

code_rate=1/2; %位元速率

max_iter=20; %解碼最大迭代次數

snr=3;

%%----ldpc檢驗矩陣和生成矩陣的構造----%%%

h=genh(code_length,code_rate); %生成校驗矩陣

g=geng(h); %獲得生成矩陣

g_gf1=gf(g,2); %轉換到有限域

g_gf2=gf(g,2); %轉換到有限域

dim=size(h);

d=dim(2)-dim(1);

%%---隨機產生a端和b端原始資料,並進行編碼

%------a端-----%

msg1=randi([0 1],1,d);

s_gf1=gf(msg1,2); %轉換到有限域

code_bit1=s_gf1*g_gf1; %%編碼

x1=code_bit1;

code_bit1=double(code_bit1.x);

%---- b端-----%

msg2=randi([0 3],1,d);

s_gf2=gf(msg2,2); %轉換到有限域

code_bit2=s_gf2*g_gf2; %%編碼

x2=code_bit2;

code_bit2=double(code_bit2.x);

%-----假設在中繼端無差錯接收-----%

yr=x1+x2;

yr=double(yr.x);

%%下行鏈路分兩路進行bpsk調製傳輸

yr=de2bi(yr);

yr1=yr(:,1);

yr2=yr(:,2);

y_bp1=-2*yr1+1;

y_bp2=-2*yr2+1;

%--加雜訊--%

yaw1=awgn(y_bp1,snr,'measured');

yaw2=awgn(y_bp2,snr,'measured');

%--接收端軟解碼,獲取碼字的概率資訊--%

sigma=sqrt(10^(-0.1*snr));

%第一路

f10=1./(1+exp(-2*yaw1/sigma^2));

f11=1-f10;

%第二路

f20=1./(1+exp(-2*yaw2/sigma^2));

f21=1-f20;

%---合併兩路,計算gf(4)上碼字的概率

p0=f10.*f20;

p1=f11.*f20;

p2=f10.*f21;

p3=f11.*f21;

%%%%

%b端求解a端的資訊

len=length(yr);

pa0=zeros(1,len);

for loop=1:len

if code_bit2(loop)==0

pa0(loop)=p0(loop);

elseif code_bit2(loop)==1

pa0(loop)=p1(loop);

elseif code_bit2(loop)==2

pa0(loop)=p2(loop);

elseif code_bit2(loop)==3

pa0(loop)=p3(loop);

endendpa1=1-pa0;

[yhat_a] = decode(h,max_iter,pa1,pa0);

ya=yhat_a';

err1=nnz(code_bit1-ya);

%%%%

%a端解b端的資訊

pb0=zeros(1,len);

pb1=zeros(1,len);

pb2=zeros(1,len);

pb3=zeros(1,len);

for loop=1:len

if code_bit1(loop)==0;

pb0(loop)=p0(loop);

pb1(loop)=p1(loop);

pb2(loop)=p2(loop);

pb3(loop)=p3(loop);

elseif code_bit1(loop)==1

pb0(loop)=p1(loop);

pb1(loop)=p0(loop);

pb2(loop)=p3(loop);

pb3(loop)=p2(loop);

endendpb10=pb0+pb1;

pb11=pb2+pb3;

pb20=pb0+pb2;

pb21=pb1+pb3;

yhat1= decode(h,max_iter,pb11,pb10);

yhat2= decode(h,max_iter,pb21,pb20);

yhat_b=[yhat2,yhat1]; %這裡位元發生顛倒,需注意

yb=(bi2de(yhat_b))'; %%二進位制位元流轉換為4元

err2=nnz(code_bit2-yb);

2FSK調製在瑞利通道下,(7,4)漢明碼

2fsk調製在瑞利通道下,7,4 漢明碼 clear all snr 10 10 n 30000 訊息位元個數 berhm zeros 1,length snr n 7 k 4 symbolrate 2000 符號速率 nsamp 8 每個符號的取樣點數 fs 5000 fs 9600 ts 1 f...

Win98下TAPI的數據機程式設計

一 簡介 隨著win98作業系統的普及,計算機之間的通訊已經成為大多數應用程式開發的要求,這其中的主要原因是win98不僅僅能夠支援大多數硬體,而且為硬體的操作提供了方便的程式設計介面 api win98的應用程式介面 api 提供的通訊手段大致分為以下幾類 基於tcp ip協議的winsockap...

Linux下Redis下安裝

redis安裝 檢查是否安裝redis ps ef grep redis2.檢查gcc服務是否安裝成功 rpm qa grep gcc注 安裝成功則顯示 mkdir redis5.解壓redis安裝包 tar zxvf redis 2.8.17 tar.gz c usr local redis 解壓...