?? ofdm_optimal_tx.m
字號(hào):
binary = InputPort1.Sequence;
RF_signal = InputPort2.Sampled.Signal;
RF_length = length(RF_signal);
binleng=length(binary);
%plot(RF_length,binleng);
%time_signal = InputPort2.Sampled.Time;
Bitrate = Parameter0;%1GHz
OutputPort1 = InputPort2;
Frame_num=8;
Frame_bit=1024;
Signal_ouput1=[];
Cyclic_Prefix = 2048;
QAM_16_mapper = [-3 -1 3 1]; %/(10^0.5);
for k=1:1024:4 %096
%==========================================================================
% Symbol Mapper 16QAM
%==========================================================================
Mapper_input(1:1024) = binary(k:k+1023);
%Mapper_input(513:1024) = 0;
for i=1:4:1024 %length(Mapper_input)
Mapper_re((i+3)/4)=QAM_16_mapper(sum(Mapper_input(i:i+1)*[2 1]')+1);
Mapper_im((i+3)/4)=QAM_16_mapper(sum(Mapper_input(i+2:i+3)*[2 1]')+1);
end
Mapper_output1 = complex(Mapper_re,Mapper_im);
Mapper_output=Mapper_output1;
%==========================================================================
% Pilot Insert
%==========================================================================
Pilot_Insert_input=Mapper_output;
Pilot_Insert_output(1:16)=Pilot_Insert_input(1:16);
Pilot_Insert_output(17)=1+0i;
Pilot_Insert_output(18:49)=Pilot_Insert_input(17:48);
Pilot_Insert_output(50)=-1+0i;
Pilot_Insert_output(51:82)=Pilot_Insert_input(49:80);
Pilot_Insert_output(83)=1+0i;
Pilot_Insert_output(84:115)=Pilot_Insert_input(81:112);
Pilot_Insert_output(116)=-1+0i;
Pilot_Insert_output(117:148)=Pilot_Insert_input(113:144);
Pilot_Insert_output(149)=-1+0i;
Pilot_Insert_output(150:181)=Pilot_Insert_input(145:176);
Pilot_Insert_output(182)=1+0i;
Pilot_Insert_output(183:214)=Pilot_Insert_input(177:208);
Pilot_Insert_output(215)=-1+0i;
Pilot_Insert_output(216:247)=Pilot_Insert_input(209:240);
Pilot_Insert_output(248)=1+0i;
Pilot_Insert_output(249:264)=Pilot_Insert_input(241:256);
%==========================================================================
% Guard channel insert
%==========================================================================
Guard_Insert_input = Pilot_Insert_output;
Guard_Insert_output(1:124)=0;
Guard_Insert_output(125:388)=Guard_Insert_input(1:264);
Guard_Insert_output(389:512)=0;
%==========================================================================
% IFFT
%==========================================================================
IFFT_input = Guard_Insert_output;
IFFT_output = ifft(IFFT_input); %length(IFFT_output)=512
%scatterplot(IFFT_input);
%==========================================================================
%CLIP
%==========================================================================
CLIP_input=IFFT_output;
x2=(abs(CLIP_input)).^2;
m1=mean(x2);
v1=max(x2);
%papr(i)=10*log10(v1/m1);
y3=abs(CLIP_input);
CR=4;%1.4
A=sqrt(CR)*mean(y3);%A=CR*sqrt(2)*std(CLIP_input); % CR=Amax/sqrt(Pin); Pin:the input power of the ofdm signal before clipping
CLIP_output=CLIP_input;
for h=1:512
if y3(h)>A
CLIP_output(h)=A*CLIP_input(h)/y3(h);
end
end
%==========================================================================
%filter
%==========================================================================
FILTER_input=CLIP_output;
FILTER_in=fft(FILTER_input);
FILTER_in(1:124)=0;
FILTER_in(389:512)=0;
FILTER_output=ifft(FILTER_in);
%==========================================================================
% Up_sampling
%==========================================================================
DSM_input=FILTER_output;
DSM_input1=zeros(1,length(DSM_input)*4);
DSM_input1(1:4:end)=DSM_input;
DSM_input1_fft=fft(DSM_input1);
DSM_input1_fft(513:end-512)=0;
DSM_input2=ifft(DSM_input1_fft);
DSM_output=DSM_input2;
%scatterplot(IFFT_input);
%==========================================================================
% Cyclic Prefix Add
%==========================================================================
%CP_add_input=DSM_output;
%CP_add_output(1:Cyclic_Prefix)=CP_add_input((length(CP_add_input)-Cyclic_Prefix+1):length(CP_add_input));
%CP_add_output(Cyclic_Prefix+1:(length(CP_add_input)+Cyclic_Prefix))=CP_add_input(1:length(CP_add_input));
%==========================================================================
%==========================================================================
% finish OFDM synbol
%==========================================================================
%==========================================================================
Signal_ouput1 =[Signal_ouput1,DSM_output];
end %finish first for
%Signal_ouput1 = DSM_output;
Signal_output = interp(Signal_ouput1,32);
%OutputPort1=InputPort2;
%for i=1:RF_length
for i=1:length(Signal_output)
OutputPort1.Sampled.Signal(i)=Signal_output(i);
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -