📄 qpsk_fading.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% File Name: qpsk_fading.m
% Function: qpsk fading simulation
% Author:
% Date: 11.29
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Preparation part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sr=256000.0; % symbol rate
ml=2; % number of modulation levels (QPSK:ml=2)
br=sr .* ml; % bit rate
nd = 1000; % number of symbols that simulates in each loop
Eb_N0=0:1:30;% Eb/N0
nloop=500; % number of simulation loops
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Fading Initialization %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
v=0; % v: speed of MS (km/h)
%v=120;
fc=2e9;
c=3e8;
fd=1000*fc/c/3600;
%fd=1000*v*fc/c/3600; % calculate maximum Doppler frequency
fs=10*fd;
tstp=1/fs; % minimum time resolution
no=16; % number of oscillator
counter=1000;% fading counter
flat = 1; % flat fading
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Start %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:length(Eb_N0)
noe = 0; % number of error data
nod = 0; % number of transmitted data
soe = 0; % number of error symbol
sos = 0; % number of transmitted symbol
totalb = 0;
totals = 0;
for ii=1:nloop
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Data Generation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
data1=rand(1,nd*ml)>0.5;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% QPSK Modulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[ich,qch]=qpskmod(data1,nd,ml);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Attenuation Calculation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
spow=sum(ich.*ich+qch.*qch)/nd;
attn=0.5*spow*sr/br*10.^(-Eb_N0(i)/10);
attn=sqrt(attn);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Fading %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[ifade,qfade] = fade(ich,qch,nd,tstp,fd,no,counter,flat);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% AWGN %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[ich2,qch2]= qpskawgn(ifade,qfade,attn);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Compensation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
H = (ifade + sqrt(-1) * qfade) ./ (ich + sqrt(-1) * qch);
Y = (ich2 + sqrt(-1) * qch2) ./ H;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% QPSK Demodulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[demodata]=qpskdemod(real(Y),imag(Y),nd,ml);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% BER/SER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
noe2=sum(abs(data1-demodata));
nod2=length(data1);
noe=noe+noe2;
nod=nod+nod2;
totalb = totalb + noe/nod;
soe = soe + qpskser(data1,demodata,ml);
sos = sos + length(data1) ./ ml;
totals = totals + soe/sos;
end % for ii=1:nloop
Avg_BER(i) = totalb/nloop;
Theory(i) = (1/2) * erfc(sqrt(10.^(Eb_N0(i)/10)));
SER(i) = totals/nloop;
SNR(i) = 10*log10(10^(Eb_N0(i)/10) ./ ml);
end % Eb_N0=0:1:10
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Output SNR %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
semilogy(SNR,Avg_BER,'r-*');
title('QPSK(Flat Fading)');
xlabel('SNR(dB)');
ylabel('BER');
grid on;
hold on;
%
% semilogy(SNR,SER,'r-*');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -