Anda di halaman 1dari 10

clc;clear;clc pak_uz=1200; msg=randi([0 1],pak_uz,1);%snr 6,02 kaydrlarak Es/No a dntrlecek sayi=0; snr=10.7; Es=snr-6.

02;i=1; number=2; delay=60; pak_uz=2288; pak_sayi=12; top_uz=2304; pref_uz=747; %pak_uz=1200; M_dizi =[16 4 2]; M=16;i=1;o=1;b=1; crc_uz=16; pakcrc_uz=pak_uz+crc_uz; gen = crc.generator('Polynomial', '0x8005', 'ReflectInput', ... true, 'ReflectRemainder', true); det = crc.detector('Polynomial', '0x8005', 'ReflectInput', ... true, 'ReflectRemainder', true); msg=randi([0 1],pak_uz,4);%snr 6,02 kaydrlarak Es/No a dntrlecek sayi=0; ofdm_sub_channel_number=64; pakcrc_uz=pak_uz+crc_uz; punct_code_rate=2/3; number=2; nrows = 5; % Use 5 shift registers slope = 3; % Delays are 0, 3, 6, 9, and 12. delay=60; delayintrlv=60; nrows = 5; % Use 5 shift registers slope = 3; % Delays are 0, 3, 6, 9, and 12. msg1=zeros(pak_uz,1); msgmtrs=zeros(pak_uz,1); for den=1:3 M=M_dizi(den); for o=1:1 for h=1:1 for denk=1:3 msg=randi([0 1],pak_uz,1); msgmtrs(:,denk)=msg(:,1); i=1; pref_uz=pak_uz/(4*log2(M)); f=zeros(pakcrc_uz/log2(M),log2(M)); A=zeros(1,pakcrc_uz); buf=zeros(pakcrc_uz,1); bufqcode=zeros(pakcrc_uz,1); buffer=zeros(pakcrc_uz,1); bufferqcode=zeros(pakcrc_uz,1); sayac=0; %P1=[1 1 1];%1/2 %P2=[1 1 1];%1/2 %Q1=[0 0 0];%1/2 %Q2=[0 0 0];%1/2

