离散傅里叶变换(Example)

UTF8gbsn

注意,不建议读者直接阅读离散傅里叶变换,而是应该先阅读并理解傅里叶级数、和(连
续)傅里叶变换。这样才能够理解离散的傅里叶变换。

Introduction

在工程上,我们通常需要对离散的信号进行处理。所以我们必须要应用一种离散的傅里叶
变换。傅里叶级数的表示形式。如果们又信号 f ( t ) f(t)
α k = 1 2 l l l f ( x ) e i k π x l d x , ( k = 0 , ± 1 , ± 2 , . . . ) \alpha_k=\frac{1}{2l}\int_{-l}^{l}{f(x)e^{-i \frac{k \pi x}{l}}dx},(k=0,\pm 1,\pm 2,...) l = π l=\pi ,我们有,注意一点 i i 是虚数单位。不是下标
α k = 1 2 π 0 2 π f ( t ) e i k t d t , ( k = 0 , ± 1 , ± 2 , . . . ) \alpha_k=\frac{1}{2\pi} \int_{0}^{2\pi}{f(t)e^{-ikt}dt},(k=0,\pm 1, \pm 2, ...)
我们看 α k \alpha_k 对应频率成分是 k 2 π \frac{k}{2\pi} ,那么我们可以看到。那么我们可以
看到,我们恒可以把离散的数据 y = { y i } , y = ( 1 , 2 , . . . , n ) y=\{y_i\},y=(1,2,...,n) ,看做一个周期 2 π 2\pi 上的
采样点。因为 y y 是一定离散的数据。

那么我们如何来计算 α k \alpha_k ?因为 f ( t ) = { y i } f(t)=\{y_i\} ,是离散信号。所以我们必须变换
α k \alpha_k 为如下的等式,注意有一点儿,也就是 i i 是虚数单位,不是标号。

α k = 1 n j = 0 n 1 f ( 2 π j n ) e 2 π i j k n \alpha_k=\frac{1}{n}\sum_{j=0}^{n-1}f(\frac{2\pi j}{n})e^{\frac{-2\pi i j k}{n}}
也就是说

y ^ k / n α k 1 n j = 0 n 1 y j w j k \widehat{y}_{k}/n\approx\alpha_k\approx \frac{1}{n}\sum_{j=0}^{n-1}y_j \overline{w}^{jk}

y j = f ( 2 π j n ) , w = e 2 π i n y_j=f(\frac{2\pi j}{n}), w=e^{\frac{2\pi i}{n}}
我们把 y ^ k \widehat{y}_k 叫做离散傅里叶变换。

Discrete Fourier Analysis

我们来看看离散傅里叶级数的一些分析,离散傅里叶变换,实际上就是对下面的公式进行
离散化。也就是离散 ( 0 , 2 π ) (0,2\pi) ,用离散的数据来替代。所以积分 0 2 π \int_{0}^{2\pi}
成了累加 j = 0 n 1 \sum_{j=0}^{n-1} , f ( t ) y j f(t)\mapsto y_j

α k = 1 2 π 0 2 π f ( t ) e i k t d t , ( k = 0 , ± 1 , ± 2 , . . . ) \alpha_k=\frac{1}{2\pi} \int_{0}^{2\pi}{f(t)e^{-ikt}dt},(k=0,\pm 1, \pm 2, ...)

y ^ k / n α k 1 n j = 0 n 1 y j w j k \widehat{y}_{k}/n\approx\alpha_k\approx \frac{1}{n}\sum_{j=0}^{n-1}y_j \overline{w}^{jk}

所以不难理解,这是用离散的值来计算 α k \alpha_k 的直接表现。那么下面我们来看看当
k > n k>n 时会发生什么

一般我们只计算 y ^ 0 , . . . , y ^ n 1 \widehat{y}_0,...,\widehat{y}_{n-1} ,为什么我们不计算
y ^ n \widehat{y}_{n} ?,让我们来看看为什么?

k = n k=n ,首先计算下 w n = w = ( e 2 π i n ) n = e 2 π i = w 0 \overline{w}^{n}=w=(e^{\frac{2\pi i}{n}})^n=e^{2\pi i}=w^0
同理, w n + 1 = w , w n + 2 = w 2 w^{n+1}=w,w^{n+2}=w^2 ,所以,实际上我们实在计算重复的东西。另外,这也
解释了一定采样频率的信号,不可能含有比采样频率更高频率的信号。于是我们得出结论
y 0 , . . . , y n 1 \overline{y}_0,...,\overline{y}_{n-1} 就是我们需要的离散傅里叶变换。

Matrix Form

F n = ( 1 1 1 . . . 1 1 ω ω 2 . . . ω n 1 1 ω 2 ω 4 . . . ω 2 ( n 1 ) 1 ω n 1 ω 2 ( n 1 ) . . . ω ( n 1 ) 2 ) F_n=\left( \begin{array}{ccccc} 1 & 1 & 1 & ... & 1 \\ 1 & \omega & \omega^2 & ... & \omega^{n-1}\\ 1 & \omega^2 & \omega^4 & ... & \omega^{2(n-1)} \\ \vdots & & & & \vdots \\ 1 & \omega^{n-1} & \omega^{2(n-1)} & ... & \omega^{(n-1)^2} \end{array} \right)

那么离散傅里叶变换就直接转换为了矩阵算法。方便工程上的实践。

Example

我们来看看一个具体的例子。这个例子我是从别的文章中看到的。我们先来看看原始信号

