目录

  • 背景知识——离散傅里叶级数(DFS)和离散傅里叶变换(DFT)
  • 线性卷积和循环卷积
    • 从时域看
    • 从频域看
  • 联想——OFDM中加CP的解释
  • 结论

背景知识——离散傅里叶级数(DFS)和离散傅里叶变换(DFT)

首先回顾一套定理性质的规律:

时域 连续非周期 信号对应频域 非周期连续 信号
时域 连续周期 信号对应频域 非周期离散 信号
时域 离散非周期 信号对应频域 周期连续 信号
时域 离散周期 信号对应频域 周期离散 信号

这四对儿都不拆不散的鸳鸯,在这儿咱们关注第四句

时域离散周期信号对应频域周期离散信号

翻译翻译,就是说,时域周期性导致频域离散化,时域离散化将导致频域的周期延拓,从频域导回时域也一样。再定眼一看,这个对应关系是四组中唯一的“离散”对“离散”的。一看见离散就开始上劲了。

数据离散化对应的操作是抽样,我们看看抽这一对鸳鸯的画面。


图1:信号的时域表示(抽样后)


图2:信号的时域表示(抽样后)

公式是这么回事儿:
x~(n)=1N∑k=0N−1X~(k)ej2πNnk\tilde x(n) = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {\tilde X(k){e^{j\frac{{2\pi }}{N}nk}}}x~(n)=N1​k=0∑N−1​X~(k)ejN2π​nk
X~(k)=∑n=0N−1x~(n)e−j2πNnk\tilde X(k) = \sum\limits_{n = 0}^{N - 1} {\tilde x(n){e^{ - j\frac{{2\pi }}{N}nk}}}X~(k)=n=0∑N−1​x~(n)e−jN2π​nk

上面这东西,就叫傅里叶级数(DFS)。一般编matlab的更喜欢下面的矩阵形式

X~=FNx~x~=1NFN∗X~\begin{array}{l} \tilde X = \mathop F\nolimits_N \tilde x\\ \tilde x = \frac{1}{N}\mathop F\nolimits_N^* \tilde X \end{array}X~=FN​x~x~=N1​FN∗​X~​

FN∈N×N\mathop F_N \in N×NFN​∈N×N是matlab里用来执行fft的矩阵,FN(k,n)=e−j2πNkn\mathop F_N(k,n)={{e^{ - j\frac{{2\pi }}{N}kn}}}FN​(k,n)=e−jN2π​kn

数据上写‘~’就是为了标记这种周期性的数据,在后续的推导中,看见’~'就知道是长的周期序列。另外注意,这个求和区间是在0到N-1一个周期内,不是−∞-\infty−∞到+∞+\infty+∞。

以上就是DFS的基本方案。至于防混叠的抽样间隔选取,z域表达,DFS各种特性等,跟这篇文章关系不大,不说。

回过头来,常识知道随便给我一个信号,它不可能自带周期性,DFS就玩不转。需要做改变,这个骚操作就叫周期延拓,给一个不是无限长的信号,能让它戴上’~'周期化。翻过来看,从周期序列变到一段实值函数,就是加窗操作。

x(n)=x~(n)RN(n)x(n) = \tilde x(n){R_N}(n)x(n)=x~(n)RN​(n)

对这个不带浪的x(n)x(n)x(n)的时频变换操作,就是DFT。相应的操作就变成了下面的

x(n)=1N∑k=0N−1X(k)ej2πNnk\ x(n) = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {X(k){e^{j\frac{{2\pi }}{N}nk}}} x(n)=N1​k=0∑N−1​X(k)ejN2π​nk
X(k)=∑n=0N−1x(n)e−j2πNnk\ X(k) = \sum\limits_{n = 0}^{N - 1} {x(n){e^{ - j\frac{{2\pi }}{N}nk}}} X(k)=n=0∑N−1​x(n)e−jN2π​nk

这么一看DFS与DFT没啥大区别,非也。一个是对无限长具有周期性函数的展开,一个是对任一有限长函数的操作,这是实现了不可为到为之的向前一小步。

线性卷积和循环卷积

从时域看

咱们这一块倒着推,先从承认它的存在开始。后续从频域看时,咱们再从它们开始往后推。

怼公式。
y(n)=x(n)∗h(n)=∑m=−∞∞x(m)h(n−m)y(n) = x(n)*h(n) = \sum\limits_{m = - \infty }^\infty {x(m)h(n - m)}y(n)=x(n)∗h(n)=m=−∞∑∞​x(m)h(n−m)
这是线性卷积,它有一个基本特性是长度M和长度N的两个序列卷一块,出来的是M+N-1的一个序列。

