千家信息网

如何用Python理解用于信号同步的CAZAC序列

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要讲解了"如何用Python理解用于信号同步的CAZAC序列",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何用Python理解用于信号同步
千家信息网最后更新 2025年01月20日如何用Python理解用于信号同步的CAZAC序列

这篇文章主要讲解了"如何用Python理解用于信号同步的CAZAC序列",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何用Python理解用于信号同步的CAZAC序列"吧!在无线通信系统中同步是非常关键的一个过程,这对信号正确的传输有着非常的重要意义。通常,我们常用CAZAC序列(Const Amplitude Zero Auto-Corelation)进行帧同步,CAZAC序列全称恒包络零自相关序列。它主要包括有ZC序列、Frank序列、Golomb多相序列和Chirp序列等。因为其有很好的自相关特性,广泛用于无线通信领域,雷达、CDMA、LTE、5G NR等需要进行信号同步的通信方式。

下面我们以ZC序列为例,利用Python画图来直观的理解这种序列。

ZC序列全称是Zadoff Chu序列,由于其是由Zadoff和Chu提出,所以便由他们的名字来命名,它可以用下面的公式来表示:

式中的u就是它的根。

根据ZC序列的公式,我们就可以方便的画出ZC序列的图形,话不多说,直接撸代码。

u = 1 N = 128 n = np.arange(N) x = np.exp(-1j * np.pi*u*n*(n+1)/(N-1)) plt.subplot(2,1,1) plt.plot(np.real(x)) plt.subplot(2,1,2) plt.plot(np.imag(x)) plt.show()

这里序列根取1,N取128,如下图是它的时域图形,是不是觉得上面的图形看上去似乎有一些规则性。

ZC序列

那么,它特别的地方在哪里呀?我们可以换个角度来看这个序列,下面我们在用复数坐标系上把这个序列画出来看看是什么样子。

u = 1 N = 128 n = np.arange(N) x = np.exp(-1j * np.pi*u*n*(n+1)/(N-1)) plt.scatter(np.real(x), np.imag(x)) plt.show()

图中横坐标为实部I,纵坐标为虚部Q,从图中我们可以看出序列在复平面上是一个圆,也就是说其幅值是恒定的。

复数坐标系下的ZC序列

从序列的公式上看它是一个以e为底的复指数函数,所以大家可以根据之前的文章《谈谈欧拉公式与复指数信号》来理解。

如果把两个序列进行相关运算会发生什么情况呢?关于相关运算实际上就是卷积运算,为了方便计算我们先将序列转到频域进行计算,因为对于时域上卷积运算实际就是频域上相乘,如下卷积计算公式:

将时域进行傅立叶变换:

整理公式得:

推导总是一堆让人头大的公式,不过早就有大佬帮我们总结好了,这里大家需要记住卷积定理即可。

时域卷积定理即时域内的卷积对应频域内的乘积;频域卷积定理即频域内的卷积对应时域内的乘积。

我们继续看下面的代码,我们先将序列向右循环移位10位生成一个新的序列,然后,再用移位后的序列和原序列进行相关运算。

u = 1 N = 128 n = np.arange(N) x = np.exp(-1j * np.pi*u*n*(n+1)/(N-1)) corr = np.fft.fftshift(np.fft.fft(x)) * np.conj(np.fft.fftshift(np.fft.fft(x))) plt.subplot(2,1,1) plt.plot(np.abs(np.fft.ifftshift(np.fft.ifft(corr))))  x_r = np.roll(x, 10) #右移 corr = np.fft.fftshift(np.fft.fft(x_r)) * np.conj(np.fft.fftshift(np.fft.fft(x))) plt.subplot(2,1,2) plt.plot(np.abs(np.fft.ifftshift(np.fft.ifft(corr)))) plt.show()

从下面的图中可以发现,在做完相关运算之后会产生一个相关峰,而且相关峰的值非常的大,它的能量较为集中有较好的抗噪能力,除了相关峰外其他位置的相关值都为0或接近于0。而且,经过移位后的序列和原序列进行相关运算之后,相干峰的位置也会向右偏移10位。由于这种相关特性,这里大家也应该清楚了为什么说可以使用这种序列进行帧同步了。

相关运算

如果序列经过傅立叶变换之后,序列的特性又会是什么样呢?

u = 1 N = 128 n = np.arange(N) x = np.exp(-1j * np.pi*u*n*(n+1)/(N-1)) fft_shift = np.fft.fft(x) plt.subplot(2,2,1) plt.plot(np.real(fft_shift)) plt.subplot(2,2,2) plt.plot(np.imag(fft_shift)) plt.subplot(2,2,3) plt.scatter(np.real(fft_shift), np.imag(fft_shift))  fft_shift_r = np.roll(fft_shift, 10) #右移 corr = np.fft.fftshift(np.fft.fft(fft_shift_r)) * np.conj(np.fft.fftshift(np.fft.fft(fft_shift))) plt.subplot(2,2,4) plt.plot(np.abs(np.fft.ifftshift(np.fft.ifft(corr)))) plt.show()

从下图可以看出,结果显而易见,经过傅立叶变换之后的序列仍然具有同样的特性。

傅立叶变换

如果不同根产生的ZC序列进行相关运算会发生什么情况呢?下面我们构造两个根为1和2的ZC序列。

u1 = 1 u2 = 2 N = 128 n = np.arange(N) x1 = np.exp(-1j * np.pi*u1*n*(n+1)/(N-1)) x2 = np.exp(-1j * np.pi*u2*n*(n+1)/(N-1))  corr = np.fft.fftshift(np.fft.fft(x2)) * np.conj(np.fft.fftshift(np.fft.fft(x1))) plt.plot(np.abs(np.abs(np.fft.ifftshift(np.fft.ifft(corr))))) plt.show()

两个不同根序列相关运算后的结果如下图:

不同根序列相关运算

我们从图上看出,对于不同根的序列再进行相关运算之后,不会产生像上面相同根的序列那样会产生又高又细的相关峰。

感谢各位的阅读,以上就是"如何用Python理解用于信号同步的CAZAC序列"的内容了,经过本文的学习后,相信大家对如何用Python理解用于信号同步的CAZAC序列这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

序列 运算 同步 信号 公式 卷积 时域 不同 就是 面的 傅立叶 变换 两个 图形 定理 情况 特性 图中 学习 通信 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 专业的计算机软件开发怎么收费 网络安全工作会议的讲话 计算机三级网络技术协议 vc实现汽车保养数据库 牡丹江招聘软件开发 婚前婚后小说软件开发 城镇地籍调查数据库每张表 未来软件开发趋势 河北珑皓互联网科技有限公司 嵌入式软件开发主要干什么 网络安全比赛报名 网络安全及诈骗班会主题 路由器怎么设置虚拟服务器 高清点播服务器服务最那个地方 邮箱服务器验证失败啥意思 法治新时代网络安全 江西最出名的服务器虚拟主机 同时打开微信数据库 网络安全大赛的电视剧有哪些 成都早餐店扫码点餐软件开发 宁海网络技术有限公司 无锡通信网络技术收费标准 数据库领域的发展现状 网络安全模式桌面崩溃 科技服务包括利用高校数据库 华为的软件开发云产品经理 西奥电梯服务器确认键 虚拟运营商服务器图片 mysql 数据库目录 国企软件开发怎么样
0