Fourier分析入门——第4章——频率域

目录

第 4 章  频率域(The Frequency Domain)

4.1 频谱分析(Spectral Analysis)

4.2 物理单位(Physics units)

4.3 笛卡尔坐标形式与极坐标形式对比

4.4 频谱分析的复数形式

4.5 复数值Fourier系数

4.6 复数值的和三角的Fourier系数之间的关系

4.7  2维或多维离散Fourier变换

4.8  DFT的Matlab实现

4.9  重新审视Parseval定理


第 4 章  频率域(The Frequency Domain)

4.1 频谱分析(Spectral Analysis)

上一章介绍了如何对离散数据进行Fourier分析。 为了推导出三角函数Fourier级数模型的各种Fourier系数的公式,我们采用了“向量化”过程,其中要建模的离散函数的值被视为 D 维向量的坐标。在从图 4.1 A 到 4.1 B 的过渡中,针对 D =3 的情况说明了此向量化过程的具体示例(来自练习 4.1)。信息论创始人Claude Shannon将此过程描述为,将定义在简单空间(二维平面)中的复杂对象(波形)转换为极其复杂的 N维空间中的简单对象()。在第 3 章中,我们了解到这个空间也由一组三角向量构成,这些三角向量是通过对正弦波和余弦波的谐波级数进行采样而形成的。这些新的基向量相互正交,它们形成一个新的参考坐标系,如图 4.1. C 所示,它相对于用于绘制图 4.1 B 中的数据向量的原始参考系旋转。Fourier分析随后被认为是将数据向量投影到三角基向量上以生成模型的Fourier系数的行为。因此,整个过程是从不同的角度制定问题的示例,以便深入了解问题的本质并简化解决方案的计算。

为了显示和解释Fourier分析的结果,常对Fourier系数的D维向量“去向量化(e-vectorized)”处理,以便显示为新的离散函数,如图 4.1 C 到 4.1 D 的过渡所示。注意图 4.1 D 中的一对图有一个共同的 𝖷 轴,它是谐波数,𝖸 轴显示余弦(包括常数项)和正弦Fourier系数的大小。 由于谐波数(harmonic number)与模型中各种三角函数的振荡频率(frequency)成正比,图 4.1 D 显然是模型中存在的频率分量的数量的图形显示。类比玻璃棱镜(prism)对光产生的效果,这样的图形称为原始离散数据函数的频谱(frequency spectrum)。

虽然Fourier分析的计算过程遵循图4 A→B→C→D所示的阶段序列,但中间阶段(B,C)对于理解空间/时间域之间的关系不是必需的(图4A) 和频域(图 4D)。前向离散Fourier变换(DFT)将离散函数 𝗒(𝗍) 转换到频域/谱域(4A→4D),逆DFT将谱转换回时域/空间域(4 D→4 A)。这两个域(即时域和频域)是查看相同数据的互补方式,因此,Fourier分析不会获得新信息,只会获得新视角

-----------------------------图 4.1 两种域——时域和频域-----------------------

4.2 物理单位(Physics units)

如果离散函数 𝗒(𝗑) 所地的定义的区间的长度为L ,且这个区间被均分成 D 个子区间,则在空间/时间域中水平间隔大小Δx

\Delta x = \frac{L}{D}  “=空间域/时间域中的分辨率”-------------------------------------------------[4.1]

样本间距离的倒数(inverse)称为采样频率采样率 R ,因此,R = \frac{D}{L}  。此外,相应Fourier级数的第一次(基础的)谐波分量对应频率 \frac{1}{L} (译注:即长度看成一个周期)。例如,假如 L = 2米,则基础分量( k = 1)对应频率为 1/2 个周期/米(译注:基频率,一个周期对应2米,1米即0.5个周期)。则第二次谐波( k = 2) 应当是2/2 个周期/米(译注:第二次谐波频率为基波的2倍,快了一倍,相同时间跑完1个周期),第三次谐波( k = 3) 应当是3/2 个周期/米(译注:频率变为基频率的1.5倍了,相同时间跑完1.5个周期了),因此,第 k 次谐波应当具有频率  f_k = \frac{k}{L} 周期/米。因此,频率域中各点之间的水平间隔 Δf

\Delta f = \frac{1}{L}   “=频率域中的分辨率”----------------------------------------------------------[4.2]

因为Fourier系数的总数等于 D (数据点数),且因为这些系数成对出现(正弦系数项和余弦系数项),所以,所求的离散谐波数是 N = D/2(当D是偶数)或 N = (D - 1)/2(当D是奇数)。因此,最高次谐波具有频率  f_k = N\Delta f = \frac{N}{L} 。因为频谱在频率区间 0 到 \frac{N}{L} 之间延伸,值 W=\frac{N}{L} 称为函数 𝗒(𝗑) 的带宽(bandwidth),

W=\frac{N}{L} “=频谱带宽”------------------------------------------------------------------------[4.3]

这些结论可以组合起来(对于D为偶数的情况)以产生另外的有用公式:

R = \frac{D}{L} = \frac{2N}{L} = 2W “采样率 = 2×带宽”-----------------------------------[4.4]

D = 2WL   “数据点数 = 2×带宽×区间长度”---------------------------[4.5]

在为实验数据指定傅立叶级数模型时,频率的物理单位通常优先于谐波数。 回想一下,一般的Fourier级数之前给出为

\mathsf{Y} = y ( \mathsf(X)) = \frac{a_0}{2} + \sum_{k=1}^{N}[a_k cos(k\theta) + b_k.sin(k\theta)], \theta = 2\pi \mathsf{X}/ \mathsf{L}-------------[3.34],

当我们使用物理频率 f_\mathsf{k} = \mathsf{k}/\mathsf{L} 作为k阶谐波频率,则模型成了

\mathsf{Y} = y ( \mathsf(X)) = \frac{a_0}{2} + \sum_{k=1}^{N}[a_k cos(2\pi f_{k}x) + b_k.sin(2\pi f_{k}x)]------[4.6]

鉴于上述定义,我们有必要的词汇来构建这样的问题:“如果我们以相同的速率采集更多样本会怎样?” 这种情况如图 4.2 所示。等式 [4.4] 表明,由于在这种情况下速率 R 是固定的,因此频谱的带宽 W 也将是固定的。

 -----------------------------图 4.2 改变观察区间长度的效果---------------------

因为 W 是固定的,等式 [4.5] 表明增加数据点数量的唯一方法是延长观察区间 L 。这意味着,根据等式 [4.2],频域中各点之间的间隔 1/L 必须减小。换句话说,在固定采样率下增加样本数量的效果是在不改变其带宽的情况下增加被测频谱的频率分辨率

    相反,我们应该问:“如果我们以更快的速率采样相同的间隔会发生什么?” 如图 4.3 所示。从上面的方程组中,我们可以得出结论,在固定时间内提高采样率的效果是在不改变其频率分辨率的情况下增加被测频谱的带宽

 -----------------------------图 4.3 改变采样频率的效果-----------------------

4.3 笛卡尔坐标形式与极坐标形式对比

    在第 2 章中,我们观察到余弦波与同频正弦波之和等于同频移相余弦波。也就是说,如果函数以笛卡尔形式写为 v(t) = A cos( t ) + B sin( t ),那么它也可以以极坐标形式写为 v(t) = C cos (t - Φ)。将此结果应用于当前情况,我们可以写出方程 [4.6] 的极坐标形式为

\mathsf{Y} = y ( \mathsf{X} ) = \frac{a_0}{2} + \sum_{k=1}^{N}[m_k cos(2\pi f_k x-\Phi_k)]---------[4.7]

其中,

m_k = \sqrt{a_k^2+b_k^2}) ...........幅度(magnitude)

\Phi_k = tan^{-1}(\frac{b_k}{a_k}) ...............相位(phase) --------------------------------------------------[4.8]

Fourier级数的这种极坐标形式中通过分别绘制各种频率分量的幅度 m 和这些分量的相位Φ 以图形方式显示频谱。一个例子如图 4.4 所示,在电气工程中,这样的图形通常被称为波德图(Bode plot)。请注意,幅度始终为正,相位被限制在区间 (0 - 2π)内。

 -----------------------------图 4.4 频率的两种形式:笛卡尔和极坐标---------------------------------

4.4 频谱分析的复数形式

等式[4.6]中Fourier级数的形式,促使我们使用复数来表示频谱,因为级数中三角函数项成对出现,每个谐波显示为余弦波和正弦波的加权和。在第 2 章中,我们学习了如何将这种组合有效地描述为绘制在复平面上的相量。在代数上,这些相量等同于复数,其中数的“实”部分是余弦函数的权重,数的“虚”部分是正弦函数的权重(译重,权重(weight),我们姑且把它当成一个衡量其级数项相对重要性的乘法因子)。 为了采用这种方法,我们使用练习 2.3 中证明的Euler公式(译注:即反映指数函数与三角函数关系的公式 e^{i\theta}=cos(\theta)+isin(\theta) , 因为此函数为周期函数,只写 θ 即可,也可写成 )。

cos(\theta) = \frac{e^{i\theta} + e^{-i\theta}}{2}

sin(\theta) = \frac{e^{i\theta} - e^{-i\theta}}{2i}=\frac{i(e^{-i\theta}-e^{i\theta})}{2} ---------------------------------------------[4.9]

[译注,在 Euler公式中,令解度为 -θ,则有 e^{-i\theta} = cos(\theta) - i sin(\theta) ,将两式分别相加相减即可求出cos(θ)和sin(θ)的表达式。]

在开区间(0,2π)上重写离散函数的Fourier级数为

y(x) = \frac{a_0}{2} + a_1 cos(x) + b_1 sin(x) + a_2 cos(2x) + b_2 sin(2x) + ...

= \frac{a_0}{2} + \frac{a_1 e^{ix} }{2} +\frac{a_1 e^{-ix}}{2} + \frac{b_1 e^{ix}}{2} + \frac{b_1 e^{-ix}}{2} + \frac{a_2 e^{i2x}}{2} + \frac{a_2 e^{-i2x}}{2} + \frac{b_2 e^{i2x}}{2} + \frac{b_2 e^{-i2x}}{2} + ...

---------------------------------------------------------------------------------------------------------[4.10]

假如我们收集具有公共指数因子的项,则等式成为

y(x) = \frac{a_0}{2} +\frac{a_1-ib_1}{2}e^{ix} + \frac{a_1+ib_1}{2}e^{-ix} + \frac{a_2-ib_2 }{2}e^{i2x} + \frac{a_2+ib_2 }{2}e^{-i2x} + ...

 ---------------------------------------------------------------------------------------------------------[4.11]

现在,我们定义通用的Fourier系数的复数形式 c_k 为

c_k =\frac{a_k-ib_k}{2} e^{ix}

c_{-k} =\frac{a_k+ib_k}{2} e^{ix}

c_0=\frac{a_0}{2} ----------------------------------------------------------------------------------------[4.12]

则等式[4.7]的Fourier级数就转化成了

y(x) = c_0 + c_1 e^{ix} + c_{-1} e^{-ix} + c_2 e^{-2ix} + c_{-2} e^{-2ix} + ...

= \sum_{k=-N}^{N}(c_k e^{ikx})--------------------------------------------------------------[4.13]

Fourier级数的这种极其紧凑的形式在该主题的教科书作者中非常流行。请注意,用复数指数代替三角函数需要负谐波。 其原因在Euler方程 [4.9] 中很明显:即使是简单的余弦函数也是两个复数指数的和,一个具有正角,另一个具有负角。 图 4.5 显示了笛卡尔和极坐标形式的余弦波形的复值Fourier频谱的图形表示。

-----------------------------图 4.5 余弦波的复值Fourier频谱-----------------------------------------------------

负频率的含义最容易理解为反向旋转相量(参见练习 2.3),其中实部指向相同方向(因此增强)但虚部指向相反方向(因此抵消)这些成对相量的旋转速率是余弦函数的频率当两个相量反向旋转时它们之和的长度扫出一个余弦波形

一个潜在的混淆来源是用于显示实值Fourier频谱的频率轴(图 4.4)与用于显示复值频谱的频率轴(图 4.5)具有不同的含义。前者是指三角基函数的频率,而后者是指复指数函数的频率。 如果作者未能明确地说明使用哪种类型的基函数来计算Fourier频谱,则读者需根据上下文背景来自行决定。 如果频率轴包含负值,这很容易做到,因为只有复指数使用负频率;按照惯例,三角频率总是正的。 然而,如果只显示复值频谱的正半部分,就会出现潜在的混淆。当光谱以极坐标形式显示时,这种情况并不少见,因为对于实值数据,幅度谱总是关于 𝗒 轴对称,因此光谱的负半部分是多余的,并且经常被作者或出版商压制。

4.5 复数值Fourier系数

根据具有复系数的复数指数重写Fourier级数模型后,应该可以重复第 3 章中使用的三角模型分析路线,从而验证等式中的公式。[4.12] 将产生这些复数值Fourier系数的数值。 在这里验证 D = 3 的情况然后将结果推广到任何 D 就足够了。因此,我们采用与第 3.F(译注:3.6节) 节中相同的方法,并在每个 𝖷 值处我们有可用采样点时计算Fourier级数[4.13]。(译注:以下假设在开区间(0,2π)上采样)

\mathsf{Y}_0 = c_0 + c_1 e^{i0} + c_{-1} e^{i(-0)}.............@ X = 0

\mathsf{Y}_1 = c_0 + c_1 e^{(i2\pi)/3} + c_{-1} e^{i(-2\pi/3)} .............@ X = L/3

\mathsf{Y}_2 = c_0 + c_1 e^{(i4\pi)/3} + c_{-1} e^{i(-4\pi/3)} .............@ X = 2L/3

为了解这个方程组,我们首先写成矩阵形式 v = Q.h 如下

\begin{bmatrix} \mathsf{Y}_0\\ \mathsf{Y}_1 \\ \mathsf{Y}_2 \end{bmatrix} =\begin{bmatrix} 1 & e^{i0}& e^{i(-0)}\\ 1 & e^{i (2\pi/3)}& e^{i (-2\pi/3)}\\ 1& e^{i (4\pi/3)}& e^{i (-4\pi/3)} \end{bmatrix}\cdot \begin{bmatrix} c_0\\ c_1 \\ c_{-1} \end{bmatrix}--------------------[4.16]

