一维离散傅里叶变换

简介: 笔记

直接上干货

一. 欧拉公式


1.png

二. 傅里叶变换


  1. N为采样的总个数,也就是样本的总个数
    2.png
  2. 应用欧拉公式

3.png

三. 傅里叶逆变换


  1. 公式
    4.png

四. c++编程实现


#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
#define PI 3.1415926535
class FFT {
private:
  double real[8], imag[8];
  double re[8], im[8];
  int i = 0;
public:
  FFT() {};
  void init();
  void print();
  void fft();
  void ifft();
};
void FFT::init()
{
  for (int i = 1; i < 9; i++)
    real[i-1] = double(i), imag[i-1] = 0.0;
}
void FFT::print()
{
  if (i==0)
    cout << "原始数据" << endl;
  i++;
  for (int i = 0; i < 8; i++)
    cout << real[i] << " " << imag[i] << endl;
}
void FFT::fft()
{
  double a=0, b=0;
  for (int i = 0; i < 8; i++)
  {
    a = 0; b = 0;
    for (int j = 0; j < 8; j++)
    {
      a += real[j] * cos((2 * PI*i*j) / 8);
      b += real[j] * sin((2 * PI*i*j) / 8);
    }
    re[i] = a;
    im[i] = -b;
  }
  cout << "变换后的数据" << endl;
  for (int i = 0; i < 8; i++)
  {
    cout << re[i] << " " <<setiosflags(ios::fixed)<<setprecision(10)<< im[i] << endl;
  }
}
void FFT::ifft()
{
  double a = 0, b = 0;
  for (int i = 0; i < 8; i++)
  {
    a = 0;
    b = 0;
    for (int j = 0; j < 8; j++)
    {
      a += re[j] * cos((i*j * 2 * PI) / 8) - im[j] * sin((i*j * 2 * PI) / 8);
      b += im[j] * cos((i*j * 2 * PI) / 8) + re[j] * sin((i*j * 2 * PI) / 8);
    }
    real[i] = a / 8;
    imag[i] = b / 8;
  }
}
int main()
{
  FFT a;
  a.init();
  a.print();
  a.fft();
  a.ifft();
  cout << "逆变换后的数据" << endl;
  a.print();
  return 0;
}

程序结果

10.png

刚开始学,理解程度不够,只能写一下公式,程序,哎。O(∩_∩)O哈哈~


Thank for your reading !!!


公众号:FPGA之旅


目录
相关文章
|
7月前
|
机器学习/深度学习
FFT能量归一化
FFT能量归一化
144 0
|
7月前
|
计算机视觉
傅里叶
傅里叶 “【5月更文挑战第23天】”
87 1
|
人工智能 vr&ar
一维 二维求前缀和、差分
一维 二维求前缀和、差分
56 0
|
机器学习/深度学习
傅立叶变换之(一)——欧拉公式
傅立叶变换之(一)——欧拉公式
概率论笔记(六)一维正态分布/二维正态分布/多维正态分布
概率论笔记(六)一维正态分布/二维正态分布/多维正态分布
338 0
频域滤波—离散余弦变换
频域滤波—离散余弦变换
|
C++ 计算机视觉 异构计算
|
人工智能 算法 安全
【基础算法】差分的应用(一维差分和二维差分)
【基础算法】差分的应用(一维差分和二维差分)
209 0
【基础算法】差分的应用(一维差分和二维差分)
|
机器学习/深度学习 算法 计算机视觉
【MATLAB】离散余弦变换滤波算法(DCT)
之前介绍的所有滤波算法都是空间域滤波算法(即2D滤波算法)。离散余弦变换滤波算法(DCT)属于频率域滤波算法(即3D滤波算法)。
379 0
【MATLAB】离散余弦变换滤波算法(DCT)
|
计算机视觉
数字图像处理——图像变换(二维离散傅里叶正逆变换fft2/fft2、离散余弦正逆变换dct2/idct2、频谱正逆平移fftshift/ifftshift、幅度谱与相位谱)| 例题与分析
数字图像处理——图像变换(二维离散傅里叶正逆变换fft2/fft2、离散余弦正逆变换dct2/idct2、频谱正逆平移fftshift/ifftshift、幅度谱与相位谱)| 例题与分析
339 0
数字图像处理——图像变换(二维离散傅里叶正逆变换fft2/fft2、离散余弦正逆变换dct2/idct2、频谱正逆平移fftshift/ifftshift、幅度谱与相位谱)| 例题与分析