离散傅里叶变换,是数字信号处理的基础。建议对数字信号处理有一定基础后,再看本篇博文。

1. 离散傅里叶变换(维基百科)

离散傅里叶变换(Discrete Fourier Transform,缩写为DFT),是傅里叶变换在时域和频域上都呈离散的形式,将信号的时域采样变换为其DTFT的频域采样。

2. 程序设计方法

核心:欧拉公式展开,实轴和虚轴分别计算。

3. 算法函数dft.h

#include <math.h>

void dft(double x[],double y[],double a[], double b[], int n, int sign);

/* x:存放要变换数据的实部
 * y:存放要变换数据的虚部
 * a:存放变换结果的实部
 * b:存放变换结果的虚部
 * n:数据长度
 * sign:定义正变换和反变换的标志;sign=1,正变换;sign=-1,反变换;
 */
void dft(double x[],double y[],double a[], double b[], int n, int sign)
{
    int i,k;
    double c,d,q,w,s;
    q=6.28318530718/n;
    for(k=0; k<n; k++)
    {
        w=k*q;              //部分系数
        a[k]=b[k]=0.0;
        for(i=0; i<n; i++)
        {
            d=i*w;            //完全系数
            c=cos(d);            //a(n)系数
            s=sin(d)*sign;         //b(n)系数
            a[k]+=c*x[i]+s*y[i];   //实部
            b[k]+=c*y[i]-s*x[i];   //虚部
        }
    }
    if(sign==-1)
    {
        c=1.0/n;   //IDFT总函数的系数
        for(k=0; k<n; k++)
        {
            a[k]=c*a[k];
            b[k]=c*b[k];
        }
    }
}

4. 设计题目

由于原序列较多,此处不贴,可下载源代码点击下载附件

5. 利用Debian7下的Qtiplot分析

下一篇:《数字信号处理算法(2)-快速傅里叶变换(FFT)》

注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。 标签:处理算法,信号处理