当按这种方式书写时,矩阵Q的列应当考虑成列向量 Q_0Q_1,和 Q_{-1} ,这是由采样的指数函数创造的,采样指数函数组成了我们的Fourier模型的基。用h 表示复数的Fourier系数,我们也可以使用先前创立的对采样的三角向量使用的紧凑记法,写为(用向下的箭头表示列向量)

\mathsf{v} = \begin{bmatrix} Q_0 & Q_1 &Q_{-1} \\ \downarrow& \downarrow & \downarrow \end{bmatrix}\cdot \mathsf{h}-------------------------------------------------------------[4.17]

此等式意味着,向量 v 是基向量的加权和

\mathsf{v} = c_0 Q_0 + c_1 Q_1 + c_{-1} Q_{-1}。--------------------------------------------------[4.18]

对于在区间 2πD 采样的通用情况,其逆DFT关系 v = Q.h 是

\mathsf{v} = c_0 Q_0 + c_1 Q_1 + c_{-1} Q_{-1} + c_2 Q_2 + c_{-2} Q_{-2} + ...

= \sum_{k=-N}^{k=N}(c_k Q_k) (IDFT)--------------------------------------------------------------------[4.19]

 其中,通用基向量由

Q_k = ( e^0 , e^{ik\theta_1} , e^{ik\theta_2}, e^{ik\theta_3},...,e^{ik\theta_N}),其中,\theta_j = 2\pi x_j /L

给出。------------------------------------------------------------------- [4.20]

注意,当k是负数时,也适用复数基向量的描述,因为的k符号也包含在指数函数的指数中。

这一发展表明,如果我们遵循第 3 章中基函数是采样三角函数时使用的相同推理路线,那么对于由采样复数指数构成的基函数,也会出现类似的情况。这种发展是可能的,因为当矩阵和向量的元素是复数或只是实数时,矩阵代数定律同样适用。 因此,从代数的角度来看,即使很难在几何上可视化这些新的复数值基函数,方程 [4.18] 也是有意义的。

为了确定这种模型的Fourier系数,我们需要前向DFT关系 \mathsf{h} = Q^{-1}\cdot \mathsf{v} 我们之前使用的求逆矩阵的方法是将数据向量 v 依次投影到每个基向量上,形成一个内积。这是可行的,因为基向量是正交的。留作练习来验证基向量集 Q 是否相互正交,并且都具有相同的长度,并且都等于 \sqrt{D} 。 这些观察结果表明重新排序和缩放等式 [4.17] 中的项。得到反DFT公式

\mathsf{v}=\sqrt{D}\begin{bmatrix} \frac{Q_{-1}}{\sqrt{D}} & \frac{Q_{0}}{\sqrt{D}} & \frac{Q_{+1}}{\sqrt{D}}\\ \downarrow& \downarrow & \downarrow \end{bmatrix}\cdot \mathsf{h}----------------------------------------------[4.21]

通过用逆矩阵(通过转置和共轭变换矩阵获得)在两边预乘来求解 f 的等式 [4.21] 得到直接 DFT公式

\mathsf{h}=\frac{1}{\sqrt{D}}\begin{bmatrix} Q_{-1}^{*}/\sqrt{D} & \rightarrow\\ Q_{0}/\sqrt{D} & \rightarrow \\ Q_{+1}^{*}/\sqrt{D} & \rightarrow \end{bmatrix}\cdot \mathsf{v}---------------------------------------------------[4.22]

星号表示向量的复数共轭,它是通过取每个单独分量的共轭而获到的。这最后两个等式程是三角基函数[3.38]和[3.39]的类比。 类比于等式[3.30, 3.31]的复数值Fourier系数的显式公式是

c_k = \frac{1}{D} \mathsf{v} \bullet Q_{k} = \frac{1}{D} \sum_{j=0}^{D-1}\mathsf{Y}_j e^{ik\theta_j} ...\theta_j = 2\pi x_j /L

------------------------------------------------------------------------------------------------------------------------[4.23]

学生此时可能想知道,为什么Fourier分析这个主题已经足够复杂了,因为引入了复数值基函数和复数值Fourier系数而变得更加复杂。主要动机在于 DFT 等式 [4.22] 无论数据向量中的测量值是复数值还是实数值,都同样适用。换句话说,通过允许复数值数据,Fourier分析的范围通过承认那些具有两个属性而不是只有一个属性的物理变量而大大扩展。 例如,力、速度(velocity)、动量(momentum)、电磁波(electromagnetic waves)和无数其他本质上是二维的物理参数(即大小和方向),可以使用与分析本质上是1维的(例如电压、光强度、质量等)“实”函数完全相同的程序来进行分析。由于Fourier分析的整个主题可以像复数值函数一样容易地展开,实数值函数被视为一般结果涵盖的特例,这是大多数教科书作者和计算机程序员所青睐的方法。

