📄 channel.m
字号:
function rx_signal = channel(tx_signal, cir, SimulationParameters,SNR);
global SimulationConstants;
[n_tx_antennas, n_rx_antennas] = get_n_antennas(SimulationParameters);
if SimulationParameters.VBLAST~=1
% Channel effect
rx_signal = zeros(n_rx_antennas, size(tx_signal,2)+size(cir,2)-1);
for rx_ant = 1:n_rx_antennas
for tx_ant = 1:n_tx_antennas
rx_signal(rx_ant,:) = rx_signal(rx_ant,:) + ...
conv(tx_signal(tx_ant,:), cir((rx_ant-1)*n_tx_antennas+tx_ant,:));
end
end
else % go vblast
temp=size(tx_signal,1);
if temp==1 & SimulationParameters.N==2
cir11=get_channel_ir(SimulationParameters);
cir12=get_channel_ir(SimulationParameters);
cir11=cir11(1);
cir12=cir12(1);
save cir11 cir11;
save cir12 cir12;
cir_mimo=[cir11;cir12];
% Channel effect
rx_signal = zeros(n_rx_antennas, size(tx_signal,2)+size(cir_mimo,2)-1);
for tx_ant = 1:n_tx_antennas
for rx_ant = 1:n_rx_antennas
rx_signal(rx_ant,:) = rx_signal(rx_ant,:) + ...
conv(tx_signal(tx_ant,:), cir_mimo(rx_ant,tx_ant));
end
end
elseif temp==2 & SimulationParameters.N==2
cir11=get_channel_ir(SimulationParameters);
cir12=get_channel_ir(SimulationParameters);
cir21=get_channel_ir(SimulationParameters);
cir22=get_channel_ir(SimulationParameters);
cir11=cir11(1);
cir12=cir12(1);
cir21=cir21(1);
cir22=cir22(1);
save cir_22 cir11 cir12 cir21 cir22 ;
cir_mimo1=[cir11;cir12];
cir_mimo2=[cir21;cir22];
cir_mimo=[cir_mimo1 cir_mimo2];
% Channel effect
rx_signal = zeros(n_rx_antennas, size(tx_signal,2)+size(cir_mimo,2)-2);
for tx_ant = 1:n_tx_antennas
for rx_ant = 1:n_rx_antennas
rx_signal(rx_ant,:) = rx_signal(rx_ant,:) + ...
conv(tx_signal(tx_ant,:), cir_mimo(rx_ant,tx_ant));
end
end
elseif temp==2 & SimulationParameters.N==3
cir11=get_channel_ir(SimulationParameters);
cir12=get_channel_ir(SimulationParameters);
cir13=get_channel_ir(SimulationParameters);
cir21=get_channel_ir(SimulationParameters);
cir22=get_channel_ir(SimulationParameters);
cir23=get_channel_ir(SimulationParameters);
cir11=cir11(1);
cir12=cir12(1);
cir13=cir13(1);
cir21=cir21(1);
cir22=cir22(1);
cir23=cir23(1);
save cir_23 cir11 cir12 cir13 cir21 cir22 cir23 ;
cir_mimo1=[cir11;cir12;cir13];
cir_mimo2=[cir21;cir22;cir23];
cir_mimo=[cir_mimo1 cir_mimo2];
% Channel effect
rx_signal = zeros(n_rx_antennas, size(tx_signal,2)+size(cir_mimo,2)-2);
for tx_ant = 1:n_tx_antennas
for rx_ant = 1:n_rx_antennas
rx_signal(rx_ant,:) = rx_signal(rx_ant,:) + ...
conv(tx_signal(tx_ant,:), cir_mimo(rx_ant,tx_ant));
end
end
elseif temp==2 & SimulationParameters.N==4
cir11=get_channel_ir(SimulationParameters);
cir12=get_channel_ir(SimulationParameters);
cir13=get_channel_ir(SimulationParameters);
cir14=get_channel_ir(SimulationParameters);
cir21=get_channel_ir(SimulationParameters);
cir22=get_channel_ir(SimulationParameters);
cir23=get_channel_ir(SimulationParameters);
cir24=get_channel_ir(SimulationParameters);
cir11=cir11(1);
cir12=cir12(1);
cir13=cir13(1);
cir14=cir14(1);
cir21=cir21(1);
cir22=cir22(1);
cir23=cir23(1);
cir24=cir24(1);
save cir_24 cir11 cir12 cir13 cir14 cir21 cir22 cir23 cir24;
cir_mimo1=[cir11;cir12;cir13;cir14];
cir_mimo2=[cir21;cir22;cir23;cir24];
cir_mimo=[cir_mimo1 cir_mimo2];
% Channel effect
rx_signal = zeros(n_rx_antennas, size(tx_signal,2)+size(cir_mimo,2)-2);
for tx_ant = 1:n_tx_antennas
for rx_ant = 1:n_rx_antennas
rx_signal(rx_ant,:) = rx_signal(rx_ant,:) + ...
conv(tx_signal(tx_ant,:), cir_mimo(rx_ant,tx_ant));
end
end
end
end
len = size(rx_signal,2);
% Add noise
% calculate noise variance
% Number of FFT points normalizes the noise with the used subcarrier number
if SimulationParameters.ZeroPad~=1
numdatasubc=1;
else
numdatasubc=SimulationConstants.NumDataSubc;
end
noise_var = 1/((SimulationParameters.FFTPoints/numdatasubc)*(10^(SNR/10)));
noise = sqrt(noise_var) * (randn(n_rx_antennas, len) + j*randn(n_rx_antennas, len));
% add noise
rx_signal = rx_signal+noise;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -