OTFS延迟多普勒信道模型(信道模型代码)

一、信道模型公式

       1、延迟多普勒域信道模型

                          h(\tau ,\nu )=\sum_{i=0}^{L-1}h_i\delta(\tau-l_i/B)\delta(\nu-k_i/T)

         在一个M*N维的延迟多普勒域中,定义M为子载波数,子载波间隔为\Delta f 对应倒数时隙长度为T,信号总长度为NT,L-1表示最大径数。

        公式中冲激响应延迟域移动的分辨率,如下图中Delay轴的一格也就是\frac{1}{M\Delta f}\tau _i=\frac{l_{\tau_i}}{M\Delta f},多普勒域移动的分辨率为Doppler轴的一格\frac{1}{NT} 即 \nu _i=\frac{K_{\nu_i}+k_{\nu_i}}{NT} 其中小k的移动表示分数多普勒。要记得信号发射是从延迟域方向并串转换的,不懂的可以看OTFS的基本原理(通俗易懂)-CSDN博客。

2、延迟多普勒模型(时域)

        以上介绍的是延迟多普勒域信道模型,但是实际上我们信号传输应该是在时域传输的,所以仿真信道模型时应当建立时域的信道模型。

        其公式可以简化为

        H=\sum_{i=0}^{L-1}h_i\Pi _{N}^{l_i}\Delta_N^{k_i}

        其中\Pi _{N}^{l_i}是置换矩阵,可以实现移位的效果,形象来说如下图,当M*N=3(举例来说),左图为不移动的置换矩阵,右图为移动一位的置换矩阵。以此类推,置换矩阵是个循环矩阵。

多普勒效应等价于一段时间的不同位置的相位发生了变换,如果这个相位变换随时间增加,是个线性增加的相位变换,那么的多普勒频偏是个定值。\Delta_N^{k_i}是个对角矩阵,也是个相位变换矩阵。

\Delta_N^{k_i}=diag[e^{ \frac{j2\pi k_i}{NM}},e^{ \frac{j2\pi k_i*2}{NM}},...,e^{ \frac{j2\pi k_i*NM}{NM}}]

二、信道代码

以下模型通过通过一个矩阵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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463060.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Failed to search for file: Cannot update read-only repo

今天在读《Linux就该这么学》并上机操作RedHat Linux 8。结果在执行指令时却出现了问题: 我明明已经是root权限了,我于是上网去找,但也没看到合适的解答。为什么会和书上的操作结果不一样。 后来我突然意识到是不是我打了不该打的空格,于是…

Android中SurfaceView与GLSurfaceView 的关系

SurfaceView 与 GLSurfaceView 的关系 在 Android 开发中,SurfaceView 和 GLSurfaceView 是实现自定义渲染效果的关键组件。它们提供了不同的渲染方式,适用于不同的应用场景。我们将通过以下几个方面详细说明 SurfaceView 和 GLSurfaceView 的特点及实现…

游戏引擎中的颜色科学

游戏引擎中的渲染组件的作用是生成一个二维图片,在特定的时间从给定的视点观察的方向看到的一个三维空间的状态。他们的生成每一张图片都会被称为帧,他们生成的速度称为帧率。 像素 在每一帧中,游戏引擎的视觉输出基本上是一大堆彩色像素&a…

计算机网络-以太网小结

前导码与帧开始分界符有什么区别? 前导码--解决帧同步/时钟同步问题 帧开始分界符-解决帧对界问题 集线器 集线器通过双绞线连接终端, 学校机房的里面就有集线器 这种方式仍然属于共享式以太网, 传播方式依然是广播 网桥: 工作特点: 1.如果转发表中存在数据接收方的端口信息…

D56【python 接口自动化学习】- python基础之异常

day56 异常的产生与分类 学习日期:20241102 学习目标:模块与标准库 -- 72 初始异常:异常的产生与分类 学习笔记: 什么是异常 异常的分类 总结 引发异常时,代码会进行中断exception-所有内置的非系统退出类异常都派…

轴承性能对步进电机的影响

步进电机作为一种重要的电动机类型,在工业自动化、机器人技术以及各种机械设备中得到了广泛应用。步进电机的性能直接关系到其控制精度、响应速度和可靠性,而其中一个关键的组成部分——轴承,往往被认为是影响步进电机性能的一个重要因素。 一…

Java项目实战II基于Spring Boot的个人云盘管理系统设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 基于Spring Boot的个人云盘管理系统设计…

Java类和对象(上篇)

今天学习Java的类【认识类,并学习有关类的操作(1.定义和使用 2.实例化 3. this引用 4.构造对象和初始化对象)】 目录 1. 初步认知面向对象1.1 面向对象的概念1.1 面向对象和面向过程 2. 类定义和使用2.1 认识类2.2 类的定义格式2.3 练习2.3.1…

