📄 mul_ralay_channel.m
字号:
% 该程序用来模拟信号通过多经瑞利信道
function [r_sig]=mul_ralay_channel(previous_block,signal,Ts,block_index)
% [r_sig]=mul_ralay_channel(revious_block,signal,Ts,block_index)
%该函数用来产生一个频率选择性的多经瑞利衰落信道,从而实现对信号通过时域的多经瑞利衰落无线信道的仿真。
%previous_block:相对于当前数据包的上一个数据包
% signal:输入的复信号序列,即OFDM调制输出信号,格式为1×n的向量
% Ts:抽样时间间隔 单位是s
% block_index:当前数据包的序列号
% r_signal:经过信道后的输出信号,即接收信号
%输入参量的判断
if nargin~=4
error('input arguments are not matched ');
end
%% v: 移动终端的移动速度 单位为km/h
v=300/3.6;
%载波频率
fc=0;
%mul_path:多经的数目
mul_path=6;
rand('state',100);
seed=rand(1,6)*10000;
% 各条径的传输时延,为1×n(n=mul_path)的向量 TU model
delay=10^(-9)*[0,310,710,1090,1730,2510];
% 信号相对第一条路径的相对功率,为1×n(n=mul_path)的向量,其与时延delay是一一对应关系
relative_power=[0,-1,-9,-10,-15,-20];
% normal:功率是否归一化的标志,normal=1,则relative_power为归一化功率,否则为实际通过此径的信号功率
normal=1;
%信号通过信道时的相对幅度值
Am=sqrt(10.^(0.1*relative_power));
%判断功率是否归一化
if normal==1
Am=Am./sqrt(sum(Am.^2));
end
%输入数据包的长度
M=length(signal);
%超出输出序列长度的那段数据长度
m_max=floor(max(delay)/Ts);
%初始化输出序列为1×n的零序列
r_sig=zeros(1,M);
output=zeros(1,M);
%初始化经过多经后的完整输出信号
resig=zeros(1,(M+m_max));
%对下一个数据包产生的干扰部分
r_sig_add=zeros(1,m_max);
%%%%%%%%%%%%%%%%%$$$$$$$$计算上一个数据包的信道输出序列$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%
sig_processing=previous_block;
%选择一个随机时间做起始时间,以满足统计特性
if(block_index==1)
n=0;
else
n=(block_index-2)*M;
end
t=[n:1:(n+M+m_max)];
t=t*Ts;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%产生多经非相关瑞利衰落过程%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k=1:mul_path
%计算第k条路径的信道冲激响应函数
h=Jakes_gen(v,fc,t,seed(k));
%将时延转换为时域上的抽样点
m=floor(1+delay(k)/Ts);
%乘相对幅度值
h=h*Am(k);
%得到经过第k径的输出序列
resig(m:(m+M-1))=resig(m:(m+M-1))+sig_processing.*h(m:(m+M-1));
end
%对当前数据包的干扰部分
r_sig_add=resig((M+1):(M+m_max));
%%%%%%%%%%%%%%%%%$$$$$$$$计算当前数据包的信道输出序列$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%
%初始化经过多经后的完整输出信号
resig=zeros(1,(M+m_max));
sig_processing=signal;
%找到与当前数据包对应的信道数据文件中的位置
n=(block_index-1)*M;
t=[n:1:(n+M+m_max)];
t=t*Ts;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%产生多经非相关瑞利衰落过程%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k=1:mul_path
%计算第k条路径的信道冲激响应函数
h=Jakes_gen(v,fc,t,seed(k));
%将时延转换为时域上的抽样点
m=floor(1+delay(k)/Ts);
%乘相对幅度值
h=h*Am(k);
%得到经过第k径的输出序列
resig(m:(m+M-1))=resig(m:(m+M-1))+sig_processing.*h(m:(m+M-1));
end
r_sig=r_sig+resig(1:M);
r_sig(1:m_max)=r_sig(1:m_max)+r_sig_add;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -