您的位置:首页 > 编程语言

CSI信道状态信息处理入门1(附源代码)

2017-10-09 22:17 806 查看

一、1组CSI数据的SNR

csi_trace = read_bf_file('源数据');%源数据为你用CSI Tools工具采集到的原始数据

for l=1:1 %取50个数据包的数据
csia=get_scaled_csi(csi_trace{l});
for i=1:1 %1个发射天线
for j=1:2 %2个接收天线
for k=1:30 %30个子载波数据
B(i,j,k)=csia(i,j,k);
end
end
end
plot(db(abs(squeeze(B).')))
hold on
end

legend('RX Antenna A', 'RX Antenna B', 'Location', 'SouthEast' );
xlabel('Subcarrier index');
ylabel('SNR [dB]')
hold off;



二、时域柱状图

实际情况时域柱状图
csi_trace = read_bf_file('源数据');
for l=1:50 %取50个数据包的数据
csia=get_scaled_csi(csi_trace{l});
for k=1:30 %30个子载波数据
B(1,1,k)=csia(1,1,k);
end
csi_one=squeeze(B).';

for ki=1:30 %30个子载波数据
csi_amp(ki,l)=csi_one(ki); %第l个数据包的第k个子载波的相位值 【子载波,数据包】
end
end

csi_ifft=ifft(csi_amp(:,1));

T_amp=abs(csi_ifft);

bar(T_amp);

set(gca,'XTick',[0 10 20 30]);

set(gca,'xticklabel',{'0','0.5','1','1.5'});

xlabel('Delay (ms)');

ylabel('Amplitude(dB)');



三、未经过解卷绕的相位图

csi_trace = read_bf_file('源数据');
for l=1:50 %取50个数据包的数据
csia=get_scaled_csi(csi_trace{l});
for k=1:30 %30个子载波数据
B(1,1,k)=csia(1,1,k);
csi_one=squeeze(B).';
csi_phase=angle(csi_one);%angle求复数矩阵相位角的弧度值,取值-pi到pi
csi_amplitude=abs(csi_one);%angle求复数矩阵的绝对值
phase(k,l)=csi_phase(k); %第l个数据包的第k个子载波的相位值 【子载波,数据包】
amplitude(k,l)=csi_amplitude(k);
end
end
plot(180*phase/pi,'.','Markersize',25);

xlabel('Subcarrier index');
ylabel('Phase (deg)')



四、经过解卷绕后的相位图

csi_trace = read_bf_file('源数据');
for l=1:50 %取50个数据包的数据
csia=get_scaled_csi(csi_trace{l});
for k=1:30 %30个子载波数据
B(1,1,k)=csia(1,1,k);
csi_one=squeeze(B).';
csi_phase=angle(csi_one);%angle求复数矩阵相位角的弧度值,取值-pi到pi
csi_amplitude=abs(csi_one);%angle求复数矩阵的绝对值
phase(k,l)=csi_phase(k); %第l个数据包的第k个子载波的相位值 【子载波,数据包】
amplitude(k,l)=csi_amplitude(k);
end
plot((180*unwrap(phase(:,l))/pi),'b');
%plot(unwrap(phase(:,l)),'b');
hold on;
end

xlabel('Subcarrier index');
ylabel('Phase (deg)')
%ylabel('Phase (rad)')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