一、信道模型公式
1、延迟多普勒域信道模型
在一个M*N维的延迟多普勒域中,定义M为子载波数,子载波间隔为 对应倒数时隙长度为,信号总长度为,L-1表示最大径数。
公式中冲激响应延迟域移动的分辨率,如下图中Delay轴的一格也就是即,多普勒域移动的分辨率为Doppler轴的一格 即 其中小k的移动表示分数多普勒。要记得信号发射是从延迟域方向并串转换的,不懂的可以看OTFS的基本原理(通俗易懂)-CSDN博客。
2、延迟多普勒模型(时域)
以上介绍的是延迟多普勒域信道模型,但是实际上我们信号传输应该是在时域传输的,所以仿真信道模型时应当建立时域的信道模型。
其公式可以简化为
其中是置换矩阵,可以实现移位的效果,形象来说如下图,当M*N=3(举例来说),左图为不移动的置换矩阵,右图为移动一位的置换矩阵。以此类推,置换矩阵是个循环矩阵。
多普勒效应等价于一段时间的不同位置的相位发生了变换,如果这个相位变换随时间增加,是个线性增加的相位变换,那么的多普勒频偏是个定值。是个对角矩阵,也是个相位变换矩阵。
二、信道代码
以下模型通过通过一个矩阵HH*s,与公式的表示更为接近,并且能够得到一个理想信道矩阵HH,第一个代码与第二个代码模拟信道上是等价的。只是第二个代码中有模拟CP,这个是网上很容易找到的代码,令参数L=0就一样了。
function [r,HH] = OTFS_channel_output(N,M,taps,delay_taps,Doppler_taps,chan_coef,sigma_2,s)
%% wireless channel and noise
HH = zeros(M*N,M*N);
H = zeros(M*N,M*N); %信道输入信号初始化
delta = zeros(M*N,M*N);for itao = 1:tapsvec = zeros(N*M,1);vec(1+delay_taps(itao)) = 1;for i = 1:M*Ndelta(i,i) = exp(1i*2*pi*(i-1)/(M*N)*Doppler_taps(itao));endH = chan_coef(itao) * circulant(vec,zeros(0,1)) * delta;HH = HH + H;
endnoise = sqrt(sigma_2/2)*(randn(size(s)) + 1i*randn(size(s)));%信道噪声
r = HH * s+noise;end
function r = OTFS_channel_output(N,M,taps,delay_taps,Doppler_taps,chan_coef,sigma_2,s)
%% wireless channel and noise
L = max(delay_taps);%最大的时延
s = [s(N*M-L+1:N*M);s];%add one cp %加入循环前缀编码(将OTFS符号数组的后四位信号复制到头部构成的一组(64+4)*1的数组)
s_chan = 0; %信道输入信号初始化
for itao = 1:tapss_chan = s_chan+chan_coef(itao)*circshift([s.*exp(1j*2*pi/M *(-L:-L+length(s)-1)*Doppler_taps(itao)/N).';zeros(delay_taps(end),1)],delay_taps(itao));%%s_chan是71*1维数组
end
noise = sqrt(sigma_2/2)*(randn(size(s_chan)) + 1i*randn(size(s_chan)));%信道噪声
r = s_chan+noise;
r = r(L+1:L+(N*M));%discard cp(去掉循环前缀,也就是输出68*1维数组的后64位)
end