📄 ofdm.m
字号:
% --------------------------------------------- %
% 参数定义 %
% --------------------------------------------- %
% Initialize the parameters
N=64; %子载波个数
GI=4; %保护间隔
errerrate=1:1:121
idealerr=1:1:121
%SNR取值范围,取值个数为121
SNR=1:0.2:25
%序列长度为S*num=400*2^12
S=400;
num=2^12;
% --------------------------------------------- %
% 循环开始 %
% --------------------------------------------- %
for i=1:1:121
totalErrors=0;
totalErrorsQPSK=0;
for j=1:1:S
x=rand(1,num)<0.5;
x_mod=QPSKMod(x);
%x_mod=BPSKMod(x);
ofdm_symbol=[];
ofdm_symbol=reshape(x_mod,N,length(x_mod)/N); %串并转换
Tx_data=ifft_cp(ofdm_symbol,N,GI,num); %IFFT,加循环前缀发送
Rx_Data = awgn(Tx_data,SNR(i),'measured'); %加高斯白噪声
Rx_Data_sincarrier = awgn(x_mod,SNR(i),'measured');
rec_symbol=fft_cutcp(Rx_Data,N,GI,num); %接收端FFT,去循环前缀P/S变换
y=QPSKDemod(rec_symbol) ; %解调
%y=BPSKDemod(rec_symbol) ; %解调
y_sincarrier=QPSKDemod(Rx_Data_sincarrier);
totalErrors=sum(xor(y,x))+totalErrors;
totalErrorsQPSK=sum(xor(y_sincarrier,x))+totalErrorsQPSK;
end
errerrate(i)=totalErrors/(num*S); %OFDM仿真误码率
errerrate_sincarrier(i)=totalErrorsQPSK/(num*S); %QPSK调制仿真误码率
linearSNR=10^(SNR(i)/10);
idealerr(i)=erfc(sqrt(linearSNR/2))/2; %QPSK调制理论误码率
end
% --------------------------------------------- %
% 图像绘制 %
% --------------------------------------------- %
plot(SNR,errerrate,'r',SNR,idealerr,'b',SNR,errerrate_sincarrier,'g');
%plot(SNR,errerrate,'r',SNR,idealerr,'b');
title('误码率曲线')
xlabel('SNR/dB');
ylabel('Pe');
legend('OFDM误码率仿真曲线','QPSK调制误码率理论曲线','QPSK调制误码率仿真曲线')
grid;
AXIS([0 27 10^(-6) 0.5])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -