利用CSI信息,为了做室内目标定位,我们将上一篇文章中获得的CSI数据进行可视化操作,本数据为一发一收 ,发射天线数为1,接收天线数为3,如果有需要数据的可以私聊
参考博客
WIFI信号状态信息 CSI 数据处理篇之读取数据与数据解析(二)_csi数据_Silver_777的博客-CSDN博客
为了验证数据的好坏,以下为将数据读取出来的结果,我plot了所有子载波共90根,一共是4006个时间戳
振幅图比较直观,可以看到振幅随着时间的变化,在信号不受干扰的时候,振幅是平稳的,当活动发生时,信号开始波动;
而相位图由于相位跳变,且数据数量过大而导致图像显得很混乱,需要进行相位解卷绕处理。
WIFI信号状态信息
%% 读取原始数据
str = 'test2.dat';% 输入文件名字
csi_trace = read_bf_file(str);
csi_trace(all(cellfun(@isempty,csi_trace),2),:) = [];%去掉空部分,以防设备传输出现丢数据问题
row = size(csi_trace,1);
result_matrix = zeros(row,181); % 第1~90列存储振幅,第91~180列存储相位,第181列存储时间戳
Fs = 1000; % 采样频率
%% 计算,将该dat原始文件的振幅和相位都存储在result_matrix矩阵中
% 这一节得到是result_matrix,维度为result_matrix
for i = 1:row
%读取第i条数据
csi_entry = csi_trace{i};%结构体形式
%读取并存储第i条数据的时间戳
result_matrix(i,181) = csi_trace{i}.timestamp_low;
%读取第i条数据的CSI值
csi = get_scaled_csi(csi_entry);%复数矩阵,1*3*30
csi1 = squeeze(csi);% 去掉全为1的数组,复数矩阵,3*30
% 提取当前时刻的信号数据包
current_packet = csi1;
% 计算振幅信息
amplitude = abs(current_packet);
% 计算相位信息
phase = angle(current_packet);
% 将振幅和相位信息存储到result_matrix中
result_matrix(i, 1:90) = reshape(amplitude, 1, []);
result_matrix(i, 91:180) = reshape(phase, 1, []);
end
% 可视化
% 振幅图
figure(1);
plot(result_matrix(:, 1:90));
xlabel('时间');
ylabel('振幅');
title('振幅随时间的变化');
grid on;
% 相位图
figure(2);
plot(result_matrix(:, 91:180));
xlabel('时间');
ylabel('相位 (弧度)');
title('相位随时间的变化');
grid on;
% 相位接卷绕后的图
phase_wrapped = result_matrix(:, 91:180); % 原始相位数据
phase_unwrapped = unwrap(phase_wrapped);
figure(3);
subplot(2, 1, 1);
plot(phase_wrapped);
title('Wrapped Phase');
subplot(2, 1, 2);
plot(phase_unwrapped);
title('Unwrapped Phase');