f ( t ) = 2 + 3 2 c o s ( 150 π t + π 2 ) + 3 s i n ( 100 π t π 6 ) f(t)=2+\frac{3}{2}cos(150\pi t+\frac{\pi}{2})+3sin(100\pi t-\frac{\pi}{6})
很明显,这个信号含有两种频率成分的信号,一种是 f 1 = 75 H z , f 2 = 50 H z f_1=75Hz,f_2=50Hz .
我们的采样频 率取 f s = 512 H z f_s=512Hz ,这样在 t [ 0 , 1 ) t\in [0, 1)
上我们就可以取512个数据。然后使用傅里叶
变换后。我们会得到512个 y ^ j \widehat{y}_j 。注意我们得到的是复数。那么我们怎么根据
复数信息来计算频谱成分?

  • 数据中大部分都是0,有效的数据为 y ^ 0 = 1024 y ^ 50 = 665.108 + 384 i y ^ 75 = 384 i y ^ 437 = 384 i y ^ 462 = 665.108 384 i \left. \begin{aligned} \widehat{y}_{0}&=&1024\\ \widehat{y}_{50}&=&665.108+384i\\ \widehat{y}_{75}&=&-384i\\ \widehat{y}_{437}&=&384i\\ \widehat{y}_{462}&=&665.108 -384i \end{aligned} \right.

  • 那么我们如何才能够从离散傅里叶变换中找出找出频率成分和相位,还有我们的常
    数项?

    1. 注意我们是将整个采样区间映射到了 0 , 2 l 0,2l 上,而我们一般采用的是 l , l -l,l 上。
      所以根据我另外一篇文章傅里叶变换中提到的变换方法可以得。

      n α λ = y ^ 50 = 665.108 384 i n*\alpha_{-\lambda}=\widehat{y}_{-50}=665.108-384i
      n α λ = y ^ 75 = 384 i n*\alpha_{-\lambda}=\widehat{y}_{-75}=-384i

    2. 我们来利用公式
      n α λ = 1 2 π f ^ ( λ ) = a λ i b λ 2 n*\alpha_{\lambda}=\frac{1}{\sqrt{2\pi}}\widehat{f}(\lambda)=\frac{a_{\lambda}-ib_{\lambda}}{2}
      n α λ = 1 2 π f ^ ( λ ) = a λ + i b λ 2 n*\alpha_{-\lambda}=\frac{1}{\sqrt{2\pi}}\widehat{f}(-\lambda)=\frac{a_{\lambda}+ib_{\lambda}}{2}

    3. n a 50 = 2 665.108 , n b 50 = 2 384 , n a 75 = 0 , n b 75 = 2 384 n*a_{50}=2*665.108,n*b_{50}=-2*384,n*a_{75}=0,n*b_{75}=-2*384
      也就是说,我们离散傅里叶变换之后,发现有两个频率的信号.一个是 50 H z 50Hz 一个是 75 H z 75Hz .

    4. 计算 a 0 a_0 ,其中l是什么?是半周期。而我们的采样频率是 n = 512 n=512 。也就是说,
      y ^ k / n α k 1 n j = 0 n 1 y j w j k \widehat{y}_{k}/n\approx\alpha_k\approx \frac{1}{n}\sum_{j=0}^{n-1}y_j \overline{w}^{jk}
      y ^ 0 / 512 = 1024 / 512 = α 0 = a 0 2 = 2 \widehat{y}_0/512=1024/512=\alpha_0=\frac{a_0}{2}=2
      由此我们可以知道 a 0 = 4 a_0=4 ,也就是说 f ( x ) f(x) 的常数项为 a 0 2 = 2 \frac{a_0}{2}=2

    5. 50 H z 50Hz 信号计算。

      回忆一下

      a 50 c o s ( 50 2 π t ) + b 50 s i n ( 50 2 π t ) a_{50}cos(50*2\pi t)+b_{50}sin(50*2\pi t)

      A 50 = ( 2 × 665.108 / 512 ) 2 + ( 2 × 384 / 512 ) 2 = 3 A_{50}=\sqrt{(2\times 665.108/512)^2+(-2\times 384/512)^2}=3
      φ = a r c t a n ( 384 / 665.108 ) = π 6 \varphi = arctan(-384/665.108)= -\frac{\pi}{6}

      也就是说, 50 H z 50Hz 的信号为。

      3 s i n ( 100 π t π 6 ) 3sin(100\pi t-\frac{\pi}{6})

    6. 同理 75 H z 75Hz 的信号量为

      3 2 c o s ( 150 π t + π 2 ) \frac{3}{2}cos(150\pi t+\frac{\pi}{2})

The End

最后,我们可以看到,离散傅里叶变换,实际上就是在傅里叶变换的基础上,使用了离散
的信号来计算。本身没有什么特别的地方。只要懂得如何计算就行。还有一点儿就是,大
家一定要记住,复数只是为了更方便计算。我们的具体计算中并没有利用复数计算的便利
性。这是我们忽略的,读者实际上自己思考一下就能明白,利用复数,可以很快的计算出
相位和幅值。至此,我们完成了傅里叶级数,傅里叶变换,离散傅里叶变换的文章。希望
能够给读者带来一些启示。因为我的能力有限。肯定有很多地方写得不好或者是错误的。,还望你们帮忙
指出。我一定,进行修改。

猜你喜欢

转载自blog.csdn.net/luixiao1220/article/details/90473467