C语言仿真ADC(从发送信号开始)-笔记

C语言仿真ADC(从发送信号开始)-笔记

基础:

傅里叶变换(知乎大佬们讲的真好啊):

为什么傅里叶变换可以把时域信号变为频域信号?

信号中的虚部的物理意义是什么?

如何通俗地解释什么是离散傅里叶变换

采样定理,频谱混叠和傅里叶变换 深入理解

基于以上的理论知识,大体的仿真过程如下:

  1. 从0101010序列-----
  2. 到QPSK调制后的N个subcarriers,此时为等效低通信号----
  3. 加载到中高频上成为IF信号----
  4. 接着把这组IF信号拿来过信道,信道可以有fading,有awg高斯白噪音等等, 不过实验的最后再加这些负面影响,开始先不考虑噪音比较好验证结果----
  5. 接下来进入接收端, 有很多方法, 未来仿真三种-perfect ADC/ 或者delta-sigma ADC/ 或者ZF-TDC; 先用delta-sigma ADC开始;

难点分析:

  • 从step2到step3, 如何把等效低通信号加载到高频并获得IF信号
  • 三种接收端的设计(这里主要写ADC了,TDC已经完成)
  • 最后考虑信道的设计

接下来的研究就基于这些难点逐个击破就行了.

难点1: 如何把等效低通信号加载到高频并获得IF信号的实部

有两种方法:

方法1: 时域转换

参考<<数字通信>>, 直接将等效低通乘以一个高频复信号e^(jθ)即可, 注意乘以单一余弦是不行的, 详见上面参考文档虚数的意义.

这种方法其实是在时域上做的转换, 用t的表达式相乘.

而且这样没做IFFT, 获得的IF信号是复数.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9SA14kzV-1619667906953)(../../AppData/Roaming/Typora/typora-user-images/image-20210413111132249.png)]

方法2: 过采样实现频域转换

考虑到我们系统基于OFDM, 所以利用OFDM的过采样, 在频域上加载到高频, 整个过程要巧妙很多, 发送时就是实信号, 不用再分两路处理[1].

实现步骤另写一个文档记录: OFDM过采样获得中频IF信号

备注[1]: 什么情况下用OFDM发送IF信号可以只考虑实部?

<<Digital Communications, 5th edition>>第19页有证明, 实信号—傅里叶变化后是共轭对称的, 这俩是充分必要条件, 所以如果在IFFT之前, 序列被共轭对称之后, IFFT之后的序列就是实序列了. 那么只发送实部序列就可以了.

另外一种方法是IFFT之前, 序列没有经过共轭对称处理, 直接进行IFFT变换, 这样出来的就是复序列, 理论上是要分I,Q两路发送(处理)的, 因为现实世界只能发送实信号.

所以把"获取OFDM实信号"跟"过采样加载到高频"整合, 这一个难点详细来说就是为了产生纯实数的 中高频 OFDM 信号,要仿真以下步骤:

1.从信息数据中取 N 个复数用以定义正频率部分 (0~fm),这里就是QPSK_signal[N];
2. 再拼接它们的共轭对称以定义负频率部分 (-fm~0),这里就是获的QPSK_signal的共轭对称序列: QPSK_conju[64]
3. 插零点, 比如x[i+100] = s[i]
4. 然后做 IFFT,得到 2N 点的实数信号,其频率范围是 (-fm, fm)。

如何理解OFDM中的子载波, IFFT, FFT?

上面假设OFDM的FFT序列为序列x, 也就是说, 一个OFDM symbol包含x.length个子载波, 但是这个子载波在仿真里看起来就是按照数组下标表示了, 理论上它们是互相正交的,但是我们仿真不考虑物理怎么实现, 只"看到"数学上的子载波就行.如下图, 就是被加载了data的子载波们

在这里插入图片描述

总结: 仿真只看数学上的子载波, 用数组下标表示每一个即可, 不考虑物理怎么实现;

IFFT/FFT不是对信号进行变换,而是对承载了信号的载波进行变换. 举个栗子: OFDM有200个子载波, 但其中只有64+64个被加载了信号, 即128个data子载波, 还有72个空置的子载波, 不过不要紧, 给它们加载信号值0, 这也就是要实现的过采样.

难点2: ADC的接收端

首先, 接收端接收到的是实信号(IF信号), 然后通过以下这个装置, 不断地反转Vref, 最终可以输出一个收敛于接收信号值的信号值.

猜你喜欢

转载自blog.csdn.net/Fky_mie/article/details/116265699