modify tx_qpsk, analyze ant data

tx wave of tx_qpsk is changed to bpsk format; the matlab script analyzing ant and self-loop data is tested
This commit is contained in:
2023-03-27 20:31:18 +08:00
parent bd032a8474
commit 26fa3e9e50
22 changed files with 1573094 additions and 524437 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,90 +0,0 @@
%% File Header/文件说明
%
% 调零算法对幅相一致性的要求较高,且 AD9361 多片同步的精度随机性较大,因此需要对
% AD9361 多片同步误差进行精细校准。采用收发扩频码的方式在校准过程中对两片 AD9361
% 的两个接收通道进行幅相测量,在接收端使用加法器进行非相干相关峰累积,累积 N 个
% 符号后出峰,根据相关峰的高度差和相位差,在接收端对信号的幅度和相位进行补偿。
%
clc; clear;
%% initial system parameters/初始系统参数
interp = 8; % interpolation factor
channelNum = 4;
dataLen = 131072;
fs = 48e6;
fd = -25427;
% standard pn sequence
pnSequence = comm.PNSequence('Polynomial','x^7+x^6+1', ...
'InitialConditions',[zeros(1,6),1],'SamplesPerFrame',2^7-1);
PRBS7 = pnSequence();
PRBS7_polar = 1-2*[PRBS7;0];
chipLen = length(PRBS7_polar); % pn chip length
symbolNum = dataLen/chipLen/interp;
rxdata = readmatrix("iladata_prsb7_interp8_1-1.csv");
seqRx(:,1) = (rxdata(:, 4) + 1i*rxdata(:, 5)).'.*exp(1i*2*pi*fd/fs*(0:dataLen-1));
seqRx(:,2) = (rxdata(:, 6) + 1i*rxdata(:, 7)).'.*exp(1i*2*pi*fd/fs*(0:dataLen-1));
seqRx(:,3) = (rxdata(:, 8) + 1i*rxdata(:, 9)).'.*exp(1i*2*pi*fd/fs*(0:dataLen-1));
seqRx(:,4) = (rxdata(:,10) + 1i*rxdata(:,11)).'.*exp(1i*2*pi*fd/fs*(0:dataLen-1));
% 降采样
seqRxDown = downsample(seqRx,interp,0);
% 取符号位
seqRxMsbReal = zeros(size(seqRxDown));
seqRxMsbImag = zeros(size(seqRxDown));
seqRxMsbReal(real(seqRxDown)>0) = 1;
seqRxMsbReal(real(seqRxDown)<0) = -1;
seqRxMsbImag(imag(seqRxDown)>0) = 1;
seqRxMsbImag(imag(seqRxDown)<0) = -1;
% 符号累积
seqRxAccum = zeros(chipLen,channelNum);
for i = 0:chipLen-1
% PN 码圆周移位,遍历所有 PN 码相位
PRBS7_cshift = circshift(repmat(PRBS7_polar(1:32),symbolNum*4,1),-i); % 负号为了和 Verilog 程序对应
% 累积,若当前比特与 PN 码相同,结果 +1;否则结果 -1
seqRxAccum(i+1,:) = sum(seqRxDown(PRBS7_cshift==seqRxMsbReal))-...
sum(seqRxDown(PRBS7_cshift~=seqRxMsbReal));
end
% % 通过相关峰位置判断目标信号位置
% maxPeakIndex = zeros(2,interp);
%
% for i = 1:2
% for j = 1:interp
% maxPeakIndex(i,j) = find(abs(seqRxMsbAccum(:,i,j))==max(abs(seqRxMsbAccum(:,i,j))),1); % PN 码相位
% end
% end
%
% maxPeakIndexDiff = zeros(channelNum,1); % 相位差
%
% for i = 1:channelNum
% for j = 1:interp
% if (maxPeakIndex(i,j)==maxPeakIndex(i,1))
% maxPeakIndexDiff(i) = j;
% end
% end
% end
%
% % 以下条件仅对双通道有效
% if (maxPeakIndex(1,1) == maxPeakIndex(2,1))
% relativeDelay = maxPeakIndexDiff(2) - maxPeakIndexDiff(1);
% desiredPointIndex = [1,1]+[0,chipLen];
% elseif (mod(maxPeakIndex(1,1)-1,chipLen) == mod(maxPeakIndex(2,1),chipLen))
% relativeDelay = maxPeakIndexDiff(2) - maxPeakIndexDiff(1) + interp;
% desiredPointIndex = [1,2]+[0,chipLen];
% elseif (mod(maxPeakIndex(1,1)+1,chipLen) == mod(maxPeakIndex(2,1),chipLen))
% relativeDelay = maxPeakIndexDiff(2) - maxPeakIndexDiff(1) - interp;
% desiredPointIndex = [2,1]+[0,chipLen];
% end
%
% % 输入信号累加
% seqRxDownAccum = squeeze(sum(reshape(seqRxDown(:,:,1),128,[],2),2));
% % 取目标位置信号
% desiredPoint = seqRxDownAccum(desiredPointIndex);
%
% ampEst = abs(desiredPoint)./abs(desiredPoint(1));
% angleEst = (angle(desiredPoint) - angle(desiredPoint(1)))/pi*180;