当前位置: 首页 > news >正文

信号处理__FFT变换

目录
  • 什么是FFT
    • 什么是傅里叶变换
  • FFT的过程
  • 单侧FFT代码

什么是FFT

快速理解FFT
FFT与卷积(慎入)
FFT(fast Fourier transform),即快速傅里叶变换
多项式点值法:多项式相乘就是对应点值得相乘

graph LRA[多项式相乘] --> B[多项式系数的卷积] B -->C[多项式点值法对应点相乘] B -->D[卷积可以变换到频域进行对应点相乘]

加速离散傅里叶变换(DFT)
卷积当中的频域相乘
双侧FFT和单侧FFT,奎奈斯特采样定理,

什么是傅里叶变换

时域函数 -> 频域函数 就是傅里叶变换
将一个函数变形为几个不同值得三角函数的和的形式

graph LRA[时域函数] -->|傅里叶变换| B[频域函数] B -->C[幅度频谱图] B -->D[相位频谱图]C -->|反映|E[信号频率特性]D -->|反映|E

FFT的过程

  1. 数字化,即采样
    块长度,指采样的数量;块长度 -决定-> 频谱分辨率(Δf)
    频域弥散(频域泄露),是指采样窗口不能很好的匹配信号周期,导致块之间的跳变,使得频谱峰值弥散
    窗函数,用来抑制频域泄露,
  2. DFT转换(FFT算法)

单侧FFT代码

ADC采集详见ADC信号采集

    /*********************ADC采集***********************/HAL_ADCEx_Calibration_Start(&hadc1);HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcBuff, FFT_LENGTH);HAL_TIM_Base_Start(&htim3);while (!AdcConvEnd);/**********************傅里叶变换*******************************/for (int i = 0; i < FFT_LENGTH; i++){//两个元素为1个采样点,前为实部,后为虚部fft_inputbuf[i * 2] = adcBuff[i] * 3.3 / 4096;//实部赋值,为真实电压fft_inputbuf[i * 2 + 1] = 0;                  //虚部赋值,固定为0}arm_cfft_f32(&arm_cfft_sR_f32_len1024, fft_inputbuf, 0, 1);//傅里叶变换核心过程arm_cmplx_mag_f32(fft_inputbuf, fft_outputbuf, FFT_LENGTH);  //变换结果复数求模得到幅值/**********************结果处理*******************************//*归一化处理,恢复原始信号中的分量的幅度第0位为直流分量(即与w无关的常数项),幅度是原始信号中直流分量的N倍(N=1024)交流分量的幅度是原始信号中该频率分量幅度的N/2倍*/fft_outputbuf[0] /= 1024;for (int i = 1; i < FFT_LENGTH; i++){fft_outputbuf[i] /= 512;}/***********************输出幅度结果**********************************/printf("FFT Result:\r\n");for (int i = 0; i < FFT_LENGTH; i++){printf("%d:\t%.2f\r\n", i, fft_outputbuf[i]);}
http://www.njgz.com.cn/news/77.html

相关文章:

  • LCD显示信号波形
  • 7/26
  • 7.26
  • 盛最多水的容器
  • 练习cf939A. Love Triangle
  • CVE-2023-46604 Apache ActiveMQ 远程代码执行漏洞 (复现)
  • Day26
  • 假期学习
  • 第二十四天
  • 在python虚拟环境中遇到 ​​No module named pip​​ 错误解决方案
  • 从零开始的web前端学习-React
  • tinymce富文本编辑器使用
  • 微软C语言编译器‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead
  • Java学习Day26
  • 线性基(个人学习笔记)
  • 花菖蒲 2025.7.26 模拟赛题解
  • 信任的意外反射:深入解析LLVM循环向量化器中的罕见编译错误
  • P1429 平面最近点对(加强版)[骗分解法]
  • 7.26 - GENGAR
  • P4565 [CTSC2018] 暴力写挂 题解
  • 第十二篇
  • 计算机网络——应用层 - 浪矢
  • 《第一节:跟着符映维学C语言---配置c语言开发环境》
  • 再见,大连
  • 影视软件集合分享
  • 7.26总结
  • geogebra 2 进阶
  • 20250726GF模拟赛
  • java学习
  • 深入解析Passkeys背后的密码学原理