初识FFT,一篇文章即可上手

FFT变换,一遍文章入门上手


前言

目前`FFT用于频域的特征值,相似性,幅值和相位的判断。用的开发环境是Arduino 2.3.2,arduinoFFT库用的是1.5.6版[]建议先阅读这篇文章的前半段(http://www.ilovematlab.cn/thread-119939-1-1.html)。

对实时检测到的波形或者数组,进行FFT变换,得出频域图像,基波,相位,对该现测波形进行处理。


提示:以下是本篇文章正文内容,下面案例可供参考

一、本程序作用是什么?

示例:得出FFT之后的幅度值,可得出现测时域波形的频域波形图。

二、使用步骤

1.引入库

代码如下(示例):
本人现测数组是171个,采样率8533.(3)。采样点数需要2的次方,不然会在开始FFT变换那卡住,但不会报错,只会后面输出的数组是空的。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "arduinoFFT.h"
#include "BCStData.h"
#define SAMPLES 171 // 样本数
#define fftn 512 // 定义采样点数
#define Fs 8533.333333 // 定义采样率
#define PI 3.14159265358979323846
arduinoFFT FFT = arduinoFFT(); // 创建FFT对象
double vReal[fftn]; // 实部数组
double vImag[fftn]; // 虚部数组
double AnFd[fftn]; // 创建幅度数组

void setup() {
  // 初始化串口通信
  Serial.begin(115200);
  while (!Serial);
  for(int i = 0; i < SAMPLES; i++){
  vReal[i] = BCStData[i] * 0.54 - 0.46 * cos(2 * PI * i / (SAMPLES - 1)); // 汉宁窗函数的应用
  vImag[i] = 0; // 虚部数组初始化为0
  }
  for(int i = 0; i < SAMPLES; i++){
    vReal[i] = BCStData[i]; // 将数据从BCStData复制到实部数组
    vImag[i] = 0; // 虚部数组初始化为0
  }
    for(int i = SAMPLES; i < fftn; i++){
    vReal[i] = 0;
    vImag[i] = 0;
  }

  // 执行 FFT
   FFT.Compute(vReal, vImag, fftn, FFT_FORWARD);
  for (int i = 0; i < fftn; i++) {
    AnFd[i] =2*sqrt(vReal[i] * vReal[i] + vImag[i] * vImag[i])/fftn;
  }
  Serial.println("变换后的幅度数组:");
  for (int i = 0; i < fftn; i++) {
    Serial.print(AnFd[i]);
    Serial.print(", ");
  }
  Serial.println();
  delay(1000); // 延迟1秒再次执行
}
void loop() {
}       

2.读入数据

代码如下(示例):

FFT.Compute(vReal, vImag, fftn, FFT_FORWARD);

开始FFT之前,要对虚部初始化,实部数组等于输入的数组,窗函数会对输出的数组造成干扰,加了是因为这个程序里没有的话输出的是nan。
现测波形取零点依据测量电压,但是还是会存在零点偏移的情况。


总结

之后本人会持续更新,总的来说FFT还是应用很广泛的。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值