📄 chansui_corr_2x2.m
字号:
function chanSUI_corr_2x2(chanparams)
% SUI channel simulation with 2X2 antenna configuration
% chanparams.chantype -- SUI channel type
% chanparams.cohtime -- expanding length(number of sampling points per OFDM frame)
% chanparams.tx1_infile -- input data from Tx Antenna 1
% chanparams.tx2_infile -- input data from Tx Antenna 2
% chanparams.rx1_outfile -- channel output data at Rx Antenna 1
% chanparams.rx2_outfile -- channel output data at Rx Antenna 2
% chanparams.sampletime -- sample interval in time domain(1/Fs)
% chanparams.numframe -- Number of frames
switch chanparams.chantype,
case 1, % SUI-1 Channel
tau = [0 0.4 0.9]; % tap delay in us
load paths_sui1_11.mat;
load paths_sui1_21.mat;
load paths_sui1_12.mat;
load paths_sui1_22.mat;
case 2, % SUI-2 Channel
tau = [0 0.4 1.1];
load paths_sui2_11.mat;
load paths_sui2_21.mat;
load paths_sui2_12.mat;
load paths_sui2_22.mat;
case 3, % SUI-3 Channel
tau = [0.0 0.4 0.9];
load paths_sui3_11.mat;
load paths_sui3_21.mat;
load paths_sui3_12.mat;
load paths_sui3_22.mat;
case 4, % SUI-4 Channel
tau = [0 1.5 4];
load paths_sui4_11.mat;
load paths_sui4_21.mat;
load paths_sui4_12.mat;
load paths_sui4_22.mat;
case 5, % SUI-5 Channel
tau = [0 4 10];
load paths_sui5_11.mat;
load paths_sui5_21.mat;
load paths_sui5_12.mat;
load paths_sui5_22.mat;
case 6, % SUI-6 Channel
tau = [0 14 20];
load paths_sui6_11.mat;
load paths_sui6_21.mat;
load paths_sui6_12.mat;
load paths_sui6_22.mat;
otherwise,
error('Unrecognized channel model');
end
%-----------Read frame modulation data out--------
%-----------Note: frame modulation data are same in each frame.-------------
chanipfid_tx1 = fopen(chanparams.tx1_infile, 'r'); % open channel input from Tx Antenna 1 file
if chanipfid_tx1 <= 0
error('unable to open Tx 1 channel input file');
end
[ChanInData_tx1, datalen] = fread(chanipfid_tx1, 2*chanparams.cohtime, 'float32');
if datalen~=2*chanparams.cohtime, error('fread Tx 1 channel input data error!'); end
ChanInData_tx1 = [ 1 1j ] * reshape(ChanInData_tx1, 2, datalen/2);
Len = datalen/2;
fclose(chanipfid_tx1);
chanipfid_tx2 = fopen(chanparams.tx2_infile, 'r'); % open channel input from Tx Antenna 2 file
if chanipfid_tx2 <= 0
error('unable to open Tx 2 channel input file');
end
[ChanInData_tx2, datalen] = fread(chanipfid_tx2, 2*chanparams.cohtime, 'float32');
if datalen~=2*chanparams.cohtime, frm,error('fread Tx 2 channel input data error!'); end
ChanInData_tx2 = [ 1 1j ] * reshape(ChanInData_tx2, 2, datalen/2);
Len = datalen/2;
fclose(chanipfid_tx2);
%---------------------------------------------------------------------------
% Multipath process
Delay = round(tau/(chanparams.sampletime)); % multipath delay in sample points
% ########### Rx 1 Operation ##########
PrevFrame_tx1 = zeros(1,max(Delay)); % multipath delay part from previous frame
PrevFrame_tx2 = zeros(1,max(Delay));
chanopfid_rx1 = fopen(chanparams.rx1_outfile, 'w'); % open channel output to Rx Antenna 1 file
if chanopfid_rx1 < 0
error('unable to open Rx 1 channel output file');
end
for frm = 1:chanparams.numframe % let each frame pass through the channel
% Tx 1 data through channel 11
OutData_tx1 = zeros(1, Len);
for p=1:3
pathData_tx1 = [PrevFrame_tx1(end+1-Delay(p):end) ChanInData_tx1(1:end-Delay(p))];
OutData_tx1 = OutData_tx1+pathData_tx1*paths_11(p,frm);
end
PrevFrame_tx1 = ChanInData_tx1(end+1-max(Delay):end); % Not accurate! Just for convenience!
% Tx 2 data through channel 21
OutData_tx2 = zeros(1, Len);
for p=1:3
pathData_tx2 = [PrevFrame_tx2(end+1-Delay(p):end) ChanInData_tx2(1:end-Delay(p))];
OutData_tx2 = OutData_tx2+pathData_tx2*paths_21(p,frm);
end
PrevFrame_tx2 = ChanInData_tx2(end+1-max(Delay):end); % Not accurate! Just for convenience!
% Superposition
OutData = OutData_tx1+OutData_tx2;
% write each frame into file
fwrite(chanopfid_rx1, [real(OutData);imag(OutData)], 'float32');
end
% ########### Rx 2 Operation ##########
PrevFrame_tx1 = zeros(1,max(Delay)); % multipath delay part from previous frame
PrevFrame_tx2 = zeros(1,max(Delay));
chanopfid_rx2 = fopen(chanparams.rx2_outfile, 'w'); % open channel output to Rx Antenna 1 file
if chanopfid_rx2 < 0
error('unable to open Rx 2 channel output file');
end
for frm = 1:chanparams.numframe % let each frame pass through the channel
% Tx 1 data through channel 11
OutData_tx1 = zeros(1, Len);
for p=1:3
pathData_tx1 = [PrevFrame_tx1(end+1-Delay(p):end) ChanInData_tx1(1:end-Delay(p))];
OutData_tx1 = OutData_tx1+pathData_tx1*paths_12(p,frm);
end
PrevFrame_tx1 = ChanInData_tx1(end+1-max(Delay):end); % Not accurate! Just for convenience!
% Tx 2 data through channel 21
OutData_tx2 = zeros(1, Len);
for p=1:3
pathData_tx2 = [PrevFrame_tx2(end+1-Delay(p):end) ChanInData_tx2(1:end-Delay(p))];
OutData_tx2 = OutData_tx2+pathData_tx2*paths_22(p,frm);
end
PrevFrame_tx2 = ChanInData_tx2(end+1-max(Delay):end); % Not accurate! Just for convenience!
% Superposition
OutData = OutData_tx1+OutData_tx2;
% write each frame into file
fwrite(chanopfid_rx2, [real(OutData);imag(OutData)], 'float32');
end
fclose(chanopfid_rx1);
fclose(chanopfid_rx2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -