不同板卡间的同步序列出峰问题
简述
使用两块不同板卡,对前导ZC序列一收一发,在接收板上做本地相关,结果显示相关性恶化,目前推测为射频滤波器问题。
异常情况
目前有一套FMQL45T900+CX9261s的板卡,运行OFDM波形进行灵敏度测试。由于只有一套,且收发隔离度仅有约50dB,导致无法在自回环的情况下进行测试,在此情况下,使用另一套ZYNQ7035+AD9361的板卡进行发送,FMQL板卡进行接收。
测试中发现FMQL板卡在同步模块未正确同步到发送的前导序列,该发送帧丢失导致后续的接收处理不运行。
但在ZYNQ板卡或FMQL板卡上进行自收自发皆能正确同步到序列的位置。
在帧设计中,前导有4段64长度的ZC序列(由67长度的ZC序列截取得到)进行帧同步,理想情况下会出现4个同步峰,如图1所示:
图1 理想情况下同步峰情况
通过ila截取一帧长度的数据,查看其前导位置,存在4*64长度的前导序列,如图2所示:
图2 接收到的前导序列
对该接收信号进行处理,得到同步情况的如图3所示,可见仅出现了3个同步峰,且同步峰位置延迟了32位。
图3 接收序列的相关情况
测试验证
使用一套9361板卡发送,一套9361板卡与一套9261板卡接收,使用三通头连接,ila同时触发,接收到的前导信号如图4所示(位宽不同,进行了归一化):
图4 不同板卡接收前导
两个接收信号与本地序列的相关如图5所示:
图5 (a) AD9361接收信号与本地相关
图5 (b) CX9261S接收信号与本地相关
可能是板卡的滤波器配置原因导致的相关峰问题。
对9361和9261的接收前导分别做FFT,并查看从9361接收信号变换至9261接收信号的幅度与相位响应,同时对两边的接收FIR滤波器做相同的处理,查看响应是否一致,如图6所示:
图6 接收信号变换的幅频响应与滤波器变换的幅频响应
除FIR滤波器外,可能前级HBF滤波器也有影响,仍需要验证。但暂无9261s的HBF滤波器系数,后续再验证。
更新1-插值与抽取倍数互质
目前的AD9361使用16倍插值和16倍抽取,CX9261S使用16倍插值和4倍抽取,求助后得知收发芯片中插值倍数和抽取倍数最好保持互质,否则会造成频谱混叠的情况。修改9261S的抽取倍数为3倍测试,序列的相关情况如图7所示。
图7 修改9261S抽取倍数后的相关情况
图7中可见序列出峰虽然不明显,但是峰值间隔由64变为48,降为原先的3/4;虽然插值抽、取倍的数互质后情况恶化,但应该能说明该现象和前端的HBF滤波器有关。
更新2-插值抽取仿真与相关
在无9261s的HBF系数情况下,对插值和抽取进行仿真,查看各级频谱如图8所示,和原序列做相关如图9所示:
图8 序列各级插值和抽取仿真频谱
图9 序列各级插值和抽取仿真相关
从图8可见带内频谱与上采样基本一致;从图9可见相关性仍保持良好,但未做抽取时,相关结果与测试情况有些类似,可能与该方面相关,还需验证。
代码如下,在做相关时为了出峰间隔将序列4倍周期化,画频谱时直接使其等于64位本地序列。
local_pream = local;
% local_pream = repmat(local,1,4);
DAC_fs = fs*16;
ADC_fs = fs*4;
tx_fir = AD9361_tx_fir./2^16;
HB1 = [-53 0 313 0 -1155 0 4989 8192 4989 0 -1155 0 313 0 -53]./2^13;
HB2 = [-9 0 73 128 73 0 9]./2^7;
HB3 = [1 2 1]./2;
local_up2 = resample(local_pream,2,1,tx_fir);
local_up4 = resample(local_up2,2,1,HB1);
local_up8 = resample(local_up4,2,1,HB2);
local_up16 = resample(local_up8,2,1,HB3);
tx_length = length(local_up16);
T_tx = (1:tx_length)./DAC_fs;
T_rx = 1/ADC_fs:1/ADC_fs:T_tx(end);
rx_idx = 1:4:tx_length;
rx_local = local_up16(rx_idx);
rx_local_down2 = resample(rx_local,1,2);
rx_local_down4 = resample(rx_local_down2,1,2,CX9261_rx_fir(1:64));
local_length = length(local_pream);
local_index = (-local_length/2:local_length/2-1)/local_length*fs;
local_am = abs(fftshift(fft(local_pream)));
tiledlayout(2,2, 'TileSpacing', 'compact', 'Padding', 'compact');
nexttile;
plot(local_index,local_am);
title('原始序列幅度谱');
local_up16_length = length(local_up16);
local_up16_index = (-local_up16_length/2:local_up16_length/2-1)/local_up16_length*fs*16;
local_up16_am = abs(fftshift(fft(local_up16)));
nexttile;
plot(local_up16_index,local_up16_am);
xlim([-fs/2 fs/2]);
title('上采样16倍的ADC发送序列幅度谱');
rx_local_length = length(rx_local);
rx_local_index = (-rx_local_length/2:rx_local_length/2-1)/rx_local_length*fs*4;
rx_local_am = abs(fftshift(fft(rx_local)));
nexttile;
plot(rx_local_index,rx_local_am);
xlim([-fs/2 fs/2]);
title('DAC接收序列幅度谱');
rx_local_down4_length = length(rx_local_down4);
rx_local_down4_index = (-rx_local_down4_length/2:rx_local_down4_length/2-1)/rx_local_down4_length*fs;
rx_local_down4_am = abs(fftshift(fft(rx_local_down4)));
nexttile;
plot(rx_local_down4_index,rx_local_down4_am);
xlim([-fs/2 fs/2]);
title('DAC下采样后序列幅度谱');
figure;
tiledlayout(2,2, 'TileSpacing', 'compact', 'Padding', 'compact');
nexttile;
[local_val,local_lag] = xcorr(local_pream,local);
plot(local_lag,abs(local_val));
title('原序列相关');
nexttile;
[local_up16_val,local_up16_lag] = xcorr(local_up16,local);
plot(local_up16_lag,abs(local_up16_val));
title('原序列上采样16倍后相关');
nexttile;
[rx_local_val,rx_local_lag] = xcorr(rx_local,local);
plot(rx_local_lag,abs(rx_local_val));
title('接收序列相关');
nexttile;
[rx_local_down4_val,rx_local_down4_lag] = xcorr(rx_local_down4,local);
plot(rx_local_down4_lag,abs(rx_local_down4_val));
title('接收序列下采样4倍后相关');
仿真验证发送使用16倍上采样,接收使用3倍降采样的情况。对中间的信号进行3/16采样实现后,再在基带进行3倍下采样。
图10 接收端3倍下采样结果
从图10可见对频谱和峰值并无明显影响,不能说明图7的测试现象,还存在其它原因需要查找。
更新3 仿真与实际接收序列波形对比
对比9361仿真的发送、接收与实际接收序列的时域波形如图11所示,幅频、相频谱如图12所示:
图11 仿真与9361接收序列时域波形
图12 仿真与9361接收序列频域波形
图13 仿真和9361接收序列的相位差值
从图13中可见,相位的变化主要是由群延时造成的,因此可以认为仿真结果与实际接收结果相似。
% local_pream = local;
local_pream = repmat(local,1,4);
DAC_fs = fs*16;
ADC_fs = fs*4;
tx_fir = AD9361_tx_fir./2^16;
HB1 = [-53 0 313 0 -1155 0 4989 8192 4989 0 -1155 0 313 0 -53]./2^13;
HB2 = [-9 0 73 128 73 0 9]./2^7;
HB3 = [1 2 1]./2;
local_up2 = resample(local_pream,2,1,tx_fir);
local_up4 = resample(local_up2,2,1,HB1);
local_up8 = resample(local_up4,2,1,HB2);
local_up16 = resample(local_up8,2,1,HB3);
rx_fir = AD9361_rx_fir./2^16;
rx_HB1 = [-8 0 42 0 -147 0 619 1013 619 0 -147 0 42 0 -8]./2^11;
rx_HB2 = [-9 0 73 128 73 0 9]./2^8;
rx_HB3 = [1 4 6 4 1]./2^4;
local_HB3 = resample(local_up16,1,2,rx_HB3);
local_HB2 = resample(local_HB3,1,2,rx_HB2);
local_HB1 = resample(local_HB2,1,2,rx_HB1);
local_rx = resample(local_HB1,1,2,rx_fir);
tiledlayout(3,2, 'TileSpacing', 'compact', 'Padding', 'compact');
nexttile;
plot(real(local_pream));
title('仿真发送的序列实部');
nexttile;
plot(imag(local_pream));
title('仿真发送的序列虚部');
nexttile;
plot(real(local_rx));
title('仿真接收的序列实部');
nexttile;
plot(imag(local_rx));
title('仿真接收的序列虚部');
nexttile;
plot(imag(msg_zynq1(frame_start_local:frame_start_local+64*4-1)));
title('实际接收的序列实部');
nexttile;
plot(imag(msg_zynq1(frame_start_local:frame_start_local+64*4-1)));
title('实际接收的序列虚部');
local_rx_fft = fftshift(fft(local_rx(1:64)));
msg_zynq1_fft = fftshift(fft(msg_zynq1(frame_start_local:frame_start_local + 64 -1)));
fft_length = 64;
f = (-fft_length/2 : fft_length/2-1)/fft_length*fs;
tiledlayout(2,2, 'TileSpacing', 'compact', 'Padding', 'compact');
nexttile;
plot(f,10*log10(abs(local_rx_fft)));
title('仿真接收序列幅频谱');
nexttile;
plot(f,angle(local_rx_fft)./pi);
title('仿真接收序列相频谱');
nexttile;
plot(f,10*log10(abs(msg_zynq1_fft)));
title('实际接收序列幅频谱');
nexttile;
plot(f,angle(msg_zynq1_fft)./pi);
title('实际接收序列相频谱');
angle_diff = (angle(msg_zynq1_fft) - angle(local_rx_fft))./pi;
%化到(-pi,pi)区间内,并对异常值进行处理
angle_diff(angle_diff >= 1) = angle_diff(angle_diff >= 1) - 1;
angle_diff(angle_diff <= -1) = angle_diff(angle_diff <= -1) + 1;
angle_diff([11 15 20 24 26 27 49]) = angle_diff([11 15 20 24 26 27 49]) - 1;
angle_diff([32 34 42]) = angle_diff([32 34 42]) + 1;
figure;
plot(angle_diff);
title('仿真和实际接收的相位差值');
对9261接收的数据做相同的处理,其幅频谱、相频谱如图14所示,相位差值如图15所示.
图14 仿真与9261S接收序列频域波形
图15 9261S接收序列相位差
从图14、15中可见9261S接收的幅度谱与仿真相似,但群时延非常数,造成了相关性恶化的问题,还需要具体探查是何原因造成的。
图13、图15对比的是实际接收信号与仿真接收信号的相位差,与发送信号的相位差如图16所示:
图16 发送序列与接收信号的相位差
从图16中可见,理想发送序列与AD9361的接收群时延为常数,与CX9261S的接收群时延非常数。
使用CX9261S自回环收序列的频域波形、与发送序列的相位差如图17、18所示。
图17 仿真序列频域波形与CX9261S自回环收序列频域波形
图18 CX9261S自回环收序列与发送序列相位差
从图18中可见,CX9261S自发自收的群延时为常数,因此序列可以有良好的相关性。

浙公网安备 33010602011771号