📄 ofdm_trail.m
字号:
echo off;clear all;close all;clc;
fprintf( 'OFDM simulation TEST\n') ;
tic
%Timer start%
%----------参数定义------------%
Num_Loop = 100;
Num_Carrier = 1024;
Num_Cp = 256;
% 循环次数 100
%子载波数目 1024
%循环前缀数目 256
%----------信源生成------------%
Bit_Gen = floor(rand(1,Num_Loop*Num_Carrier)*2);
Bit_Mid = reshape(Bit_Gen,2,Num_Loop*Num_Carrier/2).';
Sym_Gen = bi2de(Bit_Mid,2,'left-msb');
%----------调制------------%
Cos_Table = [-1-1i -1+1i 1-1i 1+1i];
Sym_QAM = Cos_Table(Sym_Gen+1);
%查表法来进行QAM星座映射
%----------IFFT------------%
IFFT_Mid = reshape(Sym_QAM,Num_Carrier/2,Num_Loop);
IFFT_Full(1,:) = real(IFFT_Mid(1,:));
IFFT_Full(Num_Carrier/2+1,:) = imag(IFFT_Mid(1,:));
IFFT_Full(2:Num_Carrier/2,:) = IFFT_Mid(2:Num_Carrier/2,:);
IFFT_Full((Num_Carrier+4)/2:Num_Carrier,:) = flipdim(conj(IFFT_Mid(2:Num_Carrier/2,:)),1);
%构成共轭矩阵,满足:1,N/2点为实数,1~N/2与(N/2)+1~N-1点关于N/2共轭对称
IFFT_Out = ifft(IFFT_Full,Num_Carrier,1);
%----------加循环前缀------------%
Num_AddCP = Num_Carrier + Num_Cp;
Row_Prefix = (Num_Carrier - Num_Cp + 1):Num_Carrier;
Sym_AddCP = [IFFT_Out(Row_Prefix,:);IFFT_Out];
Sym_AddCP_Mid = Sym_AddCP(:).';
%----------信道处理------------%
Ref_Channel = [1 1/2 1/4];
Sym_Filter = filter(Ref_Channel,1,Sym_AddCP_Mid);
%----------加白噪声------------%
BERSNR_Table = zeros(20,3);
for SNR = 0:19
BERSNR_Table(SNR+1,1) = SNR;
Sym_AfterChannel = awgn(Sym_Filter,SNR,'measured');
%------------去循环前缀------------%
Sym_Dcp_Mid = reshape(Sym_AfterChannel,Num_Carrier + Num_Cp,Num_Loop);
Sym_Dcp = Sym_Dcp_Mid((Num_Cp + 1):Num_AddCP,:);
%------------FFT------------%
Sym_FFT = fft(Sym_Dcp,Num_Carrier,1);
%------------判决------------%
Sym_Dec = zeros(Num_Carrier,Num_Loop);
Sym_Mid(1,:) = Sym_FFT(1,:) + 1i*Sym_FFT(Num_Carrier/2+1,:);
Sym_Mid(2:Num_Carrier/2,:) = Sym_FFT(2:Num_Carrier/2,:);
for m = 1:Num_Loop
for n = 1:Num_Carrier/2
Real = real(Sym_Mid(n,m));
Imag = imag(Sym_Mid(n,m));
if( abs(Real - 1)) < (abs((Real + 1)))
Sym_Dec(2*n - 1,m) = 1;
else
Sym_Dec(2*n - 1,m) = 0;
end
if( abs(Imag - 1)) < (abs((Imag + 1)))
Sym_Dec(2*n,m) = 1;
else
Sym_Dec(2*n,m) = 0;
end
end
end
Bit_Rx = Sym_Dec(:).';
[Num,BER] = symerr(Bit_Gen,Bit_Rx);
BERSNR_Table(SNR+1,2) = Num;
BERSNR_Table(SNR+1,3) = BER;
end
figure(1);
subplot(2,1,1);
semilogy(BERSNR_Table(:,1),BERSNR_Table(:,2),'x-');
subplot(2,1,2);
semilogy(BERSNR_Table(:,1),BERSNR_Table(:,3),'x-');
Time_Done = toc
echo on;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -