?? 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 + -