%P1=[1 1 1 1 0 1 0 1];%2/3 %P2=[1 0 1 0 1 1 1 1];%2/3 %Q1=[0 0 0 0 1 0 1 0];%2/3 %Q2=[0 1 0 1 0 0 0 0];%2/3 %P1=[1 0 1];%3/4 %P2=[1 1 0];%3/4 %Q1=[0 1 0];%3/4 %Q2=[0 0 1];%3/4 P1=[1 1 1 1 0 1 0 0];%4/5 P2=[1 0 1 0 1 0 1 1];%4/5 Q1=[0 0 0 0 1 0 1 1];%4/5 Q2=[0 1 0 1 0 1 0 0];%4/5 %i=1; g1=[133]; g2=[171]; g3=[133]; g4=[g1 g2]; trel = poly2trellis(7,[171]); % Define trellis. encoded1punc(:,i) = generate(gen, msg(:,i)); code1punc(:,i) = convenc(encoded1punc(:,i),trel); % Encode the data. %if (den>1) (i>1) %A=A'; %end for ii=1:length(code1punc)/length(Q1) for kk=1:length(Q1) A((ii-1)*length(Q1)+kk)=code1punc((ii-1)*length(Q1)+kk,i)*Q1(kk); end end A=A'; A = convintrlv(A,nrows,slope); % Interleaving using convintrlv. t=0; data=A'; top_uz=length(A(:,1))/log2(M); for j=1:top_uz t=(log2(M))*(j-1)+1:(log2(M))*(j); c=int2str(data(1,t)); input(j,1)=bin2dec(c); end if den==1 msg_tx = qammod(input', M); else msg_tx = pskmod(input', M); end % 3. Serial to Parallel parallel_mod_data = reshape(msg_tx,top_uz/ofdm_sub_channel_number,ofdm_sub_chann el_number); % 4. 64-point IFFT ofdm_msg = ifft(parallel_mod_data); % 5. Parallel to serial ofdm_msg= reshape(ofdm_msg, top_uz,1); prefix=randi([0 1],pref_uz,1); ofdm_msg_tx(1:(pref_uz+length(ofdm_msg)),i)=... [prefix;ofdm_msg(:,1)]; ncode1punc= awgn(ofdm_msg_tx,snr(o),'measured'); % Add noise. ofdm_msg_rx_pref(1:(length(ofdm_msg)),1)=...

[ncode1punc(pref_uz+1:pref_uz+length(ofdm_msg))]; % 1. Serial to Parallel ofdm_msg_rx = reshape(ofdm_msg_rx_pref, top_uz/ofdm_sub_channel_number,ofdm_sub_ channel_number); % 2. 64-point FFT msg_rx = fft(ofdm_msg_rx); % 3. Parallel to serial msg_rx_ser = reshape(msg_rx, top_uz,1); % 4. Demodulation if den==1 msg_demod1punc = qamdemod(msg_rx_ser, M); else msg_demod1punc = pskdemod(msg_rx_ser, M); end l=1:top_uz; msg_rx_ser=dec2bin(msg_demod1punc(l,1)); k=1:top_uz; for m=1:log2(M); f(k,m)=str2num(msg_rx_ser(k,m)); end qam=zeros(top_uz*log2(M),1); qam(1:top_uz*log2(M),1)=reshape(f',top_uz*log2(M),1); msg_demod1puncintrlv(:,1)= convdeintrlv(qam(:,1),nrows,slope); %msg_demod11intrlv(:,1)= convdeintrlv(msg_demod11(:,1),nrows,slope); % Quantize to prepare for soft-decision decoding. qcode1punc = quantiz(msg_demod1puncintrlv,[0.001,.1,.3,.5,.7,.9,.999]); tblen = 60; delay = tblen; % Traceback length decoded1punc = vitdec(qcode1punc,trel,tblen,'cont','soft',3); % Decode.

trel = poly2trellis(7,[133]); % Define trellis. encoded2punc(:,i) = generate(gen, msg(:,i)); code2punc(:,i)= convenc(encoded2punc(:,i),trel); % Encode the data. for ii=1:length(code2punc)/length(Q2) for kk=1:length(Q2) A((ii-1)*length(Q2)+kk)=code2punc((ii-1)*length(Q2)+kk,i)*Q2(kk); end end A = convintrlv(A,nrows,slope); % Interleaving using convintrlv. t=0; data=A'; top_uz=length(A(:,1))/log2(M); for j=1:top_uz t=(log2(M))*(j-1)+1:(log2(M))*(j); c=int2str(data(1,t)); input(j,1)=bin2dec(c); end if den==1 msg_tx = qammod(input', M); else msg_tx = pskmod(input', M); end % 3. Serial to Parallel parallel_mod_data = reshape(msg_tx,top_uz/ofdm_sub_channel_number,ofdm_sub_chann el_number); % 4. 64-point IFFT ofdm_msg = ifft(parallel_mod_data);

% 5. Parallel to serial ofdm_msg= reshape(ofdm_msg, top_uz,1); prefix=randi([0 1],pref_uz,1); ofdm_msg_tx(1:(pref_uz+length(ofdm_msg)),i)=... [prefix;ofdm_msg(:,1)]; ncode2punc = awgn(ofdm_msg_tx,snr(o),'measured'); % Add noise. ofdm_msg_rx_pref(1:(length(ofdm_msg)),1)=... [ncode2punc(pref_uz+1:pref_uz+length(ofdm_msg))]; % 1. Serial to Parallel ofdm_msg_rx = reshape(ofdm_msg_rx_pref, top_uz/ofdm_sub_channel_number,ofdm_sub_ channel_number); % 2. 64-point FFT msg_rx = fft(ofdm_msg_rx); % 3. Parallel to serial msg_rx_ser = reshape(msg_rx, top_uz,1); % 4. Demodulation if den==1 msg_demod2punc = qamdemod(msg_rx_ser, M); else msg_demod2punc = pskdemod(msg_rx_ser, M); end l=1:top_uz; msg_rx_ser=dec2bin(msg_demod2punc(l,1)); k=1:top_uz; for m=1:log2(M); f(k,m)=str2num(msg_rx_ser(k,m)); end qam=zeros(top_uz*log2(M),1); qam(1:top_uz*log2(M),1)=reshape(f',top_uz*log2(M),1); msg_demod2puncintrlv(:,1)= convdeintrlv(qam(:,1),nrows,slope); % Quantize to prepare for soft-decision decoding. qcode2punc = quantiz(msg_demod2puncintrlv,[0.001,.1,.3,.5,.7,.9,.999]); % Quantize to prepare for soft-decision decoding. tblen = 60; delay = tblen; % Traceback length decoded2punc = vitdec(qcode2punc,trel,tblen,'cont','soft',3); % Decode. number=2; while number>0 if number>0 if sayi>0; trel = poly2trellis(7,[133]); % Define trellis. encoded1t1(:,i) = generate(gen, msg(:,i)); code1t1(:,i) = convenc(encoded1t1(:,i),trel); % Encode the data. A=zeros(pak_uz,1); for ii=1:length(code1t1)/length(P1) for k=1:length(P1) A((ii-1)*length(P1)+k)=code1t1((ii-1)*length(P1)+k,i)*P1(k); end end A = convintrlv(A,nrows,slope); % Interleaving using convintrlv. t=0;

data=A'; top_uz=length(A(:,1))/log2(M); for j=1:top_uz t=(log2(M))*(j-1)+1:(log2(M))*(j); c=int2str(data(1,t)); input(j,1)=bin2dec(c); end if den==1 msg_tx = qammod(input', M); else msg_tx = pskmod(input', M); end %msg_tx = pskmod(code1', M); % 3. Serial to Parallel parallel_mod_data = reshape(msg_tx,top_uz/ofdm_sub_channel_number,ofdm_sub_chann el_number); % 4. 64-point IFFT ofdm_msg = ifft(parallel_mod_data); % 5. Parallel to serial ofdm_msg= reshape(ofdm_msg, top_uz,1); prefix=randi([0 1],pref_uz,1); ofdm_msg_tx(1:(pref_uz+length(ofdm_msg)),i)=... [prefix;ofdm_msg(:,1)]; ncode1 = awgn(ofdm_msg_tx,snr(o),'measured'); % Add noise. sayi=sayi+1; sayac=sayac+1; ofdm_msg_rx_pref(1:(length(ofdm_msg)),1)=... [ncode1(pref_uz+1:pref_uz+length(ofdm_msg))]; % 1. Serial to Parallel ofdm_msg_rx = reshape(ofdm_msg_rx_pref, top_uz/ofdm_sub_channel_number,ofdm_sub_ channel_number); % 2. 64-point FFT msg_rx = fft(ofdm_msg_rx); % 3. Parallel to serial msg_rx_ser = reshape(msg_rx, top_uz,1); % 4. Demodulation if den==1 msg_demod = qamdemod(msg_rx_ser, M); else msg_demod = pskdemod(msg_rx_ser, M); end l=1:top_uz; msg_rx_ser=dec2bin(msg_demod(l,1)); k=1:top_uz; for m=1:log2(M); f(k,m)=str2num(msg_rx_ser(k,m)); end qam=zeros(top_uz*log2(M),1); qam(1:top_uz*log2(M),1)=reshape(f',top_uz*log2(M),1); msg_demodintrlv(:,1)= convdeintrlv(qam(:,1),nrows,slope);

% Quantize to prepare for soft-decision decoding. %msg_demodintrlv(:,1)= convdeintrlv(msg_demod(:,1),nrows,slope); qcode1t1 = quantiz(msg_demodintrlv,[0.001,.1,.3,.5,.7,.9,.999]); % Quantize to prepare for soft-decision decoding. tblen = 60; delay = tblen; % Traceback length decoded1t1(:,i) = vitdec(qcode1t1,trel,tblen,'cont','soft',3); % Decode. [outdata1t1(:,denk) error] = detect(det, decoded1t1(:,i)); [number,ratio]=biterr(outdata1t1(delay+delayintrlv+1:end,denk),msgmtrs(1:end-del ayintrlv-delay,denk)) %[number1t1,ratio1t1] = biterr(decoded1t1(delay+1+delayintrlv:end),msg(1:end-del ay-delayintrlv,1)) bufqcode(:,sayi)=msg_demod2puncintrlv(1:end,1)+msg_demodintrlv(1:end,1); end end if number>0 if sayi>=2 g3(:,(sayi-1))=g1; g4=[g1 g3]; trel = poly2trellis(7,[g4]); % Define trellis. ksay=0; for z=1:length(bufqcode(:,sayi)) for hop=1:sayi ksay=ksay+1; bufferqcode(ksay,1)=bufqcode(z,hop); end end delay=60; tblen=delay; %bufferqcodeintrlv(:,1)= convdeintrlv(bufferqcode(:,1),nrows,slope); % Quantize to prepare for soft-decision decoding. qcode121= quantiz(bufferqcode,[0.001,.1,.3,.5,.7,.9,.999]); decoded121(:,i) = vitdec(qcode121,trel,tblen,'cont','soft',3); % Decode. [outdata121(:,denk) error] = detect(det, decoded121(:,i)); [number,ratio]=biterr(outdata121(delay+delayintrlv+1:end,denk),msgmtrs(1:end-del ayintrlv-delay,denk)) end end if number>0 if sayi==0; trel = poly2trellis(7,[133]); % Define trellis. encoded1(:,i) = generate(gen, msg(:,i)); code1(:,i) = convenc(encoded1(:,i),trel); % Encode the data. code1 = convintrlv(code1,nrows,slope); % Interleaving using convintrlv. t=0; data=code1'; top_uz=length(code1(:,i))/log2(M); for j=1:top_uz t=(log2(M))*(j-1)+1:(log2(M))*(j); c=int2str(data(i,t)); input(j,1)=bin2dec(c); end if den==1

msg_tx = qammod(input', M); else msg_tx = pskmod(input', M); end %msg_tx = pskmod(code1', M); % 3. Serial to Parallel parallel_mod_data = reshape(msg_tx,top_uz/ofdm_sub_channel_number,ofdm_sub_chann el_number); % 4. 64-point IFFT ofdm_msg = ifft(parallel_mod_data); % 5. Parallel to serial ofdm_msg= reshape(ofdm_msg, top_uz,1); prefix=randi([0 1],pref_uz,1); ofdm_msg_tx(1:(pref_uz+length(ofdm_msg)),i)=... [prefix;ofdm_msg(:,1)]; ncode1 = awgn(ofdm_msg_tx,snr(o),'measured'); % Add noise. sayi=sayi+1; sayac=sayac+1; ofdm_msg_rx_pref(1:(length(ofdm_msg)),1)=... [ncode1(pref_uz+1:pref_uz+length(ofdm_msg))]; % 1. Serial to Parallel ofdm_msg_rx = reshape(ofdm_msg_rx_pref, top_uz/ofdm_sub_channel_number,ofdm_sub_ channel_number); % 2. 64-point FFT msg_rx = fft(ofdm_msg_rx); % 3. Parallel to serial msg_rx_ser = reshape(msg_rx, top_uz,1); % 4. Demodulation if den==1 msg_demod= qamdemod(msg_rx_ser, M); else msg_demod = pskdemod(msg_rx_ser, M); end l=1:top_uz; msg_rx_ser=dec2bin(msg_demod(l,1)); k=1:top_uz; for m=1:log2(M); f(k,m)=str2num(msg_rx_ser(k,m)); end qam=zeros(top_uz*log2(M),1); qam(1:top_uz*log2(M),1)=reshape(f',top_uz*log2(M),1); msg_demodintrlv(:,1)= convdeintrlv(qam(:,1),nrows,slope); % Quantize to prepare for soft-decision decoding. %msg_demodintrlv(:,1)= convdeintrlv(msg_demod(:,1),nrows,slope); qcode1 = quantiz(msg_demodintrlv,[0.001,.1,.3,.5,.7,.9,.999]); % Quantize to prepare for soft-decision decoding. tblen = 60; delay = tblen; % Traceback length decoded1(:,i) = vitdec(qcode1,trel,tblen,'cont','soft',3); % Decode. [outdata1(:,denk) error] = detect(det, decoded1(:,i)); [number,ratio]=biterr(outdata1(delay+delayintrlv+1:end,denk),msgmtrs(1:end-delay intrlv-delay,denk))

%[number1,ratio1] = biterr(decoded1(delay+1+delayintrlv:end),msg(1:end-delay-del ayintrlv,1)) bufqcode(1:end,sayi)=msg_demodintrlv(1:end,1); end end if number>0 trel = poly2trellis(7,[171]); % Define trellis. encoded2(:,i) = generate(gen, msg(:,i)); code2(:,i) = convenc(encoded2(:,i),trel); % Encode the data. A=zeros(pak_uz,1); for ii=1:length(code2)/length(P1) for kk=1:length(P1) A((ii-1)*length(P1)+kk)=code2((ii-1)*length(P1)+kk,i)*P1(kk); end end A = convintrlv(A,nrows,slope); % Interleaving using convintrlv. t=0; data=A'; top_uz=length(A(:,1))/log2(M); for j=1:top_uz t=(log2(M))*(j-1)+1:(log2(M))*(j); c=int2str(data(1,t)); input(j,1)=bin2dec(c); end if den==1 msg_tx = qammod(input', M); else msg_tx = pskmod(input', M); end %msg_tx = pskmod(A', M); % 3. Serial to Parallel parallel_mod_data = reshape(msg_tx,top_uz/ofdm_sub_channel_number,ofdm_sub_chann el_number); % 4. 64-point IFFT ofdm_msg = ifft(parallel_mod_data); % 5. Parallel to serial ofdm_msg= reshape(ofdm_msg, top_uz,1); prefix=randi([0 1],pref_uz,1); ofdm_msg_tx(1:(pref_uz+length(ofdm_msg)),i)=... [prefix;ofdm_msg(:,1)]; ncode2 = awgn(ofdm_msg_tx,snr(o),'measured'); % Add noise. sayi=sayi+1; sayac=sayac+1; ofdm_msg_rx_pref(1:(length(ofdm_msg)),1)=... [ncode2(pref_uz+1:pref_uz+length(ofdm_msg))]; % 1. Serial to Parallel ofdm_msg_rx = reshape(ofdm_msg_rx_pref, top_uz/ofdm_sub_channel_number,ofdm_sub_ channel_number); % 2. 64-point FFT msg_rx = fft(ofdm_msg_rx); % 3. Parallel to serial msg_rx_ser = reshape(msg_rx, top_uz,1); % 4. Demodulation

if den==1 msg_demod= qamdemod(msg_rx_ser, M); else msg_demod = pskdemod(msg_rx_ser, M); end l=1:top_uz; msg_rx_ser=dec2bin(msg_demod(l,1)); k=1:top_uz; for m=1:log2(M); f(k,m)=str2num(msg_rx_ser(k,m)); end qam=zeros(top_uz*log2(M),1); qam(1:top_uz*log2(M),1)=reshape(f',top_uz*log2(M),1); msg_demodintrlv(:,1)= convdeintrlv(qam(:,1),nrows,slope); % Quantize to prepare for soft-decision decoding. %msg_demodintrlv(:,1)= convdeintrlv(msg_demod(:,1),nrows,slope); qcode2a = quantiz(msg_demodintrlv,[0.001,.1,.3,.5,.7,.9,.999]); tblen = 60; delay = tblen; % Traceback length decoded2(:,i) = vitdec(qcode2a,trel,tblen,'cont','soft',3); % Decode. % Compute bit error rate. bufqcode(:,sayi)=msg_demod1puncintrlv(1:end,1)+msg_demodintrlv(1:end,1); [outdata2(:,denk) error] = detect(det, decoded2(:,i)); [number,ratio]=biterr(outdata2(delay+delayintrlv+1:end,denk),msgmtrs(1:end-delay intrlv-delay,denk)) end %[number2,ratio2] = biterr(decoded2(delay+1+delayintrlv:end),msg(1:end-delay-del ayintrlv,1)) %trel = poly2trellis(7,[133 171]); % Define trellis. if number>0 g3(:,(sayi-1))=g2; g4=[g1 g3]; trel = poly2trellis(7,[g4]); % Define trellis. ksay=0; for z=1:length(bufqcode(:,sayi)) for hop=1:sayi ksay=ksay+1; bufferqcode(ksay,1)=bufqcode(z,hop); end end delay=60; tblen=delay; %bufferqcodeintrlv(:,1)= convdeintrlv(bufferqcode(:,1),nrows,slope); % Quantize to prepare for soft-decision decoding. qcode12= quantiz(bufferqcode,[0.001,.1,.3,.5,.7,.9,.999]); decoded12(:,i) = vitdec(qcode12,trel,tblen,'cont','soft',3); % Decode. [outdata12(:,denk) error] = detect(det, decoded12(:,i)); [number,ratio]=biterr(outdata12(delay+delayintrlv+1:end,denk),msgmtrs(1:end-dela yintrlv-delay,denk))

end end sayi=0; end basari(h)=pak_sayi/sayac sayac=0; end basarim1(o)=mean(basari) end basarim(den,:)=basarim1; end plot(Es,basarim(1,:),'+',Es,basarim(2,:), 'o',Es,basarim(3,:), '.'); xlabel('Ec/No'); ylabel('M Deitirilmi Basarm'); title('ARQ-OFDM basarimi');

Anda mungkin juga menyukai