ZC序列理论学习及仿真(三)

简介: ZC序列理论学习及仿真

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|u1u2 互质,则互相关函数 ∣ 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|u1u2 有最大公约数 δ ≠ \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}|=

{δN0n=kδnkδ{���=��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|q1q2N 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/110.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 序列峰均比较低,从而有利于射频功放信号发挥最大的效率。

参考文献:5GNR漫谈13:Zadoff –Chu(ZC)序列性质

目录
相关文章
|
17天前
|
机器学习/深度学习 移动开发 JavaScript
ZC序列理论学习及仿真(一)
ZC序列理论学习及仿真
216 0
|
17天前
|
算法
【MATLAB】逐次变分模态分解SVMD信号分解算法
【MATLAB】逐次变分模态分解SVMD信号分解算法
165 0
|
11月前
|
机器学习/深度学习 算法
【MATLAB第34期】 MATLAB 2023年棕熊算法 BOA-LSTM时间序列预测模型 #含预测未来功能,以及优化结构层数及单双向类型 研究工作量丰富且新颖
【MATLAB第34期】 MATLAB 2023年棕熊算法 BOA-LSTM时间序列预测模型 #含预测未来功能,以及优化结构层数及单双向类型 研究工作量丰富且新颖
|
17天前
ZC序列理论学习及仿真(二)
ZC序列理论学习及仿真
67 0
|
11月前
构建直接序列扩频系统模型(Matlab代码实现)
构建直接序列扩频系统模型(Matlab代码实现)
200 0
|
17天前
|
数据采集 算法 前端开发
【MATLAB】 稳健的经验模式分解REMD信号分解算法
【MATLAB】 稳健的经验模式分解REMD信号分解算法
73 0
|
17天前
|
机器学习/深度学习 算法
【MATLAB】 多元变分模态分解MVMD信号分解算法
【MATLAB】 多元变分模态分解MVMD信号分解算法
172 0
|
10月前
|
存储 算法 调度
Matlab+Yalmip两阶段鲁棒优化通用编程指南
主要包含8大内容: ①.拿到一个复杂的两阶段鲁棒优化问题的分析步骤和方法。 ②.采用Yalmip工具箱中的uncertain函数和鲁棒优化模块求解两阶段鲁棒优化的子问题。 ③.Yalmip工具箱中的鲁棒优化模块和常规的求解思路有什么异同。 ④.使用KKT条件求解两阶段鲁棒优化的子问题。 ⑤.使用对偶变换求解两阶段鲁棒优化的子问题。 ⑥.采用Yalmip工具箱的内置函数,将线性约束写成紧凑矩阵形式的方法。 ⑦.矩阵形式的两阶段鲁棒优化问题,如何快速写出子问题内层优化的KKT条件。 ⑧.矩阵形式的两阶段鲁棒优化问题,如何快速写出子问题内层优化的对偶问题。
|
11月前
双层优化入门(1)—基本原理与求解方法(附matlab代码)
双层优化问题(Bilevel Programming Problems),也被称为双层规划,最早由Stackelberg与1934年在经济学相关研究中提出,因此也被称为Stackelberg问题。双层规划问题一般具有层次性、独立性、冲突性、优先性和自主性等特点。 本文介绍了双层优化的原理与求解方法,并提供了相应的matlab代码供参考学习。
|
11月前
|
机器学习/深度学习 算法 Python
【CEEMDAN-VMD-GRU】完备集合经验模态分解-变分模态分解-门控循环单元预测研究(Python代码实现)
【CEEMDAN-VMD-GRU】完备集合经验模态分解-变分模态分解-门控循环单元预测研究(Python代码实现)
184 0