再怼公式。
x3(n)=x1(n)⊗x2(n)=[∑m=0N−1x~1(m)x~2(n−m)]RN(n)\begin{array}{l} {x_3}(n) = {x_1}(n) \otimes {x_2}(n)\\ \;\;\;\;\;\;\;\; = \left[ {\sum\limits_{m = 0}^{N - 1} {{{\tilde x}_1}(m){{\tilde x}_2}(n - m)} } \right]{R_N}(n) \end{array}x3​(n)=x1​(n)⊗x2​(n)=[m=0∑N−1​x~1​(m)x~2​(n−m)]RN​(n)​
这是循环卷积,开始有点蒙了。再说,它是两个长度一样的序列卷一块,出来的还是长度为N的序列,还会循环移位了。更蒙了,啥啥啥啊。咱们一点点看。

一个字,线性卷积周期延拓为周期卷积,周期卷积取主值区间为循环卷积。

意思是搞懂周期卷积就行了呗。

y~(n)=x~1(n)∗x~2(n)=∑m=0L−1x~1(m)x~2(n−m)=∑m=0L−1x~2(m)x~1(n−m)\begin{array}{c} \tilde y(n) = {{\tilde x}_1}(n)*{{\tilde x}_2}(n)\\= \sum\limits_{m = 0}^{L - 1} {{{\tilde x}_1}(m){{\tilde x}_2}(n - m)} \\= \sum\limits_{m = 0}^{L - 1} {{{\tilde x}_2}(m){{\tilde x}_1}(n - m)} \end{array}y~​(n)=x~1​(n)∗x~2​(n)=m=0∑L−1​x~1​(m)x~2​(n−m)=m=0∑L−1​x~2​(m)x~1​(n−m)​
这就叫周期卷积,是两个周期相同的均为L序列,在一个周期内的卷积结果。那么,上面公式里n-m是怎么实现的,也即序列周期卷积时是怎么移位的呢?

一张图。

图3:有限序列的循环移位过程

从图里看,有限序列的循环移位包括3步。
1.周期延拓
2.移位
3.加窗
((⋅))N((·))_N((⋅))N​表示模除N。从一个周期看,上述效果就是循环移位了。然后同一个周期内的两个序列对应相乘再求和,周期卷积结果就出来了。

跟线性卷积不一样的是,“一个周期内” 进行卷积就把它的长度拿捏得死死的了。再长,没用,卡住。完事儿再加个窗,循环卷积结果就出来了,这是从时域来看。

发现端倪了,上面说的线性卷积的长度M+N-1和周期卷积的L啥关系。一个字,没关系。他们只不过是两种运算规则定义的自身属性,能有啥关系。不过要是从数值结果来看,也能扯上点渊源。如果想让长为L的一个周期内的循环卷积的结果,是纯的,不跟旁边周期掺和的,就得满足L>M+N-1。那循环卷积在操作时,两个序列长度分别是M和N,又咋变成L的,补零就成了。阅尽千帆,卷积还是那个卷积,是套路复杂了。

从频域看

怼公式。

地球人都知道,对一般的线性卷积来说,时域卷积对应频域乘积。
y~(n)=x1(n)∗x2(n)↔Y~(k)=X~1(k)⋅X~2(k)\tilde y(n) = {x_1}(n)*{x_2}(n) \leftrightarrow \tilde Y(k) = {{\tilde X}_1}(k) \cdot {{\tilde X}_2}(k)y~​(n)=x1​(n)∗x2​(n)↔Y~(k)=X~1​(k)⋅X~2​(k)
敲黑板,这是有限求和还是无限求和?无限。

无限的玩不了,咱就想办法把有限的玩好。经过循环卷积,时域已经完成了有限操作,那么,它对应的频域形式是什么?

先给结论,与时域循环卷积对应的,是频域DFT的乘积。注意嗷,这两类操作都是有限的。

再怼公式。
老套路,给了两个频域有限信号X1(k)和X2(k)X_1(k) 和 X_2(k)X1​(k)和X2​(k) ,先延拓为X1((k))N和X2((k))NX_1((k))_ N 和 X_2((k)) _NX1​((k))N​和X2​((k))N​。

令Y(k)=X1(k)⋅X2(k)Y(k) = {X_1}(k) \cdot {X_2}(k)Y(k)=X1​(k)⋅X2​(k),
则Y((k))N=X1((k))N⋅X2((k))NY{((k))_N} = {X_1}{((k))_N} \cdot {X_2}{((k))_N}Y((k))N​=X1​((k))N​⋅X2​((k))N​

对Y((k))NY{((k))_N}Y((k))N​做IDFS运算
y((n))N=1N∑k=0N−1Y((k))NF−kn=1N∑k=0N−1[∑m=0N−1x1((m))NFkm][∑r=0N−1x2((r))NFkr]F−kn=∑m=0N−1x1((m))N∑r=0N−1x2((r))N[1N∑k=0N−1F−k(n−m−r)]\begin{array}{c} y{((n))_N} = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {Y{{((k))}_N}{F^{ - kn}}} \\ = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {\left[ {\sum\limits_{m = 0}^{N - 1} {{x_1}{{((m))}_N}{F^{km}}} } \right]\left[ {\sum\limits_{r = 0}^{N - 1} {{x_2}{{((r))}_N}{F^{kr}}} } \right]{F^{ - kn}}} \\ = \sum\limits_{m = 0}^{N - 1} {{x_1}{{((m))}_N}} \sum\limits_{r = 0}^{N - 1} {{x_2}{{((r))}_N}} \left[ {\frac{1}{N}\sum\limits_{k = 0}^{N - 1} {{F^{ - k(n - m - r)}}} } \right] \end{array}y((n))N​=N1​k=0∑N−1​Y((k))N​F−kn=N1​k=0∑N−1​[m=0∑N−1​x1​((m))N​Fkm][r=0∑N−1​x2​((r))N​Fkr]F−kn=m=0∑N−1​x1​((m))N​r=0∑N−1​x2​((r))N​[N1​k=0∑N−1​F−k(n−m−r)]​

最后一个中括号里是有正交性的,其结果只有当r=n+mr=n+mr=n+m的时候才为111,别的时候都是0,上面这个式子就可以化成

y((n))N=∑m=0N−1x1((m))Nx2((n−m))Ny({(n))_N}= \sum\limits_{m = 0}^{N - 1} {{x_1}({{(m)})_N}} {x_2}({(n - m))_N}y((n))N​=m=0∑N−1​x1​((m))N​x2​((n−m))N​
这不就是周期卷积么,再加个窗,就得到下面的式子,也就是循环卷积了。

y(n)=y((n)N)RN(n)=x1(n)⊗x2(n)y(n) = y({(n)_N}){R_N}(n) = {x_1}(n) \otimes {x_2}(n)y(n)=y((n)N​)RN​(n)=x1​(n)⊗x2​(n)

另外,由于时频域的对偶性,可以推测有限的时域乘积对应的是有限的频域卷积,也会有别的有趣的结论。不说了。

联想——OFDM中加CP的解释

这也是我对循环卷积产生困惑的点。
现在想来,从时域上看,宽带信道的多径效应和带限特性会产生ISI,用数据片段末端数据作为cyclic pilot (cp)后,把不同径的数据段 “补齐” ,可以统一 “裁剪” 的同时还不损失原本数据,就克服了ISI。
从频域上看呢?因为是对有限数据进行的时频变换,循环卷积一直存在。假设多径产生的信道冲激响应长度为M,数据段长度为N,一个周期内会产生的卷积的长度为M+N-1。而如果不加CP,接收端以N为窗去截断,就会丢失数据。如果加上CP,使得L=N+CP≥M-N-1,即CP大于等于信道冲激响应强度,循环卷积这时就以L为窗去截了,截到的结果就是线性卷积的循环移位。为此,频域上数据没有丢失,变成了有限长度信道冲激响应和有限长度数据的频域的乘积。所以ISI在频域上也被消除了。

结论

最后给结论,玩有限的时候,时域循环卷积对应的是频域DFT乘积。玩无限的时候,时域线性卷积对应的是频域DTFT乘积。

情况就是这么个情况,因为本科不是搞通信的,这问题困扰了我好久,从认知的角度来说进行了一次不系统的推理,希望对大家有所帮助。第一次编辑,不太会套路,可能会有赘述,谢谢大家包涵。

