-----------------------------------目录-------------------------------------
读取接收机数据(GSR_Rx_tdms_read.m) -->
获取信道信息(用导频做信道估计HestiPhase.m) -->
时域频域特征提取,存入excel表格 (基础特征&基于相关论文的重要特征,timeFeatureExtraction.m; HstftFeatureExtraction.m) -->
从excel中读取数据,训练分类器(newInputGenerator.m) -->
训练机器学习分类器
----------------------------------代码----------------------------------------
读取数据代码 GSR_Rx_tdms_read.m
%%
%matlab版本,Matlab 2022b及以上
clc;clear;
%文件路径(从实验设备/接收机中获取的数据)
fileName = "C:\Users\Z\Desktop\data\0201\5liandun1.tdms";
%GSR默认的通道组名称为USRP Rx,若打开其他TDMS文件,需要确认通道组名称是否正确
ChannelGroup="USRP Rx";
%每次读取的数据长度
readSize = 60000000000;
%读取通道组中的ChannelGroup通道
ds = tdmsDatastore(fileName, ReadSize=readSize, SelectedChannelGroup=ChannelGroup);
%从文件头开始读取通道组中所有通道的数据,每次读取点数为readsize
while(hasdata(ds))
[IQ_cell,info] = read(ds);
info.Offset %
end
IQ=table2array(IQ_cell{1});
chanenel_num = length(IQ(1,:));
sample_num = length(IQ(:,1));
% IQ数据为uint32,高16bit为I路,低16位为Q,拆分后数据类型为int16
channel_data = zeros(sample_num,chanenel_num);
for i = 1:chanenel_num
Q = typecast((bitshift(IQ(:,i),-16)),'int16');
I = typecast(bitand(IQ(:,i),uint32(65535)),'int16');
%去偶数行的0和数据对齐,可能不用去?不用就注释掉
I = I(1:2:end);
Q = Q(1:2:end);
channel_data(:,i) = complex(I, Q);
end
%plot(Q)
信道估计代码 HestiPhase.m
% -------用导频H做phase
% --------------OFDM parameters-----------
Carriers = 3276;
Nfft = 4096; % 进行了fft操作的点数,满足2^n
Np = 4096;
%% --------------------------------获取导频的位置参数loc--------------------------
% 16 - QAM - Modulation Scheme
Es = 1;
M = 64;
A = sqrt(3/2/(M-1)*Es);% Signal energy and QAM normalization factor
Nps = 4; % Pilot Spacing
msgint = randi([2 5],1,Carriers); % 模拟生成发送信号
dat_ser = A*qammod(msgint,M); % 信号调制
% serial to parllel conversion
dat_par = dat_ser.'; % 将序列转换为并行形式,存储在dat_par中。
% Pilot Insertion - Comb Type Arrangement
j = 1;
k = 1;
loc = [];
for i = 1:Nfft
if or((i<=round(Carriers/2)),(i> Nfft-round(Carriers/2)))
if mod(i,Nps) == 1 % 余数为1
X(i) = k; % 插入导频
loc = [loc i]; % 记录导频位置
k=k+1;
end
end
end
%% --------------------------------获取发送时真实的导频----------------------------
XP_data = xlsread('C:\Users\Z\Desktop\ISAC\code\phwyh\yh\Tx_Pilot_Xp.xlsx');
real_pilot = XP_data(1:2048);
imag_pilot = XP_data(2049:end);
Xp = complex(real_pilot,imag_pilot);
Nps = 4; % Pilot Spacing
Np = floor(Carriers/Nps); % 每个OFDM信号的导频载波个数
%% ---------发送信号做接收,用于验证导频