锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基2时抽8点FFT的matlab实现流程及FFT的内部机理

时间:2023-08-17 11:07:00 gcd电容

前言

本来想用verilog描述FFT算法,虽然是8点FFT算法,但是写出来的资源用量及时延迟并不比调用好FFT IP的好,

还是老实调IP了解内部机制,无需重复发明轮子。

参考

流程

FFT这里就不赘述能做什么了,只了解数据的操作流程。

1.FFT基本公式:

88a25e65994db8ce1f1f1eef9ceea7dc.png

乍一看,这个公式一定是脑袋瞬间停机。

2.旋转因子:记住旋转因子具有可约性、对称性和周期性。

通过欧拉公式法,通过欧拉公式转换,本质上是一致的。

Wn=exp(-j*2*k*pi/N) ,N表示FFT点数,k表示几个旋转因素。

Wn = cos(2*pi*k/N) - i*sin(2*pi*k/N)

第二次脑袋瞬间停机。

3.蝶形图:

幸运的是,数学家为了普通人能理解公式,画了一幅帅气的蝴蝶漫画,8点FFT的如下:

不直观,加几条辅助线再看:可见分为三级蝶形运算。

例如,一级蝶形运算结果:x0’=x[0] x[4]*w0,x1’=x[0]-x[4]*w0.以此类推其他节点。

注意-1的位置和旋转因子的位置。注意数据和旋转因子是复数,即蝶形图中的乘法和加减是复数操作。

所谓代码实现,无论代码是什么,本质上都是实现各级公式,从而获得结果。

如果你觉得不清楚,看下图更直观:当然图中标识少-1。

4.数据输入倒序:

从上图左侧可以看到,序列按照了一定的规则进行了倒序,如果按照顺序进行数据输入,肯定是不正确的。十进制可能看不出来,但使其转换为二进制表示就可以知道:

5.Matlab验证算法:

这一步,蝶形结构可以使用matlab语言描述出来了。子进行了2^放大16次,数据两级放大,放大因子需要去除。

x序列为fs=500hz采样下的125hz且有直流分量的8点采样信号。

clc;

clear all;

close all;

%放大了2^16次的系数

w0 = ;

w1 = - *i;

w2 = -*i;

w3 = - - *i;

% w0 = ;

% w1 = 0.7071 - 0.7071*1i;

% w2 = -1i;

% w3 = -0.7071 - 0.7071*1i;

x = ,,,,

%%一级蝶形运算没有放大

x1()=x() x();

x1()=x()-x();

x1()=x() x();

x1()=x()-x();

x1()=x() x();

x1()=x()-x();

x1()=x() x();

x1()=x()-x();

由于系数放大,第二级蝶形运算放大了65536%^,其他部分应相应放大

x2()=x1()* x1()*;

x2()=x1()* x1()*(w2);

x2()=x1()*-x1()*;

x2()=x1()*-x1()*(w2);

x2()=x1()* x1()*;

x2()=x1()* x1()*(w2);

x2()=x1()*-x1()*;

x2()=x1()*-x1()*(w2);

由于系数放大,第三级蝶形运算放大了65536%^,其他部分相应放大

y()=x2()* x2()*;

y()=x2()* x2()*(w1);

y()=x2()* x2()*(w2);

y()=x2()* x2()*(w3);

y()=x2()*-x2()*;

y()=x2()*-x2()*(w1);

y()=x2()*-x2()*(w2);

y()=x2()*-x2()*(w3);

% plot(abs(y/(^))-abs(fft(x)))

figure;

plot(x);

title('x value');

figure;

plot(abs(y/(^)));

title(‘旋转因子放大取整计算结果’);

figure;

plot(abs(fft(x)));

title('matlab自带fft函数计算结果');

6.检查劳动成果:可见matlab自带的FFT计算手动蝶形FFT结果是一致的。

7.转成verilog描述无非是实现各级蝶形公式。

注:(1)乘法和加减法为复数运算。

(2)注意各级位宽,避免溢出。

看蝶形图及相关公式,可以看出算法有点复杂。

虽然手敲可以实现,但是FPGA制造商提供了足够的易用性FFT IP core,资源量和计算延迟都很大nice,

所以还是老实用IP吧。哈哈

8.FFT有些性质:

(1)采样速率与点数的关系:

频谱分辨率△f=fs/N。点数和采样速率共同决定FFT的频谱分辨率。

某一点的频率关系:f=k*fs/N。注意FFT直流分量是计算结果的第一点。

(2)栅栏效应及补零处理:

频谱分辨率决定了通过栅栏窗查看真实频谱的真实性。补零可以使离散谱的外观更加光滑,增加序列长度。