4.6 复数值的和三角的Fourier系数之间的关系

考虑到许多作者倾向于使用复数形式的Fourier叶分析,以及初学者希望更接近三角基函数的“现实(reality)”,能够轻松地将这两种方法联系起来就变得很重要。为此,我们首先用三角函数展开基向量 Q。 例如,对于 D = 3 的情况

Q_1 = ( e^0, e^{i(2\pi/3)} , e^{i(4\pi/3)})

= (1,cos(2\pi/3)+ i sin(2\pi/3), cos(2\pi/3)+ i sin(4\pi/3))

= C_1 + i S_1 ------------------------------------------------------------------------------[4.24]

也就是说,新的基向量Q是采样余弦向量C和i乘以采样正弦向量S的和。换句话说,Q的实部等于C,Q的虚部等于S。 实际上,我们已经概括了第 2 章的思想(其中复数被视为相量以探索它们的几何性质),因此复向量被视为实向量和虚向量之和。另请注意,负频率的基向量是

Q_1 = ( e^{-0}, e^{i(-2\pi/3)} , e^{i(-4\pi/3)})

= (1,cos(2\pi/3)- i sin(2\pi/3), cos(2\pi/3)- i sin(4\pi/3))

= C_1 - i S_1

= Q_1^* -----------------------------------------------------------------------------------------------[4.25]

换句话说,正负频率的基向量是互为复数共轭的。

将这些表达式代入等式[4.22]将根据三角系数产生复数Fourier系数的向量

\mathsf{h}=\frac{1}{D}\begin{bmatrix} Q_{-1}^{*} &\rightarrow \\ Q_{0} & \rightarrow \\ Q_{+1}^{*} & \rightarrow \end{bmatrix}\cdot \mathsf{v}= \frac{1}{D}\begin{bmatrix} C_{1}+iS_1 &\rightarrow \\ C_{0} & \rightarrow \\ C_{1}-iS_1& \rightarrow \end{bmatrix}\cdot \mathsf{v}

=\frac{1}{D}\begin{bmatrix} C_{1} &\rightarrow \\ C_{0} & \rightarrow \\ C_{1} & \rightarrow \end{bmatrix}\cdot \mathsf{v}= \frac{i}{D}\begin{bmatrix} S_1 &\rightarrow \\ C_{0} & \rightarrow \\ -S_1& \rightarrow \end{bmatrix}\cdot \mathsf{v}-------------------------[4.26]

这些矩阵乘法所隐含的各种内积可从等式 [3.21] 和 [3.22]中所知。 因此,利用这些信息,我们拥有

\mathsf{h}=\frac{1}{2}\begin{bmatrix} a_1\\a_0 \\ a_1 \end{bmatrix}\cdot\mathsf{v}+\frac{i}{2}\begin{bmatrix} b_1\\0 \\ -b_1 \end{bmatrix}\cdot\mathsf{v}------------------------------------------------[4.27]

将这个结论推广以包括任何三角Fourier系数,复数系数是

c_{-k} =\frac{a_k+ib_k}{2}

c_0=m

c_{k} =\frac{a_k-ib_k}{2}-----------------------------------------------------------------------------------[4.28]

该结果与等式[4.12]中Fourier系数的原始定义相匹配。这是对前面的开发是否正确的有用验证。注意,c_k 和  c_{-k} 互为复数共轭。这意味着实数值离散函数的频谱具有一种特别对称性——Hermite对称或共轭对称,按下列关系定义

\mathsf{Re}[c_k] = \mathsf{Re}[c_{-k}] (偶对称)

\mathsf{Im}[c_k] = \mathsf{Im}[c_{-k}] (奇对称) ---------------------------------------------------------[4.29]

已知复系数,则三角系数是

m = \frac{a_0}{2} = c_0 

a_k = c_k + c_{-k}

b_k = i(c_k - c_{-k})

-----------------------------------------------------------------------------------------------------------------------[4.30]

这与等式[4.12]中定义的原始定义一致。

    上面以笛卡尔形式描述了三角函数和复数Fourier系数,但它们也可以用极坐标形式(即幅度、相位)表示。根据等式 [4.28] 复系数的大小是

|c_0| = m = \frac{a_0}{2}

|c_k| = |c_{-k}| = \frac{\sqrt{a_k^2+b_k^2}}{2} 

 =>c_k^2 = c_{-k}^2 = \frac{a_k^2+b_k^2}{4} 

