OTFS系统建模、通信性能分析、信道估计、模糊函数【附MATLAB代码】

文献来源:​微信公众号:EW Frontier

OTFS简介

OTFS信道估计

% Clear command window, workspace variables, and close all figures
clc; 
clear all; 
close all;
​
% Define Eb values in dB
EbdB = -10:2:10;
​
% Convert Eb values from dB to linear scale
Eb = 10.^(EbdB/10);
​
% Define Noise Power
No = 1;
​
% Calculate Signal-to-Noise Ratio (SNR) in linear scale
SNR = 2*Eb/No;
​
% Convert SNR to dB scale
SNRdB = 10*log10(SNR);
​
% Define matrix dimensions and parameters
M = 32; 
N = 16;
Ptx = eye(M); 
Prx = eye(M);
nTaps = 5;
DelayTaps = [0 1 2 3 4];
DopplerTaps = [0 1 2 3 4];
Ncp = max(DelayTaps);
​
% Initialize arrays to store Bit Error Rate (BER) for different methods
BER_MMSE = zeros(length(Eb),1);
BER_ZF = zeros(length(Eb),1);
​
% Number of iterations for Monte Carlo simulation
ITER = 10;
​
% Precompute matrices for transformation
F_M = 1/sqrt(M)*dftmtx(M);
F_N = 1/sqrt(N)*dftmtx(N);
​
% Main loop for Monte Carlo simulation
for ite = 1:ITER
    ite
    
    % Generate random bits for transmission
    XddBits = randi([0,1],M,N);
    
    % Generate random channel taps
    h = sqrt(1/2)*(randn(1,nTaps)+ 1j*randn(1,nTaps));
    
    % Construct effective channel matrix
    Hmat = zeros(M*N,M*N);
    omega = exp(1j*2*pi/(M*N));
    for tx = 1:nTaps
        Hmat = Hmat + h(tx)*circshift(eye(M*N),DelayTaps(tx))*...
            (diag(omega.^((0:M*N-1)*DopplerTaps(tx))));
    end
    Heff = kron(F_N,Prx)*Hmat*kron(F_N',Ptx);
    
    % Generate Complex Noise
    ChNoise = sqrt(No/2)*(randn(1,M*N) + 1j*randn(1,M*N));
    
    % Loop over different Eb/N0 values
    for ix = 1:length(Eb)
        % Generate modulated symbols
        X_DD = sqrt(Eb(ix))*(2*XddBits-1); 
        X_TF = F_M*X_DD*F_N';
        S_mat = Ptx*F_M'*X_TF;        
        TxSamples = reshape(S_mat,M*N,1).';
        TxSamplesCP = [TxSamples(M*N-Ncp+1:M*N) TxSamples];
        
        % Channel filtering
        RxsamplesCP = 0;
        for tx = 1:nTaps
            Doppler = exp(1j*2*pi/M*(-Ncp:M*N-1)*DopplerTaps(tx)/N);
            RxsamplesCP = RxsamplesCP + h(tx)*circshift(TxSamplesCP.*Doppler,[1, DelayTaps(tx)]);
        end
        
        % Remove cyclic prefix
        Rxsamples = RxsamplesCP(Ncp+1:M*N+Ncp) + ChNoise;
        R_mat = reshape(Rxsamples.',M, N) ;
        Y_TF = F_M*Prx*R_mat;
        Y_DD = F_M'*Y_TF*F_N;
        y_DD = reshape(Y_DD, M*N, 1) ;
        
        % MMSE Equalization
        xhatMMSE = inv(Heff'*Heff + eye(M*N)/Eb(ix))*Heff'*y_DD;
        DecodedBits = (real(xhatMMSE) >= 0);
        BER_MMSE(ix) = BER_MMSE(ix) + sum(DecodedBits ~= reshape(XddBits,M*N,1));
        
        % Zero Forcing (ZF) Equalization
        xhatZF = pinv(Heff)*y_DD;
        DecodedBits = (real(xhatZF) >= 0);
        BER_ZF(ix) = BER_ZF(ix) + sum(DecodedBits ~= reshape(XddBits,M*N,1));
    end
end
​
% Average BER over iterations and symbols
BER_MMSE = BER_MMSE/M/N/ITER;
BER_ZF = BER_ZF/M/N/ITER;
​
% Plot BER versus SNR
semilogy(EbdB,BER_MMSE,'b-s','linewidth',3.0,'MarkerFaceColor','b','MarkerSize',9.0);
hold on; 
grid on; 
semilogy(EbdB,BER_ZF,'r-o','linewidth',3.0,'MarkerFaceColor','r','MarkerSize',9.0);
axis tight;
legend('MMSE','ZF');
title('OTFS BER v/s SNR');
xlabel('SNR(dB)'); 
ylabel('BER');
​

OTFS系统建模

% Clear command window, workspace variables, and close all figures
clc; 
clear all; 
close all;
​
% Define Eb values in dB
EbdB = -10:2:10;
​
% Convert Eb values from dB to linear scale
Eb = 10.^(EbdB/10);
​
% Define Noise Power
No = 1;
​
% Calculate Signal-to-Noise Ratio (SNR) in linear scale
SNR = 2*Eb/No;
​
% Convert SNR to dB scale
SNRdB = 10*log10(SNR);
​
% Define matrix dimensions and parameters
M = 32; 
N = 16;
Ptx = eye(M); 
Prx = eye(M);
nTaps = 5;
DelayTaps = [0 1 2 3 4];
DopplerTaps = [0 1 2 3 4];
Ncp = max(DelayTaps);
​
% Initialize arrays to store Bit Error Rate (BER) for different methods
BER_MMSE = zeros(length(Eb),1);
BER_ZF = zeros(length(Eb),1);
​
% Number of iterations for Monte Carlo simulation
ITER = 10;
​
% Precompute matrices for transformation
F_M = 1/sqrt(M)*dftmtx(M);
F_N = 1/sqrt(N)*dftmtx(N);
​
% Main loop for Monte Carlo simulation
for ite = 1:ITER
    ite
    
    % Generate random bits for transmission
    XddBits = randi([0,1],M,N);
    
    % Generate random channel taps
    h = sqrt(1/2)*(randn(1,nTaps)+ 1j*randn(1,nTaps));
    
    % Construct effective channel matrix
    Hmat = zeros(M*N,M*N);
    omega = exp(1j*2*pi/(M*N));
    for tx = 1:nTaps
        Hmat = Hmat + h(tx)*circshift(eye(M*N),DelayTaps(tx))*...
            (diag(omega.^((0:M*N-1)*DopplerTaps(tx))));
    end
    Heff = kron(F_N,Prx)*Hmat*kron(F_N',Ptx);
    
    % Generate Complex Noise
    ChNoise = sqrt(No/2)*(randn(1,M*N) + 1j*randn(1,M*N));
    
    % Loop over different Eb/N0 values
    for ix = 1:length(Eb)
        % Generate modulated symbols
        X_DD = sqrt(Eb(ix))*(2*XddBits-1); 
        X_TF = F_M*X_DD*F_N';
        S_mat = Ptx*F_M'*X_TF;        
        TxSamples = reshape(S_mat,M*N,1).';
        TxSamplesCP = [TxSamples(M*N-Ncp+1:M*N) TxSamples];
        
        % Channel filtering
        RxsamplesCP = 0;
        for tx = 1:nTaps
            Doppler = exp(1j*2*pi/M*(-Ncp:M*N-1)*DopplerTaps(tx)/N);
            RxsamplesCP = RxsamplesCP + h(tx)*circshift(TxSamplesCP.*Doppler,[1, DelayTaps(tx)]);
        end
        
        % Remove cyclic prefix
        Rxsamples = RxsamplesCP(Ncp+1:M*N+Ncp) + ChNoise;
        R_mat = reshape(Rxsamples.',M, N) ;
        Y_TF = F_M*Prx*R_mat;
        Y_DD = F_M'*Y_TF*F_N;
        y_DD = reshape(Y_DD, M*N, 1) ;
        
        % MMSE Equalization
        xhatMMSE = inv(Heff'*Heff + eye(M*N)/Eb(ix))*Heff'*y_DD;
        DecodedBits = (real(xhatMMSE) >= 0);
        BER_MMSE(ix) = BER_MMSE(ix) + sum(DecodedBits ~= reshape(XddBits,M*N,1));
        
        % Zero Forcing (ZF) Equalization
        xhatZF = pinv(Heff)*y_DD;
        DecodedBits = (real(xhatZF) >= 0);
        BER_ZF(ix) = BER_ZF(ix) + sum(DecodedBits ~= reshape(XddBits,M*N,1));
    end
end
​
% Average BER over iterations and symbols
BER_MMSE = BER_MMSE/M/N/ITER;
BER_ZF = BER_ZF/M/N/ITER;
​
% Plot BER versus SNR
semilogy(EbdB,BER_MMSE,'b-s','linewidth',3.0,'MarkerFaceColor','b','MarkerSize',9.0);
hold on; 
grid on; 
semilogy(EbdB,BER_ZF,'r-o','linewidth',3.0,'MarkerFaceColor','r','MarkerSize',9.0);
axis tight;
legend('MMSE','ZF');
title('OTFS BER v/s SNR');
xlabel('SNR(dB)'); 
ylabel('BER');
​


OTFS系统建模
clc; clear all; close all;
% SIGNAL MODEL OF OTFS
M = 32; N = 32;                 %M-> no. of subcarriers/delay bins ; N-> no. of symbols/doppler bins
F_M = 1/sqrt(M)*dftmtx(M);      %disrete fourier transform matrix (normalised)   
F_N = 1/sqrt(N)*dftmtx(N);      %forms the grid
Ptx = eye(M);
delta_f = 15e3;                 %subcarrier BW
T = 1/delta_f;                  %OFDM symbol Duration
​
                   
X_DD = zeros(M,N);              %Delay Doppler Grid
X_DD(3, 3) = 1;                 %impulse in DD Domain
X_TF = F_M*X_DD*F_N';            
S = Ptx*F_M'
*X_TF;
s = reshape(S,M*N,1);
​
​
​
​
% figure()
subplot(4,2,[1,2,3,4])
bar3(X_DD);
axis tight;
xlabel('Doppler'); 
ylabel('Delay');
title('Basis function in DD-domain');
​
% figure()
subplot(4,2,5)
surf(real(X_TF));
axis tight;
xlabel('Time'); 
ylabel('Subcarrier');
title('Basis function in TF-domain (Real)');
​
% figure()
subplot(4,2,6)
surf(imag(X_TF));
axis tight;
xlabel('Time'); 
ylabel('Subcarrier');
title('Basis function in TF-domain (Imag)');
​
% figure()
subplot(4,2,7)
plot((0:length(s)-1)*T/M,real(s));
axis tight;
ylim([-0.5 0.5]);
xlabel('Time');
title('Basis function in time-domain (Real)');
​
% figure()
subplot(4,2,8)
plot((0:length(s)-1)*T/M,imag(s));
axis tight;
ylim([-0.5 0.5]);
xlabel('Time');
title('Basis function in time-domain (Imag)');
​

OTFS系统性能部分代码

% Clear command window, workspace variables, and close all figures
clc; 
clear all; 
close all;
​
% Define Eb values in dB
EbdB = 2;
​
% Convert Eb values from dB to linear scale
Eb = 10.^(EbdB/10);
​
% Define Noise Power
No = 1;
​
% Calculate Signal-to-Noise Ratio (SNR) in linear scale
SNR = 2*Eb/No;
​
% Convert SNR to dB scale
SNRdB = 10*log10(SNR);
​
% Define matrix dimensions and parameters
M = 32; 
N = 16;
Ptx = eye(M); 
Prx = eye(M);
nTaps = 5;
DelayTaps = [5 1 0 3 4];
DopplerTaps = [0 3 2 3 4];
Ncp = max(DelayTaps);
​
​
% Precompute matrices for transformation
F_M = 1/sqrt(M)*dftmtx(M);
F_N = 1/sqrt(N)*dftmtx(N);
​
% Generate random bits for transmission
XddBits = randi([0,1],M,N);
​
% Generate random channel taps
h = sqrt(1/2)*(randn(1,nTaps)+ 1j*randn(1,nTaps));
​
% Construct effective channel matrix
Hmat = zeros(M*N,M*N);
omega = exp(1j*2*pi/(M*N));
for tx = 1:nTaps
    Hmat = Hmat + h(tx)*circshift(eye(M*N),DelayTaps(tx))*...
        (diag(omega.^((0:M*N-1)*DopplerTaps(tx))));
end
Heff = kron(F_N,Prx)*Hmat*kron(F_N',Ptx);
    
% Generate Complex Noise
ChNoise = sqrt(No/2)*(randn(1,M*N) + 1j*randn(1,M*N));
    
% Generate modulated symbols
X_DD = sqrt(Eb)*(2*XddBits-1); 
X_TF = F_M*X_DD*F_N';
S_mat = Ptx*F_M'*X_TF;        
TxSamples = reshape(S_mat,M*N,1).';
TxSamplesCP = [TxSamples(M*N-Ncp+1:M*N) TxSamples];
​
% Channel filtering
RxsamplesCP = 0;
for tx = 1:nTaps
    Doppler = exp(1j*2*pi/M*(-Ncp:M*N-1)*DopplerTaps(tx)/N);
    RxsamplesCP = RxsamplesCP + h(tx)*circshift(TxSamplesCP.*Doppler,[1, DelayTaps(tx)]);
end
​
% Remove cyclic prefix
Rxsamples = RxsamplesCP(Ncp+1:M*N+Ncp) + ChNoise;
R_mat = reshape(Rxsamples.',M, N) ;
Y_TF = F_M*Prx*R_mat;
Y_DD = F_M'*Y_TF*F_N;
y_DD = reshape(Y_DD, M*N, 1) ;
​
% MMSE Equalization
xhatMMSE = inv(Heff'*Heff + eye(M*N)/Eb)*Heff'*y_DD;
DecodedBits_MMSE = (real(xhatMMSE) >= 0);
DecodedBits_MMSE_reshaped = reshape(DecodedBits_MMSE,M,N);
BER_MMSE_Map = (DecodedBits_MMSE_reshaped ~= XddBits);
BER_MMSE = sum(DecodedBits_MMSE ~= reshape(XddBits,M*N,1));
​

OTFS模糊函数部分代码

% Clear command window, workspace variables, and close all figures
clc; 
clear all; 
close all;
​
% Define Eb values in dB
EbdB = 3;
​
% Convert Eb values from dB to linear scale
Eb = 10.^(EbdB/10);
​
% Define Noise Power
No = 1;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微软提出“Copilot+ PCs”构想,强调本地AI处理;OpenAI暂停ChatGPT语音功能因声音相似争议

🦉 AI新闻 🚀 微软提出“Copilot PCs”构想,强调本地AI处理 摘要:在微软 Build 开发者前瞻大会上,CEO 萨蒂亚・纳德拉介绍了“Copilot PCs”,一种新类 Windows PC,需配备神经处理单元&#xf…

视频技术在智慧营业厅中的应用:AI识别与智能化转型

一、方案背景 随着信息技术的快速发展,图像和视频分析技术已广泛应用于各行各业,特别是在营业厅场景中,该技术能够有效提升服务质量、优化客户体验,并提高安全保障水平。TSINGSEE青犀智慧营业厅视频管理方案旨在探讨视频监控和视…

你真的懂firewalld吗?不妨看看我的这篇文章

一、firewalld简介 firewalld防火墙是Linux系统上的一种动态防火墙管理工具,它是Red Hat公司开发的,并在许多Linux发行版中被采用。相对于传统的静态防火墙规则,firewalld使用动态的方式来管理防火墙规则,可以更加灵活地适应不同…

ld链接文件

文章目录 1. sections缩写2. 链接脚本2.1 MEMORY(内存命令)2.1.1 作用2.1.2 格式 2.2 SECTIONS(段命令)2.2.1 作用2.2.2 格式 2.3 特殊符号含义2.4 通配符2.5 Eg 1. sections缩写 2. 链接脚本 https://www.cnblogs.com/jianhua19…

mysql 01 linux 上安装mysql服务端

01.linux安装 MySQL的大部分安装包都包含了服务器程序和客户端程序,不过在Linux下使用RPM包时会有单独的服 务器RPM包和客户端RPM包,需要分别安装。 1.查看是否已经安装了MySQL rpm -qa | grep mysql如果什么都没有,就是还没有装过MySQL …

【设计模式】JAVA Design Patterns——Circuit Breaker(断路器模式)

🔍目的 以这样一种方式处理昂贵的远程服务调用,即单个服务/组件的故障不会导致整个应用程序宕机,我们可以尽快重新连接到服务 🔍解释 真实世界例子 想象一个 Web 应用程序,它同时具有用于获取数据的本地文件/图像和远程…

(1) 初识QT5

文章目录 Qt Quickdemo信号的命名方式 qml语言一个很重要的概念 qt 模块 Qt Quick Qt Quick是Qt5中⽤户界⾯技术的涵盖。Qt Quick⾃⾝包含了以下⼏种技术: QML-使⽤于⽤户界⾯的标识语⾔JavaScript-动态脚本语⾔Qt C具有⾼度可移植性的C库. 类似HTML语⾔&#xf…

生成式AI的GPU网络技术架构

生成式AI的GPU网络 引言:超大规模企业竞相部署拥有64K GPU的大型集群,以支撑各种生成式AI训练需求。尽管庞大Transformer模型与数据集需数千GPU,但实现GPU间任意非阻塞连接或显冗余。如何高效利用资源,成为业界关注焦点。 张量并…

泰达克TADHE uv胶水在粘接聚酰亚胺(Polyimide,PI)时具有一些优势,并在各行业中得到了广泛应用,尤其是在特定应用中

泰达克TADHE uv胶水在粘接聚酰亚胺(Polyimide,PI)时具有一些优势,并在各行业中得到了广泛应用,尤其是在特定应用中。以下是一些使用UV胶水粘接PI的优势: 1.快速固化: UV胶水通过紫外线照射进行固…

Java进阶学习笔记23——API概述

API: API(Application Programming Interface)应用程序编程接口 就是Java帮我们写好了一些程序:如类、方法等等,我们直接拿过来用就可以解决一些问题。 为什么要学别人写好的程序? 不要重复造轮子。开发…

回文链表(快慢指针解法之在推进过程中反转)

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝抱怨深处黑暗,不如提灯前行…

系统开发与运行知识

系统开发与运行知识 导航 文章目录 系统开发与运行知识导航一、软件工程二、软件生命周期三、开发模型四、开发方法五、需求分析结构化分析 六、数据流图分层数据流图的画法设计注意事项 七、数据字典数据字典的内容 八、系统设计九、结构化设计常用工具十、面向对象十一、UML…

【Windows】本地磁盘挂载 Minio 桶

目录 1.软件安装安装winfsp支持安装rclone 2.新建rclone远程存储类型S3服务类型验证方式地区终端地址ACL服务端加密KMS 3.挂载存储盘 1.软件安装 安装winfsp支持 下载地址 或 下载地址2 文件为msi文件,下载后双击直接安装即可,可以选择安装路径 安装r…

接口响应断言-json

json认识JSONPath源码类学习/json串的解析拓展学习 目的:数据返回值校验测试 json认识 json是什么-是一种数据交换格式,举例平时看到的json图2,在使用中查看不方便,会有格式转化的平台,json格式的展示 JSON在线视图…

【好书推荐-第十八期】《 进化深度学习》

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号:洲与AI。 🎈 本文专栏:本文收录…

德比软件携手亚马逊云科技,用生成式AI赋能旅游行业降本增效

旅游行业是最早被数字化技术赋能的行业之一。比如,消费者早已习惯在携程、艺龙、Booking等OTA平台根据实时酒店信息预订酒店。 这种丝滑的消费者体验背后,离不开领先的管理软件支撑。实际上大型酒店集团与OTA平台之间的系统对接非常复杂,酒店…

在线教程丨与 Sora 技术路线相似!全球首个开源文生视频 DiT 模型 Latte 一键部署

自OpenAI推出 Sora 以来,「文生视频」概念及相关应用备受瞩目。而伴随 Sora 的大热,其背后的关键技术,DiT(Diffusion Transformers) 也被「考古挖掘」了出来。 事实上,DiT 是一个文生图模型,该模型于两年前开源&#x…

双指针技巧,链表

双指针链表 虚拟头节点双指针,都要用虚拟1头节点 合并两个有序链表 设置双指针,都指向虚拟头节点 ListNode list1 代表的是头节点 class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode dummynew ListNode(-1…

怎么压缩pdf pdf在线压缩 pdf文件压缩大小

pdf文件无论在何种设备上打开,PDF文件都能保持其原始的布局和格式,这对于文档共享和打印非常重要。PDF不仅支持文本,还能嵌入图像、视频、音频以及动态链接等元素。PDF文件支持加密和密码保护,可以限制访问、编辑、复制或打印文档…

5.命令行提示符

一、打开终端(有以下几种方式) 1.在搜索框输入 terminal 2.命令 (1)ctrlaltt打开新的终端 (2)ctrlshiftt:在已经打开终端的基础内,新打开一个同路径的终端。 (3&#xf…