【路径——Dijkstra】

题目 代码 #include <bits/stdc.h> using namespace std; #define x first #define y second typedef pair<int, int> PII; const int N 2025, M N * N; int h[N], e[M], ne[M], w[M], idx; int dist[N]; int n 2021; void add(int a, int b, int c) {w[idx] …

ubuntu安装与配置Nginx(1)

在 Ubuntu 上安装和配置 Nginx 是相对简单的。以下是一个逐步指南&#xff1a; 1. 更新系统包 首先&#xff0c;确保你的系统是最新的。打开终端并运行&#xff1a; sudo apt update sudo apt upgrade2. 安装 Nginx 使用以下命令安装 Nginx&#xff1a; sudo apt install …

基于XSS的flash钓鱼上线Cobalt strike

题记 学习网安真是让人愉快啊&#xff0c;天天晚上睡觉之前都要想点技术问题&#xff0c;我是不是快魔怔了&#xff0c;今天打算搞XSS的flash钓鱼&#xff0c;完成一下写毕业论文的时候没有完成的事情。学习最有趣的地方就是在学习过程中发现新的不会的出现&#xff0c;下一个…

10.30.2024刷华为OD

文章目录 HJ20 密码验证合格程序&#xff08;难过全部例子 list取数左开有闭 [0,3) &#xff09;HJ21 简单密码HJ22 汽水瓶 (数学游戏...)HJ23 (dic就是map&#xff0c;注意怎么用&#xff0c; 善用values()和keys()函数返回list)语法知识记录 (留意转换的字符怎么拼接) HJ20 密…

安卓设备adb执行AT指令控制电话卡

文章目录 AT指令起源与发展&#xff1a;基本格式&#xff1a;常见应用领域及功能&#xff1a;不同设备中的应用&#xff1a; 安卓获取modem设备输入符入口安卓设备输入AT指令 AT指令 AT 指令是 Attention 的缩写&#xff0c;是一种用于控制调制解调器等通信设备的指令集。 起…

明日周刊-第26期

在昨晚的英雄联盟总决赛上&#xff0c;遗憾落败。少年终究还是没翻过最高的山&#xff0c;最长的河。虽然失败总是贯穿人生始终&#xff0c;但是你们还年轻&#xff0c;继续加油吧。 文章目录 1. 科技短讯OpenAI推出ChatGPT网络搜索Gemini AI接入谷歌地图&#x1f4f1;科技大厂…

(实战)WebApi第9讲:EFCore性能优化(IQueryable延迟查询、取消跟踪机制)

一、例子是第8讲的四、6&#xff08;EFCore的静态化处理 &#xff09;&#xff1a;分析ToList() ToList()在下图绿色框内。 二、在没有最终取数据的时候&#xff0c;使用 IQueryable<T> 延迟执行查询 &#xff08;1&#xff09;在没有最终取数据的时候&#xff0c;不要使…

三周精通FastAPI:29 定义在返回响应后运行的后台任务

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/tutorial/background-tasks/ 后台任务 你可以定义在返回响应后运行的后台任务。 这对需要在请求之后执行的操作很有用&#xff0c;但客户端不必在接收响应之前等待操作完成。 包括这些例子&#xff1a; 执行操作后发…

Rust的enum枚举的强大用法

在Rust中&#xff0c;enum&#xff08;枚举&#xff09;是一种非常强大的类型&#xff0c;它可以包含多个变体&#xff08;variants&#xff09;&#xff0c;每个变体可以是不同的类型&#xff0c;包括复杂类型。这使得enum在Rust中不仅用于表示简单的状态或选项集合&#xff0…

Python世界:自动化办公Word之批量替换文本生成副本

Python世界&#xff1a;自动化办公Word之批量替换文本生成副本 任务背景编码思路代码实现相关参考 任务背景 为提高办公效率&#xff0c;用python试手了一个word任务&#xff0c;要求如下&#xff1a; 给你一个基础word文档A&#xff0c;格式为docx&#xff0c;名字为&#xf…

Git下载-连接码云-保姆级教学(连接Gitee失败的解决)

Git介绍 码云连接 一、Git介绍 二、Git的工作机制 下载链接&#xff1a;Git - 下载软件包 三、使用步骤 创建一个wss的文件夹&#xff0c;作为‘工作空间’ 四、连接码云账号 五、连接Gitee失败的解决方法 一、Git介绍 Git是一个免费的、开源的分布式版本控制…

【JavaEE初阶】网络原理(4)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 网络层 > IP协议 IP协议报头结构 4位版本 4位首部长度 8位服务类型(TOS) 16位总长度(字节数), 16位标识 3位标志位 13位片偏移 8位生存时间(TTL) 8位协议 16位首部…