=>c_k^2 + c_{-k}^2 = \frac{a_k^2+b_k^2}{4} ------------------------------------------------------------------[4.31]

请注意,两个模型中的常数项相同,但是将此结果与等式[4.8]进行比较,我们看到其他复数系数的大小恰好是三角系数极坐标大小的一半。即,

|c_0| = m = \frac{a_0}{2}

|c_k| = |c_{-k}| = \frac{m_k}{2} ----------------------------------------------------------------------------[4.32]

考察这个结论的一种方法是,当余弦函数用一对复指数表示时,它的振幅被分成两半。幅度的一半出现在频谱的正频率部分,另一半出现在频谱的负频率部分。至于相位,两种Fourier系数的相位角由下式给出

\Phi_k = \mathsf{tan}^{-1}(\frac{b_k}{a_k}) --------------------------------------------------------------------------------[4.33]

图 4.6 以笛卡尔(矩形)形式和极坐标形式显示了比较三角和复数Fourier频谱的假设(hypothetical)示例。注意左下方面板中的Hermite对称性。右下面板也存在类似的对称性,因为频谱的幅度部分具有偶对称性,而相位谱具有奇对称性。

 -------------------------------------------------图4.6 频率谱对比----------------------------------------------------

4.7  2维或多维离散Fourier变换

将等式[4.14]中给出的一维Fourier级数推广到在 L×L 平方上采样的2维函数世界得到

g(x,y) = \sum_{k=-N}^{N}\sum_{j=-M}^{M}c_{j,k} e^{i2\pi(jx+ky)/L} ------------------[4.34]

请注意,括号内的表达式是一维Fourier级数,其系数 c_{j,k} 是通过在数据矩阵的行上计算的一系列一维 DFT 得到的。结果是Fourier系数的二维矩阵,现在成为要对列进行一系列 DFT 计算的“数据”。因此,二维 DFT归结为一系列两个一维 DFT,其中第一个是为原始计算的数据,第二个根据第一个的结果计算。这种方法可以很容易地推广到 3 维体积数据等等到 N 维空间。

4.8  DFT的Matlab实现

根据Matlab文档,FFX(𝗑)返回向量 𝗑 的离散Fourier变换。对于长度为D的输入向量 𝗑 ,DFT 是一个长度为N的向量f , 其元素为

f (k)= \sum_{k=1}^D\{x(n)exp[-i2\pi(k-1)(n-1)/D)]\} ,1 <= k <= D -----------------[4.35]

(译注:exp记法以Euler数e为底的指数表达式,扩号中的部分为指数部分。)

请注意,此公式中使用 (n - 1) 意味着 MATLAB 假设采样时间从 0 开始,间隔长度为 2pi(译注:2π)。这意味着用户负责跟踪与实际采样时间相关的相移和物理频率。(我们将在第 6 章处理相移(phase shifts))。家庭作业练习中使用的另一种方法是使用真实采样时间来计算采样基函数。还要注意等式[4.35]的定义。不包括使变换矩阵正交所需的归一化常数 1/D。此外,根据文档,Fourier级数中DFT与Fourier系数a和b之间的关系

x(n) = a_0 + \frac{1}{L} \sum_{k=1}^{D/2}[a(k)cos(2\pi kt(n))+b(k)sin(2 kt(n))]

----------------------------------------------------------------------------------------------------------[4.36]

a_0 = 2* f (1)/D

a_k = 2* reak[f (k+1)]/ D

b_k = 2* imag[f (k+1)]/ D------------------------------------------[4.37]

其中,𝗑 是一个长度为 D 的向量,其包含连续函数在时刻t以跨度Δt = L/D间隔采样的离散值。等式 [4.36] 和我们的 [3.34] 之间的差异表明定义Fourier级数的不同约定。 我们选择在变换矩阵中包含样本点数 D 以获得正交矩阵,因此因子 D 包含在我们的Fourier系数中。然而,Matlab 将D 从变换矩阵中排除,因此该因子必须明确包含在等式[4.36]的Fourier级数中。这些差异对使用 Parseval 定理的方差统计(bookkeeping)有影响。

另请注意,FFT 返回的Fourier系数的排序对应于谐波数 0 到 D - 1,而不是 - D /2 到 D /2。 这里有两个问题需要解决。首先,似乎 Matlab 使用的谐波数都是正的,而不是一半正一半负。事实上,采样基函数的周期性导致大于 D/2 的正谐波数(逆时针旋转)等于负谐波数(顺时针旋转)。 图 4.7 以图形方式显示了这一事实。 其次,Matlab 首先报告频率轴正半部分的傅里叶系数,然后是负半部分。 为了颠倒这个顺序,Matlab 提供了一个函数 FFTSHIFT(FFT(x))来交换Fourier向量的两半。 这将零频率放在Fourier矢量的中间,便于绘制频谱。但是,在使用Matlab函数IFFT执行逆 DFT 之前,使用 IFFTSHIFT 将Fourier向量返回到标准格式非常重要。

 ------------------------------------------------图4.7 复数基函数---------------------------------------------------

