⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdm_trail.m

📁 OFDM系统
💻 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 + -