参考

OFM 里面重点是ISI,ICI, CP.这里面重点讲解一下CP. Cyclic prefix,循环前缀
也有很多博客文档讲过这个,外文有专门的一本书讲CP,这篇主要是初步了解CP,
如果有兴趣可以把CP 跟 各种 调制模式,以及星座图结合起来分析,多普勒效应结合起来研究。
之前在Bilibili 也看过爱立信的专家有用机器学习去做这块模型研究的。
目录:
1: single - carrier situation
2: multi - carrier situation
3 DFT & IDFT code
4: 常用三角函数公式
一 single -carrier
1.1 BPSK 译码问题

这里面我们以BPSK modulation 为例,发送两个symbols,
接收方想要译码出symbols 2 的时候,由于多径传输问题
假设原始发射的信号为:

收到的信号为

根据和差化积公式

我们放到星座图里面看
1.2 星座图


通过星座图可以看到:相位和幅度都发生了变化。
如果相位超过90度,会导致译码出错。
1.3 解决方案
每个发送符号的前面加一个循环前缀,发送的信息格式 cp+msg
解码只解码msg 部分,cp部分discard.
缺点:
循环前缀长度越长,信道效率越低。
cp: 是发送symbols 1周期或几个周期的的组成

1.4 symbol 1 译码

如上图,symbols 1:
发送信息 : cp+msg
译码的时候:
在采样窗口,第二个周期泄露掉的功率通过cp 泄露出来的功率补上了。
1.5 symbol2

原始信息是2个周期的正弦波,加上一个一个周期的cp
解码的时候,cp 部分丢弃
在采样窗口内,最后一个周期泄露出的能量,通过cp 部分能量补上了。
二 multi-carrier situation for ofdm

OFDM 通过离散傅里叶逆变换把输入的频域信息转换为时域信息

因为信号是叠加后的信号,没有单载波的周期了。解决方案,是把信号的后面一部分
拿到前面做为CP。
译码的时候跟single-carrier 是一样的,如下 后面leak out 的energy, 通过前面的
cp 部分补上来。

译码的时候,首先要重组,先把采样周期内CP 的长度拿到后面去
三 DFT & IDFT
DFT 公式
![F(k)=\sum_{t=0}^{N}x[t]e^{\frac{-j 2\pi k}{N}t}](https://1000bd.com/contentImg/2022/08/05/030251523.gif)
IDFT 公式

- # -*- coding: utf-8 -*-
- """
- Created on Tue Aug 2 11:51:23 2022
- @author: chengxf2
- """
- import numpy as np
-
- #离散傅里叶变换#
- def DFT(X):
- N = len(X)
-
- real =[] #傅里叶变换的实部 cos
- img=[] #傅里叶变换虚部 sin
-
- for k in range(N):
-
- w = -(2*np.math.pi/N)*k #角频率
-
- i = 0
- q = 0
- for t in range(N):
- x = X[t]
- theta = w*t #相位
-
- i = i+x*np.cos(theta)
- q = q+x*np.sin(theta)
- i = np.round(i,2)
- q = np.round(q,2)
- real.append(i)
- img.append(q)
- print(real)
- print(img)
- return real,img
-
- #离散傅里叶逆变换#
- def IDFT(real, img):
-
- N = len(real)
-
- for t in range(N):
-
- im = 0
-
- for k in range(N):
- w = (2*np.math.pi/N)*k #角频率
- theta = w*t
- a = np.cos(theta)*real[k]
- b = np.sin(theta)*img[k]
- im += (a-b)
- #b = b+q
- im= im/N
- im = np.round(im,1)
-
- #b = b/N
- #print("\n 时域信息 X[%d] = %d "%(t,im))
-
- X =[1,2,3,4,5,6,7,8,9]
- real,img =DFT(X)
-
-
- IDFT(real,img)