4.9  重新审视Parseval定理

Parseval 定理在第 3 章中被表述为

|\mathsf{v}|^2 = \sum_{k=1}^{D}\mathsf{Y}_k^{2} = \frac{D}{2}[\frac{a_0^{2}}{2} + \sum_{k=1}^{N}(a_k^2+b_k^2) = \frac{D}{2}|f|^2------------[3.45]

用等式中给出的复值Fourier系数替换 [3.45] 中的三角系数。 [4.30] 结果是

\frac{|f|^2}{2} = \frac{1}{D}\sum_{k=1}^{D}\mathsf{Y}_k^{2} = \frac{1}{2}\sum_{k=0}^{N}\{(c_k+c_{-k})^{2}+ [i(c_k+c_{-k})]^{2}\}

= \frac{1}{2}\sum_{k=0}^{N}[c_k^2+2c_kc_{-k}+c_{-k}^2-(c_k^2-2c_kc_{-k}+c_{-k}^2)]]

= \frac{1}{2}\sum_{k=0}^{N}4c_k c_{-k} = 2\sum_{k=0}^{N}|c_k |^2

= \sum_{k=-N}^{N}|c_k|^2

= |h|^2 -----------------------------------------------------------------------------------------[4.38]

在Matlab中,这个结果写为v*v’/D = h*h’ ,其中,v是数据向量,h是对复指数基函数取得的Fourier系数向量。

内容来源:

<< Fourier Analysis for Beginners>> Larry N. Thibos

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/22477.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

内容好但流量差?B站流量密码可能就在这

B站知名数码UP主老师好我叫何同学&#xff08;以下简称“何同学”。&#xff09;时隔两个月再次更新&#xff0c;这支标题为《为了找到流量密码&#xff0c;我们做了个假B站...》的视频不仅吸引了观众的围观&#xff0c;更是获得了众多B站UP主们的“声援”。 如题所见&#xf…

K8s in Action 阅读笔记——【3】Pods: running containers in Kubernetes

K8s in Action 阅读笔记——【3】Pods: running containers in Kubernetes 3.1 Introducing pods 在Kubernetes中&#xff0c;Pod是基本构建块之一&#xff0c;由容器集合组成。与独立部署容器不同&#xff0c;你总是要部署和操作一个Pod。Pod并不总是包含多个容器&#xff0…

如何高效地在网上找开源项目

开源项目是发展技能、分享想法和成为开发社区一员的好方法。开源意味着软件功能背后的源代码与所有想要阅读它的人公开共享。这意味着你可以准确地看到一个系统是如何工作的——一旦你愿意冒险&#xff0c;就为它做出贡献。除了向所有人开放贡献外&#xff0c;这种开放代码库通…

经典JavaScript手写面试题和答案

文章目录 实现一个函数去重&#xff1f;实现一个函数&#xff0c;判断指定元素在数组中是否存在&#xff1f;实现一个函数&#xff0c;将给定字符串反转&#xff1f;实现一个函数&#xff0c;检测指定字符串是否为回文&#xff08;即从前往后和从后往前的字符序列都相同&#x…

Systrace系列4 —— SystemServer 解读

本文主要是对 SystemServer 进行简单介绍,介绍了 SystemServer 中几个比较重要的线程,由于 Input 和 Binder 比较重要,所以单独拿出来讲,在这里就没有再涉及到。 窗口动画 Systrace 中的 SystemServer 一个比较重要的地方就是窗口动画,由于窗口归 SystemServer 来管,那么…

react学习3 生命周期

componentDidMount()与render()一个级别的&#xff0c;在组件挂载完成之后调用 卸载组件&#xff1a;REACTDOM.unmountComponentAtNode() componentWillUnmount() 组件马上被卸载的时候 老生命周期&#xff1a; 新的生命周期&#xff1a; 废弃了&#xff08;加上Unsate_还是…

RabbitMQ --- 死信交换机(一)

前言 当我们在使用消息队列时&#xff0c;难免会遇到一些消息被拒绝&#xff0c;重复投递或者超时等异常情况。这些异常消息如果不被正确处理&#xff0c;将会阻碍整个消息系统的正常运行。而此时&#xff0c;死信交换机&#xff08;Dead Letter Exchange&#xff0c;简称DLX&…

FAT NTFS Ext3文件系统有什么区别

10 年前 FAT 文件系统还是常见的格式&#xff0c;而现在 Windows 上主要是 NTFS&#xff0c;Linux 上主要是Ext3、Ext4 文件系统。关于这块知识&#xff0c;一般资料只会从支持的磁盘大小、数据保护、文件名等各种维度帮你比较&#xff0c;但是最本质的内容却被一笔带过。它们最…

