Archived
revise dl814_dj_48m
the data counter of module tx_pn_seq was mod-32, now modified to mod-128 to cover the whole pn cycle
This commit is contained in:
|
Can't render this file because it is too large.
|
|
Can't render this file because it is too large.
|
|
Can't render this file because it is too large.
|
|
Can't render this file because it is too large.
|
@@ -0,0 +1,90 @@
|
||||
%% 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;
|
||||
Reference in New Issue
Block a user