从时频特性出发——什么是循环卷积?相关推荐

  1. 地震 位错模型 matlab,8解(EEMD)的汶川Ms8[1].0强震动记录时频特性分析

    第34卷第3期地震学报V01.34,No.32012年5月(350-362)ACTASEISMOLOGICASINICAMay,201Z李大虎,赖敏,何强,马新欣,顾勤平.2012.基于聚类经验模态分 ...

  2. 时频特性分析(Matlab)

    最近瞅了一些关于时频分析工具箱的matlab函数使用方法,总结一下吧. 我使用的是2011a的matlab,貌似没有自带的时频分析工具箱,可以到网上下载,google一搜就能搜到,安装后就可以使用了( ...

  3. 信号的时频分析MATLAB,[转载]时频特性分析(Matlab)

    最近瞅了一些关于时频分析工具箱的matlab函数使用方法,总结一下吧. 我使用的是2011a的matlab,貌似没有自带的时频分析工具箱,可以到网上下载,google一搜就能搜到,安装后就可以使用了( ...

  4. 通过Matlab分析语音信号的时频特性

    Matlab为我们提供了音频文件读取函数wavread, 以这个函数为基础可实现语音音频时域波形的绘制. 一开始我直接将.m4a文件改为.wav文件, 虽然语音文件能够通过播放器播放, 但Matlab ...

  5. 时频分析在工程中的应用

    时频分析在工程中的应用     时频分析在工程中的应用 在传统的信号处理中,人们分析和处理信号的最常用也是最直接的方法是傅里叶变换.傅里叶变换及其反变换构建起信号时域与频域之间变换的桥梁,是信号时域与 ...

  6. 时频分析-呼吸心跳信号检测方法(六)

    系列文章目录 <呼吸心跳信号检测方法(一)> <数据采集-呼吸心跳信号检测方法(二)> <信号建模-呼吸心跳信号检测方法(三)> <滤波算法-呼吸心跳信号检测 ...

  7. 时频分析方法总结:傅里叶级数及傅里叶变换、STFT 、小波变换、Wigner-Ville 分布

    前言: 一.傅里叶变换的机理 一个能量无限的正弦信号和源信号乘积并求和得到某个频率下的系数,随着频率的增加,正弦信号改变,再次求得系数,依次构成了频谱图 傅里叶级数及傅里叶变换 https://blo ...

  8. 匹配追踪分解 时频 matlab,Matlab匹配追踪(MatchingPursuit) 之一

    Matlab从R2012a开始添加了匹配追踪(Matching Pursuit)函数,这个算法在稀疏表达领域是一个很常用的算法,这里对matlab函数做简答介绍,内容主要来自于matlab的doc帮助 ...

  9. 实验二 语音信号基本时频分析(待更改)

    实验二 语音信号基本时频分析 1.实验目的 1.1 学习与掌握语音信号的分帧及加窗 1.2 了解并分析信号加汉明窗及矩形窗后的差别 1.3 分析清音与浊音的时域及频谱域波形特征(画图.对比) 1.4 ...

最新文章

  1. UA OPTI570 量子力学30 Degenerate Stationary Perturbation Theory简介
  2. python lua 性能比较 内存_Lua 的速度为什么比 Python 快?
  3. python画端午节_我想带你去旅行,我用Python提前做了一份端午旅游攻略,请收下!...
  4. 后端学习 - RabbitMQ
  5. mysql主备切换 自动_核电生产管理信息系统EAM完成首次备用环境切换演练
  6. WCF宿主与服务托管
  7. 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列
  8. Linux下的文件共享全攻略系列之三:主流FTP服务器Wu-ftpd入门指南
  9. Ruby+watir自动化测试中实现识别验证码图片
  10. 劲爆!Java 通用泛型要来了。。
  11. pdf转换成word后有文字叠加_word字体出现重叠 pdf转换成word
  12. 怎样选择(FC-SAN)光纤通道(存储)交换机
  13. 常用遥感SIF和GPP数据集
  14. java旅游管理面试,旅游管理专业面试问题
  15. 2018/12/22
  16. 25 Three.js的点光源THREE.PointLight
  17. Linux 安装httpd(apache)超详细教程
  18. [数据结构]递归树:借助树求解递归算法的时间复杂度
  19. 【专题:毫米波】简介
  20. 猫儿PDF-Word格式转换经验谈

热门文章

  1. 【机器学习】贝叶斯算法详解 + 公式推导 + 垃圾邮件过滤实战 + Python代码实现
  2. 关于批处理的学习之一[前言]
  3. 银河麒麟操作系统基础学习笔记一
  4. linux怎么修改ftp密码
  5. 微信小程序的驾校预约管理系统设计与实现的源码+文档
  6. jQuery_01_选择器_事件
  7. html在线录音并上传,一种网页版在线录制wav音频的方法与流程
  8. 13款宝马x5质量到底怎么样_宝马X5质量怎么样?它的小毛病很多吗?真实车主来给你答案!...
  9. 快应用,就是站长们的恶梦。加了百度必K站
  10. TOP20精选议题引领 | K+峰会深圳站圆满收官!