MySQL-索引(2)

本文主要讲解MySQL-索引相关的知识点 联合索引前缀索引覆盖索引索引下推索引的优缺点什么时候适合创建索引,什么时候不适合?如何优化索引 ? 索引失效场景 ? 为什么SQL语句使用了索引,却还是慢查询 ? 使用索引有哪些注意事项 ? InnoDB引擎中的索引策略 目录 联合索引 联合…

【C++】函数重载 - 给代码增添多彩的魔法

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、函数重载概述 3、函数重载注意事项 4、总结 1、缘起 函数重载&#xff0c;是编程世界中的一抹迷人色彩&#xff0c…

动态规划-状态压缩DP

[SCOI2005] 互不侵犯 题目描述 https://www.luogu.com.cn/problem/P1896 在NN的棋盘里面放K个国王&#xff0c;使他们互不攻击&#xff0c;共有多少种摆放方案。国王能攻击到它上下左右&#xff0c;以及左上左下右上右下八个方向上附近的各一个格子&#xff0c;共8个格子。 …

堪比ChatGPT,Claude注册和使用教程

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT资源 Claude简介 Claude是一款人工智能聊天机器人。主要有以下特征: 使用自己的模型与训练方法,而不是基于GPT-3等开源框架。模型采用Transformer编码器与解码器的结构,并使用对话上下文的双向…

实验六 自动驾驶建模与仿真

【实验目的】 了解Matlab/Simulink软件环境&#xff0c;熟悉Simulink建模步骤&#xff1b;了解车辆运动控制的基本原理&#xff0c;学会简单的车辆运动控制建模及仿真&#xff1b;了解自动驾驶建模的基本过程&#xff0c;了解典型ADAS系统模型的应用特点。了解自动驾驶相关函数…

老司机解读香农定理、奈奎斯特定理、编码与调制

工程师都会考虑一个问题&#xff1a;信道上到底可以传输多大的数据&#xff0c;或者指定的信道上的极限传输率是多少。这就是信道容量的问题。例如&#xff0c;在xDSL系统中&#xff0c;我们使用的传输介质是仅有几兆带宽的电话线&#xff0c;而上面要传送几兆、十几兆甚至几十…

用 Python 写 3D 游戏

vizard介绍 Vizard是一款虚拟现实开发平台软件&#xff0c;从开发至今已走过十个年头。它基于C/C&#xff0c;运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时&#xff0c;Vizard同时自动将编写的程式转换为字节码抽象层(LAXMI)&#xff0c;进而运行…

WorkPlus AI助理 | 将企业业务场景与ChatGPT结合

近年来&#xff0c;人工智能成为了企业数字化转型的热门话题&#xff0c;作为被训练的语言模型&#xff0c;ChatGPT具备模拟对话、回答问题、写代码、写小说、进行线上内容创作的能力&#xff0c;还能根据聊天的上下文进行互动。作为一款新兴的人工智能应用程序&#xff0c;对于…

【IDEA】DeBug(图文并茂)

文章目录 01_Debug简介和意义02_IDEA中的Debug步骤03_跳转到当前代码执行的行04_步过调试的使用05_步入调试的使用06_强制步入调试的使用07_步出调试的使用08_回退断点调试的使用09_运行到光标处10_计算表达式11_条件断点12_多线程调试 IDAEA&#xff08;Interactive Data Anal…

【Linux高级 I/O(3)】如何使用阻塞 I/O 与非阻塞 I/O?——poll()函数

poll()函数介绍 系统调用 poll()与 select()函数很相似&#xff0c;但函数接口有所不同。在 select()函数中&#xff0c;我们提供三个 fd_set 集合&#xff0c;在每个集合中添加我们关心的文件描述符&#xff1b;而在 poll()函数中&#xff0c;则需要构造一个 struct pollfd 类…

分享18个好用的ChatGPT插件

上周ChatGPT又进化了&#xff0c;支持联网还有70几种第三方插件&#xff0c;不过还是老样子&#xff0c;只服务氪金玩家&#xff0c;免费端可能还得等等。之前只开放了俩插件&#xff0c;网络浏览器和代码解释器&#xff0c;只能说是真的不够用。 ChatGPT&#xff1a;不够&…

(一)before initialization of D3D(初始化D3D之前你需要了解的D3D基础知识)

什么是D3D? D3D全称Direct X 3D,即一组API可以用来针对GPU编程,不过他最主要的作用是用来渲染(不过现在也有很多其他应用比如d3d11va[Direct X 3D 11 Video API]用来进行硬件加速解码) Tips:Direct X 3D主要用来渲染,既然我们说到可以针对GPU编程了,当然不只是渲染的工作可以…