5G NR PSS信号生成

5G NR PSS信号生成


PSS的生成会用到几个概念,先介绍如下。

IQ调制

一个简化的发送端基带信号处理流程大概是下面这样的。
在这里插入图片描述
(在IFFT前后应该分别有串并转换和并串转换操作)
这里的Modulation部分一般就都是通过IQ调制完成的。
IQ调制是一种调制方式,通过这种方式可以实现PSK,QAM等各种调制方式。在通信系统中,对于需要发送的数据,首先需要按照对应的调制方式将输入数据分解到IQ分支上。
比如,如果使用的是16QAM,它的星座图是这样的:
在这里插入图片描述
那么输入数据就会4个一组,按照星座图的方式分别映射到I轴和Q轴。因为IQ默认是90度关系,所以只要知道I轴和Q轴的值就能够复原表示原来4位数据的向量,也就能知道原来的4位原始数据。原始数据与IQ值的对应关系如下:
在这里插入图片描述
把生成的IQ信号表示成复数的形式:I+jQ,然后再取N个复数做IFFT,对IFFT的结果取实部就得到一个OFDM符号在时域的采样点。其中N是当前带宽可用的子载波数。

OFDM过程

可以这么理解,对于单个子载波,IQ调制的过程是这样的:
在这里插入图片描述
其中a,b就是单个子载波对应的IQ信号。
而对于OFDM符号,它在时域上是多个频率信号的叠加,它的公式如下:
x ( t ) = ∑ k = − N / 2 N / 2 − 1 X [ k ] e j 2 π k t / N x(t)=\sum_{k=-N/2}^{N/2-1}X[k]e^{j2\pi kt/N} x(t)=k=N/2N/21X[k]e

  • 4
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
5G NR PSS(Primary Synchronization Signal)是5G NR同步信号的一种,用于UE搜索和同步5G NR基站。下面是5G NR PSS信号生成的步骤: 1. 生成PSS序列PSS序列是由两个长度为31的m序列(m0和m1)通过加权和得到的。加权和的公式为:s(n)=(-1)^m0(n)+j*(-1)^m1(n),其n为序列的下标,j为虚数单位。 2. 生成IQ调制信号:将PSS序列映射到IQ调制信号上,得到复数序列s(n)=[I(n),Q(n)]。其,I(n)和Q(n)分别为实部和虚部。 3. 进行OFDM调制:将IQ调制信号进行OFDM调制,得到时域信号s(n)。OFDM调制过程包括将IQ调制信号进行IDFT变换、添加循环前缀、并将信号映射到子载波上。 4. 将PSS信号插入到物理资源块(PRB):将PSS信号插入到物理资源块(PRB),得到PSS信号的时频资源图。 5. 将PSS信号映射到子帧上:将PSS信号映射到子帧上,得到PSS信号的时域波形。 下面是Python代码示例: ```python import numpy as np # 生成m序列 def m_sequence(n, c_init): c = np.zeros(n) c[0] = 1 for i in range(1, n): c[i] = c[i-1] if c_init == 0 else (-1)*c[i-1] return c # 生成PSS序列 def pss_sequence(): m0 = m_sequence(31, 0) m1 = m_sequence(31, 1) s = np.zeros(62, dtype=complex) for i in range(31): s[i] = (-1)**m0[i] + 1j*(-1)**m1[i] s[i+31] = (-1)**m1[i] + 1j*(-1)**m0[i] return s # 生成IQ调制信号 def iq_modulation(s): n = len(s) I = np.real(s) Q = np.imag(s) return np.vstack((I, Q)).reshape(2*n, order='F') # 进行OFDM调制 def ofdm_modulation(s, Nfft, Ncp): n = len(s) s_ifft = np.fft.ifft(s, Nfft) s_cp = np.hstack((s_ifft[-Ncp:], s_ifft)) s_ofdm = np.zeros(Nfft, dtype=complex) s_ofdm[::2] = s_cp[:n//2] s_ofdm[1::2] = s_cp[n//2:] return s_ofdm # 将PSS信号插入到物理资源块(PRB) def insert_pss_to_prb(pss, prb_idx, Nrb): Nprb = len(prb_idx) Nsymb = 14 Nfft = 2048 Ncp = 160 s_prb = np.zeros((Nprb, Nsymb, Nfft), dtype=complex) for i in range(Nprb): for j in range(Nsymb): s_prb[i, j, :] = ofdm_modulation(pss, Nfft, Ncp) s_prb_all = np.zeros((Nrb, Nsymb, Nfft), dtype=complex) s_prb_all[prb_idx, :, :] = s_prb return s_prb_all # 将PSS信号映射到子帧上 def map_pss_to_subframe(s_prb_all): Nsymb = 14 Nfft = 2048 Ncp = 160 s_subframe = np.zeros((Nsymb*Nfft+2*Ncp), dtype=complex) for i in range(Nsymb): for j in range(len(s_prb_all)): s_subframe[i*Nfft+j*Nfft*Nsymb:i*Nfft+(j+1)*Nfft*Nsymb] = s_prb_all[j, i, :] return s_subframe # 生成PSS信号 def generate_pss(prb_idx, Nrb): pss = pss_sequence() s_prb_all = insert_pss_to_prb(pss, prb_idx, Nrb) s_subframe = map_pss_to_subframe(s_prb_all) return s_subframe ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值