zoukankan      html  css  js  c++  java
  • DFT公式的一个简单示例

    一个简单的离散傅里叶变换公式如下面所示

    X(k) = ∑<N>x(n)e-j2πkn/N, k = 0,1,2```N-1

    傅里叶变换用于分析时域信号中的频域成分,即从时域信号x(n)得到频域信号X(k)

    这里的∑<N>表示对求和项从n=0加到N-1,为N点傅里叶变换,输入时域信号为N个,输出频域信号也为N个

    看一个简单的例子

    x(t) = sin(2π*1000*t) + 0.5sin(2π*2000*t+3*π/4)

    它由一个1kHz的信号和一个2kHz的信号组成,频率成分非常明显,所以我们能一眼看出,而有些信号则不是那么明显,则可以借助傅里叶变换来求出频率成分

    此处以该简单例子验证,也可以说是做一个简单的傅里叶变换的演示。

    为了对该信号进行处理,我们需要对它进行采样,假设采样频率为fs=8kHz,以n为采样得到的值的索引,并以此为变量重新表示上述信号为

    x(n) = sin(2π*1000*n/8000) + 0.5sin(2π*2000*n/8000+3*π/4)

    并设N=8即做8个点的DFT变换,下面我们将借助MATLAB工具进行计算和演示

    首先我们使用MATLAB画出x(t)的波形,如下图

    图中x轴的数字为我为了绘制该波形所用到的信号的个数,不要与时间单位秒对应,知道这里显示了两个周期的信号即可

    下面再给出一组8点DFT输入信号的图示

    图中的8个点即我们使用8倍于信号周期(8kHz)采样所得到的一个周期的样本,利用这8个数据,我们便可以利用DFT求得其频率成分

    在MATLAB中,直接调用FFT并将结果用图形显示如下,FFT为计算DFT的一种快速算法,其结果和直接使用DFT是一样的

    如上图,我们可以看到,计算的结果和我们已知吻合。计算得到信号中有1kHz和2kHz的频率成分,且幅值前者为后者两倍

    这里有个小点,上面4个图除了其中一个都是由FFT的计算结果直接绘制的,由于MATLAB对于0的表示,或者说是机器计算原本应该是0的值,它得到了一个很小的值(这很正常),所以用调用angle函数求得的相位是不正确的,

    我直接根据正确的结果而绘制了相位图

    关于频域信号的单位,很简单,采样率为fs的信号做N点DFT,所得到的频域信号单位为

    fanalysis(k) = k*fs/N

    对于我们的例子,fs为8kHz,N为8,则对应X(k)当k为0时为直流量,k为1时为1kHz频率成分,依此类推

    从上图我们还可以看到X(k)信号具有某种对称性,准确的关系为

    X(k) = X(k+N/2)*

    即X(k)与X(k+N/2)共轭,也就是说,对于N点频域信号,只有N/2个点的信号是独立的

    所以虽然从图中看出好像是有6kHz和7kHz的信号成分,但实际上是不存在的,这也符合奈奎斯特采样定理,采样频率必须大于两倍的信号频率,从侧面反应出用8kHz去采样最多只能采到4kHz以内的信号

    所以我们可以看到,采样率和做几个点的DFT运算很关键,假设我们让N=4,则就得不到1kHz频率成分的情况

    最后再解释频域幅值大小与时域幅值大小的关系,这里我们的输入信号为实数信号,对应频域幅值为时域幅值的N/2倍

    写在最后,刚刚接触信号处理,写点东西整理下思路。文中的例子来自Lyons的Understanding Digital Signal Processing,这是一本很不错的教材,强烈推荐

  • 相关阅读:
    A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
    Fliptile 开关问题 poj 3279
    Face The Right Way 一道不错的尺取法和标记法题目。 poj 3276
    Aggressive cows 二分不仅仅是查找
    Cable master(二分题 注意精度)
    B. Pasha and String
    Intervals poj 1201 差分约束系统
    UITextField的快速基本使用代码块
    将UIImage转换成圆形图片image
    color转成image对象
  • 原文地址:https://www.cnblogs.com/qingkai/p/8621047.html
Copyright © 2011-2022 走看看