实验的过程中,经常需要对所采集的数据进行频谱分析,软件的选择对计算速度影响挺大的。我在实验过程中,通常使用Origin7.5来进行快速傅里叶变换,因为方便快捷,计算之后,绘出来的图也容易编辑。但是当数据容量太大,达到100M大小,这时候使用Origin7.5进行快速傅里叶变换,运算速度非常慢,甚至运算不出来。

对大容量的数据进行快速傅里叶变换,我使用Matlab,运算速度比Origin7.5快很多。但是使用Matlab进行FFT时,需要进行一些小的处理,才能使运算结果与使用Origin7.5进行FFT时得到的结果保持一致。

(1)首先介绍运用Origin7.5进行FFT的基本操作,

选中数据后,点击“分析”,下拉菜单中出现“快速傅里叶变换FFT”,点击进入,这个时候会弹出对话框。对话框中,“FFT”下面的“Forward”和“Backward”是正变换和逆变换。“Spectrum”选择“Amplitude”或者选择“Power”,一个是幅度谱,一个是功率谱。其中功率谱是幅度谱的平方。

点击对话中“Settings”按钮,弹出对话框。

其中第四行“Sampling”设置为采样间隔,就是采样率的倒数。第一行的“Sampling”可以不用设置,第二行的“Real”为需要进行傅里叶变换的离散数据,数据一般是实数,故没有虚部,第三行的“Imaginar”不用设置。

“Window Method”一般选择“Rectangular”,

各个窗函数的表示式为:

上述对话框中“Output Options”下面的选项,第一行为是否对FFT之后的幅度进行归一化,这个是要选择归一化的。第二行,表示式单边带,还是双边带,我一般选择单边带。第三行和相位相关。

上述对话框中“Exponential Phase Factor”表示FFT是选择e-jwt还是ejwt,通常FFT算法是前者。

上述这是完之后,就可以得到FFT之后的结果。

关于Origin进行FFT原理,可以参考网页:

(2)其次介绍运用Matlab进行FFT的基本操作,

在使用Matlab进行FFT时,首先要搞清楚FFT的原理。离散傅里叶变换,需要输入数据必需是2n,当输入的数据不是时,则补零,使其满足2n。因此,在使用Matlab进行FFT时,首先是知道离散数据的个数,然后对其补零,之后才是FFT运算。

在Matlab导入数据之后,我通常的做法是使用函数length对数据求大小,比如得到N,然后求解log2(N),比如是21.22。然后使用fft(data,222),之所以是222,是因为数据个数补零之后,数据个数是222。fft(data,222)得到的result就是通常的结果,这是个复数。对result求模,即通过函数abs(result)实现,得到的是幅度,这个时候得到的幅度谱和使用Origin得到的没有归一化的幅度谱是一致。但是,通常我们使用Origin是得到归一化的幅度谱,因此这里得到abs(result)之后,进行归一化,即abs(result)*2/222,在频率点零值处,归一化应该为abs(result)/222,频率点的设置为(0: 222-1)*fs/222,其中fs是采样率。最后plot(f, abs(result)*2/222)就是最后的归一化的幅度,注意就是零值处的特殊处理。

Origin作归一化处理的时候,并没有考虑零值和其他地方的不同,都是除以n/2

使用Matlab得到FFT结果之后,就是导出数据,通常数据较大,使用一般的粘贴复制太慢或不行,我一般使用函数dlmwrite。导出的数据,再导入Origin画图,也比较方便。