(3)FFT变换后的频域模振幅对应关系:

FFT计算出的第0点是直流分量,其模值是直流分量的N倍。需要除以其他位置获得的模值N/2,才是真正的模值。

第0点:模值//N

其他频率点:模值/(N/2)

(4)频域幅度及相位计算:

某点(im,re)范围信息如下:sqrt(im^2 re^2)即实部平方加虚部平方开根号。

相位为:atan(im/re),反三角计算,即本频谱时域的初相。

以上。

Matlab计算的FFT与通过Origin计算的FFT

在实验过程中,采集的数据经常需要频谱分析,软件的选择对计算速度有很大的影响.我通常在实验过程中使用它Origin7.5.傅里叶快速变换,方便快捷。计算后,绘制的图片也很容易编辑.但是当数 ...

多项式函数插值:全球多项式插值(1)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]

全球多项式插值是指在整个插值区域形成多项式函数作为插值函数.关于多项插值的基本知识,见计算基本理论. 在单项式基插值和牛顿插值形成的表达式中,表达式应在某一点使用Horner嵌 ...

Matlab使用周期图法FFT实现

参考文章:http://www.cnblogs.com/adgk07/p/9314892.html 首先,根据他的代码和我以前拥有的代码,我写了一个适合我的代码. 首先,模仿他的代码并测试它 ...

FFT教你做乘法(FFT傅里叶变换)

题目来源:https://biancheng.love/contest/41/problem/C/index FFT教你做乘法 题目描述 给定两个8B(A请使用B不到1万) ...

对AM信号FFT的matlab仿真

普通调幅波AM大信号包络检波频谱分析 u(t)=Ucm(1 macos ?t)cos ?ct ma称为调幅系数 其频谱由载波和上下边频组成 , 包络检波中的二极管切断负半周,然后使用电容器低通滤波器 ...

将caffe训练时loss用于变化曲线matlab绘制出来

1. 首先是提取 训练日志文件; 2. 然后是matlab代码: clear all; close all; clc; log_file = '/home/wangxiao/Downloads/43_ ...

几种快速傅里叶变换(FFT)的C++实现

链接:http://blog.csdn.net/zwlforever/archive/2008/03/14/2183049.aspx一篇不错的FFT 收集文章.DFT正变换和反变换分别为( ...

Xilinx FFT IP v9.0 使用(一)

reference:https://blog.csdn.net/shichaog/article/details/51189711 https://blog.csdn.net/qq_36375505/ ...

随推荐

webpack练手项目之easySlide(一):初探webpack (转)

最近在学习webpack,正好拿了之前做的一个小组件,图片轮播来做了下练手,让我们一起来初步感受下webpack的神奇魅力.     webpack是一个前端的打包管理工具,大家可以前往:http:/ ...

IE 下JS和CSS 阻塞后面内容总结

总结: 1.  CSS 都是可以并行下载的. 2.  IE6 和 IE7   JS 不能并行下载,CSS 和 JS 阻塞后面内容下载. 3.  IE8   JS 还是会阻塞图片下载 开始改变加载模式, ...

Bootstrap的学习以及简单运用

柠檬学院

How a non-windowed component can receive messages from Windows -- AllocateHWnd

http://www.delphidabbler.com/articles?article=1 Why do it? Sometimes we need a non-windowed componen ...

Linux性能监控分析命令

vmstat sar iostat top free uptime netstat ps strace lsof

iOS GCD 与 NSOperationQueue

NSOperationQueue ios NSOperation vs. GCD StackOverflow: NSOperation vs. Grand Central Dispatch Blog: ...

关于Servlet会话跟踪的那些事儿

关于servlet会话跟踪,一搜都能搜出很多.我也不免落入俗套,也总结了一把.希望我所总结的知识尽量是知识海洋里的一汪清泉.能帮助到我自己和哪怕一个人,那也是值得的. 故事由来: 我们知道,http协 ...

find grep

grep grep -rn "hello,world!" * #递归查找当前目录下所有包含hello,world的文件 grep -C number pattern files : ...

java的JCombobox实现中国省市区三级联动

源代码下载:点击下载源代码 用xml存储中国各大城市的数据. xml数据太多了就不贴上了,贴个图片: 要解释xml,添加了一个jdom.jar,上面的源代码下载里面有. 解释xml的类: packag ...

Mac 系统下创建可双击执行文件,cd到执行文件当前目录

在mac下之前我一直用.sh文件,但是要去终端里才能执行,后来得知可以写.command文件,双击及可执行,很方便,特此记录 #!/bin/bash basepath=$(cd `dirname $0 ...

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章