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

一、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)') 



猜你喜欢

转载自blog.csdn.net/sinat_22991367/article/details/78187440