什么是FFT

快速理解FFT

FFT与卷积(慎入)

FFT(fast Fourier transform),即快速傅里叶变换

多项式点值法:多项式相乘就是对应点值得相乘

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

加速离散傅里叶变换(DFT)

卷积当中的频域相乘

双侧FFT和单侧FFT,奎奈斯特采样定理,

什么是傅里叶变换

时域函数 -> 频域函数 就是傅里叶变换

将一个函数变形为几个不同值得三角函数的和的形式

graph LR
A[时域函数] -->|傅里叶变换| 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]);
}

信号处理__FFT变换的更多相关文章

  1. 数字信号处理--Z变换,傅里叶变换,拉普拉斯变换

    傅立叶变换.拉普拉斯变换.Z变换最全攻略 作者:时间:2015-07-19来源:网络       傅立叶变换.拉普拉斯变换.Z变换的联系?他们的本质和区别是什么?为什么要进行这些变换.研究的都是什么? ...

  2. 信号处理——Hilbert变换及谱分析

    作者:桂. 时间:2017-03-03  23:57:29 链接:http://www.cnblogs.com/xingshansi/articles/6498913.html 声明:转载请注明出处, ...

  3. [离散时间信号处理学习笔记] 10. z变换与LTI系统

    我们前面讨论了z变换,其实也是为了利用z变换分析LTI系统. 利用z变换得到LTI系统的单位脉冲响应 对于用差分方程描述的LTI系统而言,z变换将十分有用.有如下形式的差分方程: $\displays ...

  4. [离散时间信号处理学习笔记] 9. z变换性质

    z变换描述 $x[n] \stackrel{\mathcal{Z}}{\longleftrightarrow}X(z) ,\quad ROC=R_x$ 序列$x[n]$经过z变换后得到复变函数$X(z ...

  5. [离散时间信号处理学习笔记] 7. z变换

    z变换及其收敛域 回顾前面的文章,序列$x[n]$的傅里叶变换(实际上是DTFT,由于本书把它叫做序列的傅里叶变换,因此这里以及后面的文章也统一称DTFT为傅里叶变换)被定义为 $X(e^{j\ome ...

  6. 为什么FFT时域补0后,经FFT变换就是频域进行内插?

    应该这样来理解这个问题: 补0后的DFT(FFT是DFT的快速算法),实际上公式并没变,变化的只是频域项(如:补0前FFT计算得到的是m*2*pi/M处的频域值, 而补0后得到的是n*2*pi/N处的 ...

  7. paper 125:NSCT——Nonsubsampled contourlet 变换程序(尺度不变性问题研究)

    原文地址:NSCT——Nonsubsampled contourlet 变换程序开发教程1作者:向望大海的鱼 08年,被老板逼得走投无路,xx所得项目看来是实在躲不过去,只好硬着头皮上.开发一款图像处 ...

  8. 数字信号处理--FFT与蝶形算法

    在数字信号处理中常常需要用到离散傅立叶变换(DFT),以获取信号的频域特征.尽管传统的DFT算法能够获取信号频域特征,但是算法计算量大,耗时长,不利于计算机实时对信号进行处理.因此至DFT被发现以来, ...

  9. C++数学、信号处理相关库

    1.Eigen 是一个线性算术的C++模板库,包括:vectors, matrices, 以及相关算法.功能强大.快速.优雅以及支持多平台. http://www.oschina.net/p/arma ...

  10. 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换

    写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...

随机推荐

  1. Java基础之“Double类型,保留两位小数,避免因小数过长导致乱码问题”

    保留两位小数 方案一 Double totalSaleAmount = 4.174558045899999E7; DecimalFormat df = new DecimalFormat(" ...

  2. Python3 + selenium 获取疫情中高风险区数据

    背景: 需要动态将疫情风险区数据和区域业务动作想结合, 赋能销售业务, 内部使用非商用哈 环境: Python3 + selenium 自动化测试软件中 Chrome 驱动 exe 文件 输出: 以 ...

  3. vue之sync

    在 Vue 中,.sync 是一个用于实现双向数据绑定的特殊修饰符.它允许父组件通过一种简洁的方式向子组件传递一个 prop,并在子组件中修改这个 prop 的值,然后将修改后的值反馈回父组件,实现双 ...

  4. UML类图-UML Class Diagram

    .wj_nav { display: inline-block; width: 100%; margin-top: 0; margin-bottom: 0.375rem } .wj_nav_1 { p ...

  5. Excel批量插入checkbox的宏代码

    来源网络,作为个人记录使用 手动在excel中添加勾选框不复杂,但是添加多个的时候会很麻烦,特别是在做数据分析时,选择框属性应该绑定在对应单元格下,使用普通的填充方式无法到达要求,因此使用VBA宏命令 ...

  6. Java 自定义线程池的任务

      在<Java 自定义线程池的线程工厂>一文中介绍了如何优雅地自定义线程工厂,本文介绍如何自定义线程池的任务,并拿到返回值.   首先自定义一个任务类,实现Callable接口,重写ca ...

  7. 信创-ORACLE迁移到DM8

    信创-ORACLE迁移到DM8 1. DM8实列初始化 安装可以直接参考官网安装说明(安装说明)[https://eco.dameng.com/document/dm/zh-cn/pm/install ...

  8. fastjson jsonobject对象转为网址传参pathvalue形式并按首字母排序

    效果 代码 @Test public void test() { JSONObject jsonObject = new JSONObject(true); jsonObject.put(" ...

  9. Manim中三种函数图像类的比较

    在 Manim 库中,FunctionGraph.ImplicitFunction 和 ParametricFunction 都是用于绘制函数图像的类,但它们的适用场景.输入形式和实现方式有显著区别. ...

  10. 数据分析必备:GPS轨迹、软件签到、手机信令数据获取方式合集

      本文对目前主要的出租车.公交车.行人GPS轨迹.社交软件签到.手机信令等数据产品的获取网站加以整理与介绍. 目录 6 GPS轨迹与签到数据 6.1 个人GPS轨迹数据 6.1.1 GeoLife ...