ZC序列理论学习及仿真(二)https://developer.aliyun.com/article/1472382
5、ZC 序列循环互相关
如果不同根产生的 ZC 序列进行相关运算会发生什么情况呢?下面我们构造两个根为 11 和 7 并且长度 N = 67 的 ZC 序列。
seq1 = zadoffChuSeq(11,67); seq2 = zadoffChuSeq(7,67); corr = fftshift(fft(seq1)) .* conj(fftshift(fft(seq2))); figure; plot(abs(ifft(ifftshift(corr)))); xlabel('滞后索引'); ylabel('自相关'); title('ZC序列互相关');
两个不同根序列相关运算后的结果如下图:
N=67,u1=11,u2=7, ZC序列互相关函数
因此可得结论:若 N NN 与 ∣ u 1 − u 2 ∣ |u_1-u_2|∣u1−u2∣ 互质,则互相关函数 ∣ R u 1 u 2 ∣ = N |R_{u_1u_2}|=\sqrt{N}∣Ru1u2∣=N
我们从图上看出,对于不同根的序列再进行相关运算之后,不会产生像上面相同根的序列那样会产生又高又细的相关峰。
下面我们再构造两个根为 17 和 8 并且长度 N = 63 的 ZC 序列。
seq1 = zadoffChuSeq(17,63); seq2 = zadoffChuSeq(8,63); corr = fftshift(fft(seq1)) .* conj(fftshift(fft(seq2))); figure; plot(abs(ifft(ifftshift(corr)))); xlabel('滞后索引'); ylabel('自相关'); title('ZC序列互相关');
两个不同根序列相关运算后的结果如下图:
N=63,u1=17,u2=8, ZC序列互相关函数
因此可得结论:若 N 为奇数,假设 N NN 与 ∣ u 1 − u 2 ∣ |u_1-u_2|∣u1−u2∣ 有最大公约数 δ ≠ \delta \neqδ=,则互相关函数 ∣ R u 1 u 2 = δ N ∣ |R_{u_1u_2}=\sqrt{\delta N}|∣Ru1u2=δN∣
∣ R u 1 u 2 ∣ = { δ N n = k δ 0 n ≠ k δ , k = 1 , 2 , . . . , N δ |R_{u_1u_2}|=
{δN−−−√0n=kδn≠kδ{���=��0�≠��
,k=1,2,...,\frac{N}{\delta}∣Ru1u2∣={δN0n=kδn=kδ,k=1,2,...,δN
上面我们说过:对相同长度的两个 ZC 序列,即一个序列的 root index 为 q 1 q_1q1,另一个序列的 root index 为 q 2 q_2q2,且 q 1 ≠ q 2 q_1\neq q_2q1=q2,那么两个序列的归一化循环互相关值正好等于 1 / N z c 1/\sqrt{N_{zc}}1/Nzc,这里一般假设 N z c N_{zc}Nzc 是质数,或者更一般地,认为 ∣ q 1 − q 2 ∣ |q_1-q_2|∣q1−q2∣ 与 N z c N_{zc}Nzc 互质。
这里我们进行仿真证明一下:
tmp = []; for i = 1: 10 for j = (i+1) : 10 if i < j Seqi = zadoffChuSeq(i,11); Seqj = zadoffChuSeq(j,11); cross_corr = abs(dot(Seqi, Seqj))/11; tmp = [tmp, cross_corr]; end end end figure; stem(tmp);
仿真图如下:
验证了我们上面所说的结论:两个序列的归一化循环互相关值正好等于 1 / N z c = 1 / 11 ≈ 0.3015 1/\sqrt{N_{zc}}=1/\sqrt{11}\approx0.30151/Nzc=1/11≈0.3015
6、ZC 序列傅里叶变换
这里介绍一下对 ZC 序列做完傅里叶变换后,再去分析复平面散点图及循环自相关特性
seq1 = zadoffChuSeq(25,139); fft_seq1 = fft(seq1); figure; scatter(real(fft_seq1), imag(fft_seq1)); xlabel('实部'); ylabel('虚部'); title('ZC序列fft后复平面表示'); corr = fftshift(fft(fft_seq1)) .* conj(fftshift(fft(fft_seq1))); figure; plot(abs(ifft(ifftshift(corr)))); xlabel('滞后索引'); ylabel('循环自相关'); title('ZC序列fft后自相关'); fft_seq2 = circshift(fft_seq1, 10); % 右移 corr = fftshift(fft(fft_seq2)) .* conj(fftshift(fft(fft_seq1))); figure; plot(abs(ifft(ifftshift(corr)))); xlabel('滞后索引'); ylabel('循环自相关'); title('ZC序列fft后循环自相关');
仿真结果如下:
从上图仿真可以看出,结果显而易见,经过傅里叶变换之后的序列仍然具有同样的特性。
7、ZC 序列低峰均比特性
seq_lengths = 1:500:9999; % 不同的序列长度 % 存储实部和虚部的峰均比值 real_part_PAPR_values = zeros(1, numel(seq_lengths)); imaginary_part_PAPR_values = zeros(1, numel(seq_lengths)); for i = 1:numel(seq_lengths) seq1 = zadoffChuSeq(1, seq_lengths(i)); % 生成不同长度的ZC序列 % 计算实部的峰值功率和均值功率 real_part = real(seq1); real_part_peak_power = max(abs(real_part))^2; real_part_average_power = mean(abs(real_part))^2; % 计算虚部的峰值功率和均值功率 imaginary_part = imag(seq1); imaginary_part_peak_power = max(abs(imaginary_part))^2; imaginary_part_average_power = mean(abs(imaginary_part))^2; % 计算实部和虚部的峰均比 real_part_PAPR = 10 * log10(real_part_peak_power / real_part_average_power); imaginary_part_PAPR = 10 * log10(imaginary_part_peak_power / imaginary_part_average_power); real_part_PAPR_values(i) = real_part_PAPR; % 存储实部的峰均比值 imaginary_part_PAPR_values(i) = imaginary_part_PAPR; % 存储虚部的峰均比值 end % 绘制实部峰均比图 subplot(2, 1, 1); plot(seq_lengths, real_part_PAPR_values, '-o'); xlabel('序列长度'); ylabel('峰均比(dB)'); title('ZC序列实部峰均比'); grid on; % 绘制虚部峰均比图 subplot(2, 1, 2); plot(seq_lengths, imaginary_part_PAPR_values, '-o'); xlabel('序列长度'); ylabel('峰均比(dB)'); title('ZC序列虚部峰均比'); grid on;
仿真结果如下:
可以看到,ZC 序列峰均比较低,从而有利于射频功放信号发挥最大的效率。