• OFDM信号的时移特性(非整数采样点时移)


    一、前言

    在《利用DFT/FFT对序列位移—非整数时的陷阱》中,我们得出结论:当存在频谱泄露或频谱折叠时,无法利用FFT实现“非整数采样点”的时域序列位移。
    幸运的是,对于OFDM信号,利用“其有效符号部分的子载波正交性”和“循环前缀”能够实现“精准”的非整数点时移,本文将阐述具体的方法。

    二、OFDM信号模型

    不妨将基带OFDM信号中第 l l l个符号记为 x l ( t ) x_l(t) xl(t),则有,
    x l ( t ) = ∑ k = 0 K − 1 s l , k e j 2 π k t T u , 0 ≤ t ≤ T g + T u x_l(t)=\sum_{k=0}^{K-1} s_{l,k}e^{\frac{j2\pi kt}{T_u}}, 0 \leq t \leq T_g+T_u xl(t)=k=0K1sl,keTuj2πkt,0tTg+Tu
    其中, l l l为符号索引, K K K为子载波总数, k k k为子载波索引; s l , k s_{l,k} sl,k为第 l l l个符号中第 k k k个子载波所携带的通信数据; T g T_g Tg为循环前缀持续时间, T u T_u Tu为有效符号部分的持续时间。显然, 0 ≤ t ≤ T g 0 \leq t \leq T_g 0tTg T u ≤ t ≤ T u + T g T_u \leq t \leq T_u + T_g TutTu+Tg对应的时域波形相同,故将 0 ≤ t ≤ T g 0 \leq t \leq T_g 0tTg对应的时域波形称之为“循环前缀”。
    值得注意的是,由于循环前缀的存在,从 x l ( t ) x_l(t) xl(t)中任取长度为 T u T_u Tu的时域波形 x ^ l ( t ) \hat{x}_l(t) x^l(t),则 x ^ l ( t ) \hat{x}_l(t) x^l(t)中各个子载波仍然满足“正交性”,即不会产生频谱泄露。

    三、OFDM信号的非整数点时移

    采样 f s f_s fs x l ( t ) x_l(t) xl(t)进行采样,满足 n = t f s ∈ Z n = tf_s \in \mathbb{Z} n=tfsZ,则有,
    x l [ n ] = x l ( n / f s ) = ∑ k = 0 K − 1 s l , k e j 2 π k n N u , 0 ≤ t ≤ N g + N u − 1

    xl[n]=xl(n/fs)=k=0K1sl,kej2πknNu,0tNg+Nu1" role="presentation">xl[n]=xl(n/fs)=k=0K1sl,kej2πknNu,0tNg+Nu1
    xl[n]=xl(n/fs)=k=0K1sl,keNuj2πkn,0tNg+Nu1
    其中, N u = T u f s , N g = T g f s N_u = T_u f_s,N_g=T_g f_s Nu=Tufs,Ng=Tgfs。假设我们需要对 x l [ n ] x_l[n] xl[n]进行 n 0 n_0 n0点的位移,满足 n 0 = n i n t + n d e c n_0 = n_{int} + n_{dec} n0=nint+ndec;其中, n i n t ∈ Z , n d e c ∈ ( − 0.5 , 0.5 ] n_{int} \in \mathbb{Z},n_{dec} \in (-0.5,0.5] nintZ,ndec(0.5,0.5];则OFDM信号的非整数点时移可以划分为3个步骤:
    (1) 利用FFT对OFDM符号的有效符号部分进行 n d e c n_{dec} ndec点的位移:
    不妨令第 l l l个OFDM符号的“循环前缀”和“有效符号部分”分别为 x l , g [ n ] x_{l,g}[n] xl,g[n] x l , u [ n ] x_{l,u}[n] xl,u[n],则有,
    x l , g [ n ] = x l [ n ] , 0 ≤ n ≤ N g − 1 x l , u [ n ] = x l [ n ] , N g ≤ n ≤ N g + N u − 1
    xl,g[n]=xl[n],0nNg1xl,u[n]=xl[n],NgnNg+Nu1" role="presentation">xl,g[n]=xl[n],0nNg1xl,u[n]=xl[n],NgnNg+Nu1
    xl,g[n]xl,u[n]=xl[n],0nNg1=xl[n],NgnNg+Nu1

    显然,易得,
    x l , u [ n − n d e c ] = ∑ k = 0 K − 1 s l , k e j 2 π k ( n − n d e c ) N u , 0 ≤ n ≤ N u − 1 x_{l,u}\left[n-n_{dec}\right] = \sum_{k=0}^{K-1} s_{l,k}e^{\frac{j2\pi k (n-n_{dec}) }{N_u}}, 0 \leq n \leq N_u - 1 xl,u[nndec]=k=0K1sl,keNuj2πk(nndec),0nNu1
    综上,因为在 N u N_u Nu点的FFT中,子载波的正交性没有破坏,因此可以直接利用FFT完成非整数点时移,即对 x l , u [ n ] x_{l,u}[n] xl,u[n]进行 n d e c n_{dec} ndec点的位移。

    (2) 计算进行 n d e c n_{dec} ndec点位移后的循环前缀时域波形:
    不妨令 y l [ n ] = x l [ n − n d e c ] y_l[n]=x_l[n-n_{dec}] yl[n]=xl[nndec],则有,
    y l [ n ] = y l ( n f s ) = x l [ n − n d e c ] = x l ( n − n d e c f s ) y_l[n]=y_l\left(\frac{n}{f_s}\right)=x_l[n-n_{dec}]=x_l\left( \frac{n-n_{dec}}{f_s} \right) yl[n]=yl(fsn)=xl[nndec]=xl(fsnndec)
    a ) a) a):当 1 ≤ n ≤ N g − 1 1 \leq n \leq N_g - 1 1nNg1时,
    y l [ n ] = y l ( n f s ) = x l ( n − n d e c f s ) = x l ( n + N u − n d e c f s ) = x l , u [ n − n d e c ] y_l[n] =y_l\left(\frac{n}{f_s}\right)=x_l\left( \frac{n-n_{dec}}{f_s} \right)=x_l\left( \frac{n+N_u-n_{dec}}{f_s} \right) = x_{l,u}\left[n-n_{dec}\right] yl[n]=yl(fsn)=xl(fsnndec)=xl(fsn+Nundec)=xl,u[nndec]
    b ) b) b):当 n = 0 n = 0 n=0时,
    y l [ n ] = x l ( − n d e c f s ) = x l − 1 ( N u + N g − n d e c f s ) = x l − 1 ( N g − n d e c f s ) = y l − 1 [ N g ] y_l[n] = x_l\left( \frac{-n_{dec}}{f_s} \right) = x_{l-1}\left( \frac{N_u+N_g-n_{dec}}{f_s} \right) = x_{l-1}\left( \frac{N_g-n_{dec}}{f_s} \right) = y_{l-1}[N_g] yl[n]=xl(fsndec)=xl1(fsNu+Ngndec)=xl1(fsNgndec)=yl1[Ng]
    (3) 对整体信号波形进行 n i n t n_{int} nint点的位移:
    对于整数点的位移,可以通过时域平移的方式直接实现,在此不再赘述;最终, z l [ n ] = y l [ n − n i n t ] z_l[n] = y_l\left[n-n_{int}\right] zl[n]=yl[nnint]为输出结果。

    四、程序源代码

    点击获取MATLAB源代码

  • 相关阅读:
    git使用
    计算机组成与体系结构入门(二)
    Unity DOTS学习 前置知识(一)
    git命令行学习
    element ui框架(路由)
    分布式 ID 的实现方案——Java全栈知识(13)
    [学习笔记]Node2Vec图神经网络论文精读
    现代密码学 - 知识点汇总
    基于51单片机的PID直流电机调速Proteus仿真
    使用pytorch进行FFT和STFT
  • 原文地址:https://blog.csdn.net/mddh_123/article/details/127528311