?? dfadvanced.m
字號:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%10/6/2008 zhangsong
%一個具有差錯檢測的DF仿真程序
%新CRC
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
echo off;clear all;close all;clc;
tic
N=1000;
L=65; %一幀長度
BerSnrTable=zeros(20,5);
for snr=0:25
BerSnrTable(snr+1,1) = snr;
sig=1/sqrt(10^(snr/10));
temp=0;
temp1=0;
for i=1:N
BitsTx = floor(rand(1,L)*2);
BitsTxcrc=CrcEncode(BitsTx);
BitsTxcnv=cnv(BitsTxcrc);
Mod8Tx=mod_8psk(BitsTxcnv);
M=length(Mod8Tx);
%以下為假設信道模型和噪聲模型,由于本次仿真重點不在于此,所以做以下簡化
H1d=randn(1,M)+j*randn(1,M);
H12=randn(1,M)+j*randn(1,M);
H2d=randn(1,M)+j*randn(1,M);
Z1d=randn(1,M)+j*randn(1,M);
Z12=randn(1,M)+j*randn(1,M);
Z2d=randn(1,M)+j*randn(1,M);
% d接收
Y1d=H1d.*Mod8Tx+sig*Z1d;
%user2接收并解碼
Y12=H12.*Mod8Tx+sig*Z12;
R12=conj(H12).*Y12;
BitR12=demod_8psk(R12);
BitR12viterbi=viterbi(BitR12);
BitR12viterbi=BitR12viterbi(1:length(BitR12viterbi)-1);
[BitR12decrc,error]=CrcDecode(BitR12viterbi);
%error=0,正確解碼 error=1,錯誤解碼
%非協作情況
if(error==1)
R1d=conj(H1d).*Y1d;
BitR1d=demod_8psk(R1d);
BitR1dviterbi=viterbi(BitR1d);
BitR1dviterbi=BitR1dviterbi(1:length(BitR1dviterbi)-1);
BitR1ddecrc=CrcDecode(BitR1dviterbi);
[Num,Ber] = symerr(BitR1ddecrc,BitsTx);
BerSnrTable(snr+1,2)=BerSnrTable(snr+1,2)+Num;
end
%協作情況
if(error==0)
Bits2d=BitR12decrc;
Bits2dcrc=CrcEncode(Bits2d);
Bits2dcnv=cnv(Bits2dcrc);
Mod8_2d=mod_8psk(Bits2dcnv);
Y2d=H2d.*Mod8_2d+sig*Z2d;
%最大合并比在此處的簡化形式
Rd=conj(H2d).*Y2d+conj(H1d).*Y1d;
BitRd=demod_8psk(Rd);
BitRdviterbi=viterbi(BitRd);
BitRdviterbi=BitRdviterbi(1:length(BitRdviterbi)-1);
BitRddecrc=CrcDecode(BitRdviterbi);
[Num,Ber] = symerr(BitRddecrc,BitsTx);
BerSnrTable(snr+1,2)=BerSnrTable(snr+1,2)+Num;
temp=temp+1;
end
end
BerSnrTable(snr+1,3)=BerSnrTable(snr+1,2)/(L*N); %此處將M改成N
BerSnrTable(snr+1,4)=temp;
end
semilogy(BerSnrTable(:,1),BerSnrTable(:,3),'r*-');
figure
semilogy(BerSnrTable(:,1),BerSnrTable(:,4),'g*-');
time_of_sim = toc
echo on;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -