OTFS基带通信系统(脉冲导频,信道估计,MP解调算法)

Embedded Pilot-Aided Channel Estimation for OTFS in Delay–Doppler Channels | IEEE Journals & Magazine | IEEE Xplore

一、OTFS通信系统

如下图简要概括了OTFS基带通信系统过程,废话不多说给出完整系统详细代码。

以下仿真结果基于四抽头信道

估计信道 BER曲线

完美信道BER曲线

主函数部分代码

% Author: [YZ ]
% Date: [2024/9/8 ]
% Description: [Brief description of the code’s functionality]
% Version: [Version number, if applicable]


clc
clear all
close all
tic
%% OTFS parameters%%%%%%%%%%
% number of symbol
N = 16; %码元数为8
% number of subcarriers
M = 32;  %载波数为8
Nifft=N*M;



% size of constellation
M_mod = 4;  %进制数为4,那么一码元就包含2比特
M_bits = log2(M_mod);
% average energy per data symbol
eng_sqrt = (M_mod==2)+(M_mod~=2)*sqrt((M_mod-1)/6*(2^2));   %符号的能量
% number of symbols per frame
Protect_SubBlock_L=8;
Protect_Front=8;
data_row_range=4:12;
data_col_range=9:24;
Pilot_row_index=8;
Pilot_col_index=1;

DATA_BLOCK_N=max(data_row_range)-min(data_row_range)+1;
DATA_BLOCK_M=max(data_col_range)-min(data_col_range)+1;
N_syms_perfram = DATA_BLOCK_N*DATA_BLOCK_M;   %一帧中包含的符号数=单个载波包含的码元数*载波个数\
% number of bits per frame
N_bits_perfram = N_syms_perfram*2;    %

%信噪比范围
SNR_dB =0:5:20;    %信噪比dB从0~15,间隔5dB取样,length为4
SNR = 10.^(SNR_dB/10);  %dB和10进制换算
noise_var_sqrt = sqrt(1./SNR);  %噪声
sigma_2 = abs(eng_sqrt*noise_var_sqrt).^2;


baud_rate=6400;
tau = [0 2e-3 3e-3 4e-3 5e-3]; % 五条多径的时延
pdb = [0 -4 -8 -12 -16]; % 五条多径的平均路径增益
fdmax=6.5;
channel = comm.RayleighChannel(...
'SampleRate',baud_rate, ...
'PathDelays',tau, ... % 五条多径的时延
'AveragePathGains',pdb, ... % 五条多径的平均路径增益
'MaximumDopplerShift',fdmax, ...
'NormalizePathGains',true,...
'PathGainsOutputPort',true,...
'RandomStream','mt19937ar with seed',...
'Seed',2);

%%

N_fram = 10;
PAPR_dB_SUM=0;
err_ber = zeros(length(SNR_dB),1); %生成0矩阵,length返回 X 中最大数组维度的长度,此时为4,即此命令生成4*1维的0矩阵

fprintf('Start to do OTFS simulati
### 关于OTFS通信系统的时域插入、信道估计和检测的MATLAB实现 #### 1. 序列设计插入 为了在OTFS系统中进行有效的信道估计,通常会在传输信号中嵌入已知的符号。这些符号可以帮助接收端更精确地恢复发送的数据。 ```matlab % 参数设置 num_pilots = 8; % 数量 pilot_positions = randperm(64, num_pilots); % 随机选择位置 pilot_sequence = exp(1j * 2*pi*(0:num_pilots-1)/num_pilots); % 完备正交相位移键控(CPM) % 插入到发射矩阵X for i = 1:length(pilot_positions) X(pilot_positions(i)) = pilot_sequence(mod(i-1,num_pilots)+1); end ``` 此部分代码展示了如何创建并插入一组随机分布在整个资源网格上的CPM类型的序列[^1]。 #### 2. 基于信道估计 一旦接收到含有噪声和其他干扰因素影响后的信号`Y`,就可以利用之前插入的来估算实际经历过的无线信道特性: ```matlab H_estimated = zeros(size(Y)); % 初始化估计信道响应矩阵 for pos = pilot_positions' H_estimated(pos) = Y(pos)./X(pos); % 使用LS法计算对应位置处的信道增益 end ``` 这里采用最小二乘(LS)算法来进行初步的信道估计操作[^2]。 #### 3. 数据解调软判决输出 完成上述步骤之后,则可以基于所获得的信道状态信息(HSI),对接收信号执行匹配滤波器处理以及后续的最大似然(ML)或零强制(ZF)等不同准则下的数据检测过程: ```matlab rx_signal_filtered = conv(conj(h), y,'same'); % 匹配过滤 detected_bits = sign(real(rx_signal_filtered)).*sign(imag(rx_signal_filtered)); soft_outputs = abs(rx_signal_filtered).^2; ``` 这段程序片段实现了简单的硬决策译码方案,并提供了可用于迭代解码流程中的可靠度量——即所谓的“软”输出值[^3]。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值