OFDM 之STO2
参数:
调制方式:64QAM
FFT:1024
CP:88
用于模拟两个用户,第一个用户的时偏为STO1,第二个用户的时偏为STO2。第一个用户占用的数据位置为1:512,第二个用户占用的数据为513:1024;导频放置方式为间隔一个位置放置。
代码
clc;clear;close all
M = 64;
k = log2(M);
FFT_size = 1024;
STO1 = 10;
STO2 = 30;
IFO = 5;
FFO = 0;
t2 = (0:1023).';
phase = exp(-1i*2*pi*STO1/1024*t2);
t3 = (88:1111).';
%% 发送端
% 用户1发射数据
data1 = randi([0 1],FFT_size*k/2,1);
txSig1 = qammod(data1,M,'InputType','bit','UnitAveragePower',true);
ifft_tx = ifft([txSig1;zeros(512,1)],FFT_size);
UE1_data = [ifft_tx(end-88+1:end);ifft_tx;zeros(30,1)];
% 用户2发射数据
data2 = randi([0 1],FFT_size*k/2,1);
txSig2 = qammod(data2,M,'InputType','bit','UnitAveragePower',true);
ifft_tx = ifft([zeros(512,1);txSig2],FFT_size);
UE2_data = [ifft_tx(end-88+1:end);ifft_tx;zeros(30,1)];
txSig = [txSig1;txSig2];
%% 信道
% 无信道
%% 接收端
decp_data = UE1_data(89-STO1:end-STO1-30)+UE2_data(89-STO2:end-STO2-30);
fft_data = fft(decp_data,1024);
H_est = fft_data(1:2:end)./txSig(1:2:end);
H = interp1(1:2:1024,H_est,(1:1024).','linear','extrap');
phase_data = fft_data./H;
rxSig = qamdemod(phase_data,M,'OutputType','bit','UnitAveragePower',true);
[num,err] = biterr([data1;data2],rxSig);
disp(['错误比特个数为: ', num2str(num) ,' ' ,'误码率为:' ,num2str(err)])
%% 画图.
figure(1)
scatterplot(phase_data)
%% STO估计不准,就会引入连续相位误差,非共相位误差