Archived
finish pa phase calibration, add sample data
测试了三台对飞节点的相对幅相,测试了一台814节点的相对幅相
This commit is contained in:
@@ -13,42 +13,26 @@
|
||||
clc; clear;
|
||||
%% initial parameters/初始参数
|
||||
interp = 8; % interpolation factor
|
||||
process_interp = 8;
|
||||
channelNum = 4;
|
||||
dataLen = 8192;
|
||||
symNum = 8;
|
||||
fs = 48e6;
|
||||
freqRange = 10000:1000:28000;
|
||||
|
||||
dataFile = [ ...
|
||||
% "iladata_rx_data_26G_20230509_1445.csv", ...
|
||||
% "iladata_rx_data_26G_20230509_1715.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1030.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1100.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1115.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1415_A-1.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1415_A-2.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1415_A-3.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1455_B-1.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1455_B-2.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1455_B-3.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1500_A-1.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1500_A-2.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1500_A-3.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1530_B-1.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1530_B-2.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1530_B-3.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1600_B-1.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1600_B-2.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1630_B-1.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1630_B-2.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1630_B-3.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1725_B-1.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1725_B-2.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1725_B-3.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1730_A-1.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1730_A-2.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1730_A-3.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1740_B-1.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1740_B-2.csv", ...
|
||||
"iladata_rx_data_26G_20230510_1740_B-3.csv", ...
|
||||
];
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1400_A-1.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1400_A-2.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1400_A-3.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1430_B-1.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1430_B-2.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1430_B-3.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1510_A-1.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1510_A-2.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1510_A-3.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1535_B-1.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1535_B-2.csv", ...
|
||||
"./基带2201005,天线2202004/iladata_rx_data_26G_20230515_1535_B-3.csv", ...
|
||||
];
|
||||
|
||||
dataFileNum = length(dataFile);
|
||||
|
||||
@@ -58,13 +42,14 @@ pnSequence = comm.PNSequence('Polynomial','x^7+x^6+1', ...
|
||||
PRBS7 = pnSequence();
|
||||
PRBS7_polar = 1-2*[PRBS7;0];
|
||||
|
||||
chipLen = length(PRBS7_polar); % pn chip length
|
||||
symNum = dataLen/chipLen/interp; % total symbol number
|
||||
pnSequence = comm.PNSequence('Polynomial','x^10+x^7+1', ...
|
||||
'InitialConditions',[zeros(1,9),1],'SamplesPerFrame',2^10-1);
|
||||
PRBS10 = pnSequence();
|
||||
PRBS10_polar = 1-2*[PRBS10;0];
|
||||
|
||||
%% data analysis
|
||||
|
||||
% search for frequency shift
|
||||
freqRange = 22000:10:28000;
|
||||
freqDmfPeak = zeros(dataFileNum,length(freqRange));
|
||||
freqTarget = zeros(dataFileNum,channelNum);
|
||||
|
||||
@@ -92,14 +77,26 @@ desiredPntIndexList = strings(dataFileNum*(symNum-1)+1,channelNum+1);
|
||||
desiredPntIndexList(1,:) = ["Chip Index", "ch1", "ch2", "ch3", "ch4"];
|
||||
|
||||
for data_num = 1:dataFileNum
|
||||
|
||||
% read data
|
||||
rawData = readmatrix(dataFile(data_num));
|
||||
disp(dataFile(data_num));
|
||||
seqRx = [];
|
||||
seqRx(:,1) = (rawData(:, 4) + 1i*rawData(:, 5)).';
|
||||
seqRx(:,2) = (rawData(:, 6) + 1i*rawData(:, 7)).';
|
||||
seqRx(:,3) = (rawData(:, 8) + 1i*rawData(:, 9)).';
|
||||
seqRx(:,4) = (rawData(:,10) + 1i*rawData(:,11)).';
|
||||
|
||||
|
||||
if (dataFile(data_num).contains(["0509","0510","0511"]))
|
||||
PRBS = PRBS7_polar;
|
||||
else
|
||||
PRBS = PRBS10_polar;
|
||||
end
|
||||
|
||||
dataLen = length(seqRx(:,1));
|
||||
chipLen = length(PRBS); % pn chip length
|
||||
PRBS_up_flip = kron(flip(PRBS),ones(process_interp,1));
|
||||
|
||||
% search for frequency shift
|
||||
for ch_num = 1:channelNum
|
||||
for freq_num = 1:length(freqRange)
|
||||
@@ -107,7 +104,7 @@ for data_num = 1:dataFileNum
|
||||
data_cxr = seqRx(1:2*chipLen*interp,ch_num).*exp(1i*2*pi* ...
|
||||
freqRange(freq_num)/fs*(0:2*chipLen*interp-1)');
|
||||
% convolve multiplied data with pn sequence, without zero-padded results
|
||||
data_dmf = conv(data_cxr, kron(flip(PRBS7_polar),ones(interp,1)),'valid');
|
||||
data_dmf = conv(downsample(data_cxr,interp/process_interp), PRBS_up_flip,'valid');
|
||||
% peak search
|
||||
freqDmfPeak(data_num,freq_num) = max(abs(data_dmf(1:end-1)));
|
||||
end
|
||||
@@ -117,9 +114,9 @@ for data_num = 1:dataFileNum
|
||||
|
||||
% phase amplitude analysis
|
||||
for ch_num = 1:channelNum
|
||||
seqRxCxr = seqRx(:,ch_num).*exp(1i*2*pi*freqTarget(1)/fs*(0:dataLen-1)');
|
||||
seqRxCxrCorr = conv(seqRxCxr,kron(flip(PRBS7_polar),ones(interp,1)),'valid');
|
||||
seqRxCxrCorrSplit = reshape(seqRxCxrCorr(1:end-1),chipLen*interp, ...
|
||||
seqRxCxr = seqRx(:,ch_num).*exp(1i*2*pi*freqTarget(1,ch_num)/fs*(0:dataLen-1)');
|
||||
seqRxCxrCorr = conv(downsample(seqRxCxr,interp/process_interp),PRBS_up_flip,'valid');
|
||||
seqRxCxrCorrSplit = reshape(seqRxCxrCorr(1:end-1),chipLen*process_interp, ...
|
||||
symNum-1);
|
||||
|
||||
desiredPntIndex(data_num,:,ch_num) = find(abs(seqRxCxrCorrSplit) == ...
|
||||
@@ -149,7 +146,12 @@ for data_num = 1:dataFileNum
|
||||
angEstSymRawList((data_num-1)*(symNum-1)+1+(1:symNum-1),2:end) = string(angEstSymRaw(data_num,:,:));
|
||||
end
|
||||
|
||||
%% data analysis
|
||||
|
||||
freqTargetRelative = freqTarget - freqTarget(:,1);
|
||||
freqTargetMax = max(freqTarget,[],'all');
|
||||
freqTargetMIn = min(freqTarget,[],'all');
|
||||
|
||||
maxDesiredPointIndexDiff = max(abs(desiredPntIndex-(desiredPntIndex(:,:,1))),[],"all");
|
||||
|
||||
ampEstSymMaxList = strings(dataFileNum+1,channelNum+1);
|
||||
@@ -183,14 +185,16 @@ figure(1);
|
||||
|
||||
subplot(121);
|
||||
plot(ampEstSymAvg);
|
||||
legend({"ch1","ch2","ch3","ch4"});
|
||||
legend(["ch1","ch2","ch3","ch4"]);
|
||||
title("Amplitude Estimation");
|
||||
ylim([min(ampEstSymAvg,[],'all')-0.2,max(ampEstSymAvg,[],'all')+0.2]);
|
||||
grid on; grid minor;
|
||||
|
||||
subplot(122);
|
||||
plot(angEstSymAvg);
|
||||
legend({"ch1","ch2","ch3","ch4"});
|
||||
legend(["ch1","ch2","ch3","ch4"]);
|
||||
title("Angle Estimation");
|
||||
ylim([-10,370]);
|
||||
grid on; grid minor;
|
||||
% xticks([1 5 10 20])
|
||||
% xticklabels(dataFile)
|
||||
|
||||
Reference in New Issue
Block a user