Matlab计算的FFT与通过Origin计算的FFT的更多相关文章

  1. GPU计算的十大质疑—GPU计算再思考

    http://blog.csdn.NET/babyfacer/article/details/6902985 原文链接:http://www.hpcwire.com/hpcwire/2011-06-0 ...

  2. OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 6.在计算节点上安装并配置计算服务Nova

    安装和配置计算节点这个章节描述如何在计算节点上安装和配置计算服务. 计算服务支持几种不同的 hypervisors.为了简单起见,这个配置在计算节点上使用 :KVM <kernel-based ...

  3. mysql 下 计算 两点 经纬度 之间的距离 计算结果排序

    根据经纬度计算距离公式 公式 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度: a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung ...

  4. 机器学习进阶-直方图与傅里叶变换-傅里叶变换(高低通滤波) 1.cv2.dft(进行傅里叶变化) 2.np.fft.fftshift(将低频移动到图像的中心) 3.cv2.magnitude(计算矩阵的加和平方根) 4.np.fft.ifftshift(将低频和高频移动到原来位置) 5.cv2.idft(傅里叶逆变换)

    1. cv2.dft(img, cv2.DFT_COMPLEX_OUTPUT) 进行傅里叶变化 参数说明: img表示输入的图片, cv2.DFT_COMPLEX_OUTPUT表示进行傅里叶变化的方法 ...

  5. MATLAB线性回归方程与非线性回归方程的相关计算

    每次比赛都需要查一下,这次直接总结到自己的博客中. 以这个为例子: 2.线性方程的相关计算 x=[1,2,3,4,5]';%参数矩阵 X=[ones(5,1),x];%产生一个5行一列的矩阵,后接x矩 ...

  6. matlab第六章数据分析与多项式计算

    MATLAB练习 第六章数据分析与多项式计算 1.max和min 1.分别求矩阵A中各列和各行元素中的最大值.max和min的用法一样 % [例6.1]分别求矩阵中各列和各行元素中的最大值. A=[5 ...

  7. matlab 矢量化编程(一)—— 计算 AUC

    AUC = sum( (Y(2:end)+Y(1:end-1))/2 .* (X(2:end) - X(1:end-1)) X 和 Y 均是向量: Y(2:end) - Y(1:end-1),是 Y( ...

  8. OpenJudge计算概论-球弹跳高度的计算

    /*======================================================================== 球弹跳高度的计算 总时间限制: 1000ms 内存 ...

  9. java计算过G文件md5 值计算

    package io.bigdata; import java.io.File; import java.io.FileInputStream; import java.io.IOException; ...

随机推荐

  1. Vue性能优化

    今天来谈一谈Vue中一些性能优化的问题,仅仅是个人使用中的一些小心得,来,今天我一句废话不多说,直接上内容好吧 1.v-if和v-show的使用, 我们都知道这两个都可以控制显隐,那我们用哪个呢,个人 ...

  2. .Net Core(二)EFCore

    ​EFCore与之前的EF基本类似,区别在于配置的时候有一些差异:也取消了DB First和Model First,仅保留广泛使用的Code First模式:也不再支持LazyLoad.这里就感受一下 ...

  3. OkHttp3源码详解(一) Request类

    每一次网络请求都是一个Request,Request是对url,method,header,body的封装,也是对Http协议中请求行,请求头,实体内容的封装 public final class R ...

  4. ViewPager+Fragment切换卡顿解决办法

    1.ViewPager设置预加载 我有4个tag,都不想被销毁,设置预加载个数为3. ViewPager viewPager; viewPager.setOffscreenPageLimit(3); ...

  5. Java强引用、软引用、弱引用及虚引用深入探讨

    强引用.软引用.弱引用和虚引用深入探讨 为了更灵活的控制对象的生命周期,在JDK1.2之后,引用被划分为强引用.软引用.弱引用.虚引用四种类型,每种类型有不同的生命周期,它们不同的地方就在于垃圾回收器 ...

  6. 大表分批删除脚本之MySQL版

    经常需要定期对某些表删除历史数据,通常这样的表的数据又是非常巨大,为了减轻对线上环境的影响,删除时必须分成小批量来进行. 以前分享过SQLServer的版本. 下面是MySQL版本: delimite ...

  7. python第八十四天---十五周作业

    后台管理页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  8. SQL Server 2017数据库服务和SSMS图形化工具的的安装

    第一章 SQL数据库服务的安装 1. 首先要加载sql2017数据库镜像,可以用虚拟光驱或是刻录光盘装载.执行setup.exe. 双击.exe文件 双击.exe文件 2. 选择安装-->全新s ...

  9. MySQL面试题之死锁

    什么是死锁?锁等待?如何优化这类问题?通过数据库哪些表可以监控? 死锁是指两个或多个事务在同一资源上互相占用,并请求加锁时,而导致的恶性循环现象.当多个事务以不同顺序试图加锁同一资源时,就会产生死锁. ...

  10. win10锁屏或睡眠一段时间后弹不出登录框

    win10锁屏或睡眠一段时间后弹不出登录框 文:铁乐与猫 通常发生在win10更新到10周年版后发生,也就是会卡在登录状态,但不见输入登录框. 我出现这种情况的时候不是很严重,一般等久些也能出现,但问 ...