📄 channel.asv
字号:
%==============channel_sui_fading.m========================================
function [r_t_sum,r_f_sum,r_t_sum_cp,r_t_sum_cp_awgn]=channel(t_preamble_cp,switch_awgn_rayleigh,N_STS,N_LTF,M,K,snr)
% 设每个天线都有L条多径
% n_tx_antenna 发送天线数<=4
n_tx_antenna = N_STS;
% n_rx_antenna 接收天线数<=4
% n_rx_antenna = 1;
% ts fd 为 n_tx_antenna*1 的矩阵
% tau pdb 为 n_tx_antenna*L 的矩阵
%r_t_preamble_cp 为n_tx_antenna*80 的矩阵
%r_t_preamble 为n_tx_antenna*56 的矩阵
% M = 64;%fft,ifft点数
% K = 64;%子载波个数
% snr =20;
SymbolNum =0;%没有传送数据符号,只传送前导符号
% switch_awgn_rayleigh = 4;% switch_awgn_rayleigh = 0 表示信道为awgn;
% switch_awgn_rayleigh = 1 表示信道为rayleigh;
% switch_awgn_rayleigh = 2 用自己编的无衰落的sui多径
% switch_awgn_rayleigh = 3 利用系统函数衰落的sui
% switch_awgn_rayleigh = 4 用自己编的瑞利衰落信道
% switch_awgn_rayleigh = 5 用自己编的瑞利衰落sui
%--------------------------------------------------------------------------
if switch_awgn_rayleigh == 0 %表示信道为awgn
% for index_tx_antenna = 1:n_tx_antenna,
% r_t_preamble_cp_awgn(index_tx_antenna,:) = awgn( t_preamble_cp(index_tx_antenna,:),snr,'measured');
% for index =1:80* N_LTF,
% r_t_preamble_cp_awgn(index_tx_antenna,index) = awgn( t_preamble_cp(index_tx_antenna,index),snr);
% end
r_t_sum = sum(t_preamble_cp);
r_t_sum = awgn( r_t_sum,snr,'measured');
% 去cp--------------------------------------------------------------
if n_tx_antenna ==1
r_t_sum = r_t_sum(17:80);
% r_t_preamble(index_tx_antenna,:) = r_t_preamble_cp_awgn(index_tx_antenna,17:80);
elseif n_tx_antenna == 2
r_t_sum = [r_t_sum(17:80),r_t_sum(97:160)];
% r_t_preamble(index_tx_antenna,:) = [r_t_preamble_cp_awgn(index_tx_antenna,17:80),r_t_preamble_cp_awgn(index_tx_antenna,97:160)];
% elseif n_tx_antenna == 3||n_tx_antenna == 4
end
% end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif switch_awgn_rayleigh == 1 %表示信道为rayleigh
ts = 50e-9;
fd = 0;
for index_tx_antenna = 1:n_tx_antenna,
tau(index_tx_antenna,:)= [0 4*ts 6*ts];
pdb(index_tx_antenna,:)= [0 -2 -4];
k = 10;
chan(index_tx_antenna) = ricianchan(ts,fd,k,tau(index_tx_antenna,:),pdb(index_tx_antenna,:));
% chan(index_tx_antenna) = rayleighchan(ts,fd,tau(index_tx_antenna,:),pdb(index_tx_antenna,:));
r_t_preamble_cp(index_tx_antenna,:) = filter(chan(index_tx_antenna),t_preamble_cp(index_tx_antenna,:));
% for index =1:80* N_LTF,
% r_t_preamble_cp_awgn(index_tx_antenna,index) = awgn( r_t_preamble_cp(index_tx_antenna,index),snr);
% end
% %去cp--------------------------------------------------------------
% if n_tx_antenna ==1
% r_t_preamble(index_tx_antenna,:) = r_t_preamble_cp_awgn(index_tx_antenna,17:80);
% elseif n_tx_antenna == 2
% r_t_preamble(index_tx_antenna,:) = [r_t_preamble_cp_awgn(index_tx_antenna,17:80),r_t_preamble_cp_awgn(index_tx_antenna,97:160)];
% %elseif n_tx_antenna == 3||n_tx_antenna == 4
%
% end
end
r_t_sum = sum(r_t_preamble_cp);
r_t_sum = awgn( r_t_sum,snr,'measured');
if n_tx_antenna ==1
r_t_sum = r_t_sum(17:80);
elseif n_tx_antenna == 2
r_t_sum = [r_t_sum(17:80),r_t_sum(97:160)];
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif switch_awgn_rayleigh == 2 %用自己编的无衰落的sui多径
% for index_tx_antenna = 1:n_tx_antenna,
% A0 = 1;
% A1 = 0.5;
% A2 = 0.2;
% A = sqrt(A0^2+A1^2+A2^2);
% delay0 = 0;
% delay1 = 2;
% delay2 = 4;
% y_delay0 = A0*exp(-j*2*pi*0.5)*[zeros(1,delay0),t_preamble_cp(index_tx_antenna,1:(80-delay0))]/A;%exp(-j*2*pi*rand(1))*
% y_delay1 = A1*exp(-j*2*pi*0.2)*[zeros(1,delay1),t_preamble_cp(index_tx_antenna,1:(80-delay1))]/A;
% y_delay2 = A2*exp(-j*2*pi*0.1)*[zeros(1,delay2),t_preamble_cp(index_tx_antenna,1:(80-delay2))]/A;
% r_t_preamble_cp(index_tx_antenna,:) = y_delay0 + y_delay1 + y_delay2;
% for index = 1:80* N_LTF,
% r_t_preamble_cp_awgn(index_tx_antenna,index) = awgn( r_t_preamble_cp(index_tx_antenna,index),snr);
% end
% r_t_preamble(index_tx_antenna,:) = r_t_preamble_cp_awgn(index_tx_antenna,17:80);
% end
ro_t = 0;
ro_r = 1;
A0 = [1 1];
A1 = [0.5 0.5];
A2 = [0.2 0.2];
A = [sqrt(A0(1)^2+A1(1)^2+A2(1)^2) sqrt(A0(2)^2+A1(2)^2+A2(2)^2) ];
delay0 = [0 0];
delay1 = [4 4];
delay2 = [6 6];
if n_tx_antenna == 1
t_preamble_cp(2,:) = zeros(1,80);
end
for index_tx_antenna = 1,
t_preamble_cp(1,:) = t_preamble_cp(1,:) + ro_t*t_preamble_cp(2,:);
y_delay0 = A0(1)*exp(-j*2*pi*0.5)*[zeros(1,delay0(1)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay0(1)))]/A(1);%*exp (-j*2*pi*rand (1))
y_delay1 = A1(1)*exp(-j*2*pi*0.2)*[zeros(1,delay1(1)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay1(1)))]/A(1);
y_delay2 = A2(1)*exp(-j*2*pi*0.1)*[zeros(1,delay2(1)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay2(1)))]/A(1);
r_t_preamble_cp(index_tx_antenna,:) = y_delay0 + y_delay1 + y_delay2;
end
for index_tx_antenna = 2,
t_preamble_cp(2,:) = ro_t*t_preamble_cp(1,:) + t_preamble_cp(2,:);
y_delay0 = A0(2)*exp(-j*2*pi*0.5)*[zeros(1,delay0(2)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay0(2)))]/A(2);%*exp (-j*2*pi*rand (1))
y_delay1 = A1(2)*exp(-j*2*pi*0.2)*[zeros(1,delay1(2)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay1(2)))]/A(2);
y_delay2 = A2(2)*exp(-j*2*pi*0.1)*[zeros(1,delay2(2)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay2(2)))]/A(2);
r_t_preamble_cp(index_tx_antenna,:) = y_delay0 + y_delay1 + y_delay2;
end
r_t_sum_cp = r_t_preamble_cp (1,:)+ r_t_preamble_cp (2,:) * ro_r;
r_t_sum_cp_awgn = awgn(r_t_sum_cp,snr,'measured');
% for index = 1:80* N_LTF,
% r_t_sum_cp_awgn(index) = awgn(r_t_sum_cp(index),snr);%/sqrt(n_tx_antenna)
% end
for index_tx_antenna = 1:n_tx_antenna,
%去cp--------------------------------------------------------------
if n_tx_antenna == 2
r_t_sum1 = [ r_t_sum_cp_awgn(17:80),r_t_sum_cp_awgn(97:160),r_t_sum_cp_awgn(177:240)];
elseif n_tx_antenna ==1
r_t_sum1 = r_t_sum_cp_awgn(17:80);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif switch_awgn_rayleigh == 3 %利用系统函数衰落的sui
if n_tx_antenna == 1
t_preamble_cp(2,:) = zeros(1,80);
end
ro_t = 1;
ro_r = 1;
ts = 50e-9;
fd = 0;
k = [10 10];
tau(1,:)= [0 4*ts 6*ts];
tau(2,:)= [0 4*ts 6*ts];
pdb(1,:)= [0 -2 -4];
pdb(2,:)= [0 -2 -4];
t_preamble_cp_in(1,:) = t_preamble_cp(1,:) + ro_t* t_preamble_cp(2,:);%天线间相干
t_preamble_cp_in(2,:) = t_preamble_cp(2,:) + ro_t* t_preamble_cp(1,:);
for index_tx_antenna = 1:2,
chan(index_tx_antenna) = rayleighchan(ts,fd,tau(index_tx_antenna,:),pdb(index_tx_antenna,:));
% chan(index_tx_antenna) = ricianchan(ts,fd,k(index_tx_antenna),tau(index_tx_antenna,:),pdb(index_tx_antenna,:));
r_t_preamble_cp(index_tx_antenna,:) = filter(chan(index_tx_antenna),t_preamble_cp_in(index_tx_antenna,:));
end
r_t_preamble_cp_out(1,:) = r_t_preamble_cp(1,:) + ro_r*r_t_preamble_cp(2,:);% 只考虑第一根接收天线
% r_t_preamble_cp_out(2,:) = r_t_preamble_cp(2,:) + ro_r*r_t_preamble_cp(1,:); % 第二根接收天线
r_t_preamble_cp_awgn(1,:) = AWGN(r_t_preamble_cp(1,:),snr,'measured');
% for index =1:80* N_LTF,
% r_t_preamble_cp_awgn(1,index) = awgn( r_t_preamble_cp_out(1,index),snr);
% end
%去cp--------------------------------------------------------------
if n_tx_antenna ==1
r_t_preamble(1,:) = r_t_preamble_cp_awgn(1,17:80);
elseif n_tx_antenna == 2
r_t_preamble(1,:) = [r_t_preamble_cp_awgn(1,17:80),r_t_preamble_cp_awgn(1,97:160),r_t_preamble_cp_awgn(1,177:240)];
%elseif n_tx_antenna == 3||n_tx_antenna == 4
end
r_t_sum1 = r_t_preamble(1,:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif switch_awgn_rayleigh == 4 %用自己编的瑞利衰落信道
SymbolNum = 0;
f_max = 0;
if n_tx_antenna ==1
TransData = t_preamble_cp(1,:);
r_t_sum1 = my_RayleighChannel(TransData,SymbolNum,N_LTF,snr,f_max);
% Signal_Power = 10*log10(mean(abs(r_t_sum1).^2));
% r_t_sum1 = AWGN(r_t_sum1,snr,Signal_Power,'db');
% r_t_sum1 = AWGN(r_t_sum1,snr,'measured');
r_t_sum1 =r_t_sum1(17:80);
elseif n_tx_antenna == 2
TransData1 = t_preamble_cp(1,:);
r_t_sum1 = my_RayleighChannel(TransData1,SymbolNum,N_LTF,snr,f_max);
TransData2 = t_preamble_cp(2,:);
r_t_sum1 = r_t_sum1 + my_RayleighChannel(TransData2,SymbolNum,N_LTF,snr,f_max);
% Signal_Power = 10*log10(mean(abs(r_t_sum1).^2));
% r_t_sum1 = AWGN(r_t_sum1,snr,Signal_Power,'db');
r_t_sum1 = AWGN(r_t_sum1,snr,'measured');
r_t_sum1 = [r_t_sum1(17:80) r_t_sum1(97:160)];
%elseif n_tx_antenna == 3||n_tx_antenna == 4
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif switch_awgn_rayleigh == 5 %用自己编的瑞利sui信道
SymbolNum = 1;
f_max = 0;
ro_t =0;
ro_r =1;
if n_tx_antenna == 1
t_preamble_cp(2,:) = zeros(1,80);
TransData1 = t_preamble_cp(1,:) + ro_t * t_preamble_cp(2,:);
r_t_sum1_1 = my_RayleighChannel(TransData1,SymbolNum,N_LTF,snr,f_max);
TransData2 = t_preamble_cp(2,:) + ro_t * t_preamble_cp(1,:);
r_t_sum1_2 = my_RayleighChannel(TransData2,SymbolNum,N_LTF,snr,f_max);
r_t_sum1 = r_t_sum1_1+ ro_r*r_t_sum1_2;
% Signal_Power = 10*log10(mean(abs(r_t_sum1).^2));
r_t_sum1 = AWGN(r_t_sum1,snr,'measured');
% r_t_sum1 = AWGN(r_t_sum1,snr,Signal_Power,'db');
r_t_sum1 =r_t_sum1(17:80);
elseif n_tx_antenna == 2
TransData1 = t_preamble_cp(1,:)+ ro_t * t_preamble_cp(2,:);
r_t_sum1 = my_RayleighChannel(TransData1,SymbolNum,N_LTF,snr,f_max);
TransData2 = t_preamble_cp(2,:) + ro_t * t_preamble_cp(1,:);
r_t_sum1 = r_t_sum1 + ro_r * my_RayleighChannel(TransData2,SymbolNum,N_LTF,snr,f_max);
% Signal_Power = 10*log10(mean(abs(r_t_sum1).^2));
r_t_sum1 = AWGN(r_t_sum1,snr,'measured');
% r_t_sum1 = AWGN(r_t_sum1,snr,Signal_Power,'db');
r_t_sum1 = [r_t_sum1(17:80) r_t_sum1(97:160) r_t_sum1(177:240)];
%elseif n_tx_antenna == 3||n_tx_antenna == 4
end
end
%==========================================================================
%接收天线得到的时域信号
if switch_awgn_rayleigh == 2 || switch_awgn_rayleigh == 3 ||switch_awgn_rayleigh == 4||switch_awgn_rayleigh == 5
r_t_sum = r_t_sum1;
% else
% r_t_sum = sum(r_t_preamble,1);
end
stem(abs(r_t_sum(1:64*N_LTF)));
%接收天线得到的频域信号
if n_tx_antenna == 2
r_f_sum_1 = fft(r_t_sum(1:64),M)/sqrt(M*n_tx_antenna);%
r_f_sum_2 = fft(r_t_sum(65:128),M)/sqrt(M*n_tx_antenna);%
r_f_sum_3 = fft(r_t_sum(129:192),M)/sqrt(M*n_tx_antenna);%
r_f_sum = [r_f_sum_1,r_f_sum_2,r_f_sum_3 ];
elseif n_tx_antenna == 1
r_f_sum = fft(r_t_sum(1:64),M)/sqrt(M*n_tx_antenna);
%elseif n_tx_antenna == 3||n_tx_antenna == 4
end
% plot(1:128,abs(r_f_sum));
% plot(1:128,abs(r_f_sum));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -