Matlab计算的FFT与通过Origin计算的FFT
实验的过程中,经常需要对所采集的数据进行频谱分析,软件的选择对计算速度影响挺大的。我在实验过程中,通常使用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的更多相关文章
- GPU计算的十大质疑—GPU计算再思考
http://blog.csdn.NET/babyfacer/article/details/6902985 原文链接:http://www.hpcwire.com/hpcwire/2011-06-0 ...
- OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 6.在计算节点上安装并配置计算服务Nova
安装和配置计算节点这个章节描述如何在计算节点上安装和配置计算服务. 计算服务支持几种不同的 hypervisors.为了简单起见,这个配置在计算节点上使用 :KVM <kernel-based ...
- mysql 下 计算 两点 经纬度 之间的距离 计算结果排序
根据经纬度计算距离公式 公式 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度: a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung ...
- 机器学习进阶-直方图与傅里叶变换-傅里叶变换(高低通滤波) 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表示进行傅里叶变化的方法 ...
- MATLAB线性回归方程与非线性回归方程的相关计算
每次比赛都需要查一下,这次直接总结到自己的博客中. 以这个为例子: 2.线性方程的相关计算 x=[1,2,3,4,5]';%参数矩阵 X=[ones(5,1),x];%产生一个5行一列的矩阵,后接x矩 ...
- matlab第六章数据分析与多项式计算
MATLAB练习 第六章数据分析与多项式计算 1.max和min 1.分别求矩阵A中各列和各行元素中的最大值.max和min的用法一样 % [例6.1]分别求矩阵中各列和各行元素中的最大值. A=[5 ...
- 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( ...
- OpenJudge计算概论-球弹跳高度的计算
/*======================================================================== 球弹跳高度的计算 总时间限制: 1000ms 内存 ...
- java计算过G文件md5 值计算
package io.bigdata; import java.io.File; import java.io.FileInputStream; import java.io.IOException; ...
随机推荐
- [PHP] 数据结构-从尾到头打印链表PHP实现
1.遍历后压入反转数组,输出2.array_unshift — 在数组开头插入一个或多个单元,将传入的单元插入到 array 数组的开头int array_unshift ( array &$ ...
- Java容器类源码分析前言之集合框架结构(基于JDK8)
一.基本概念 Java容器类库的用途是"保存对象",容器库类分为两个不同的分支. 1.Collection.可以保存一个或多个对象,将其保存为一个序列.Collection又可以细 ...
- hadoop 核心概念及入门
Hadoop Hadoop背景 什么是HADOOP HADOOP是apache旗下的一套开源软件平台HADOOP提供利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理,HADOOP的核 ...
- Docker 安装redis(四)
Docker 安装redis 1.搜索docker镜像(可以看到搜索的结果,这个结果是按照一定的星级评价规则排序的) docker search redis 2.拉取docker的mysql镜像(如果 ...
- SSM+solr 通过商品搜索学习solr的简单使用
学习了一下https://github.com/TyCoding/ssm-redis-solr这个github上的solr搜索功能,现在来记录一下. 我的理解就是solr有点类似于数据库,但它是有索引 ...
- 设计模式之责任链模式(Chain of Responsibility )
责任链的目的是通过特定的设计对请求者和接收者之间进行解耦,请求者调用操作的对象,接收者接收请求并执行相关操作,通过解耦请求者不需要关心接收者的接口,同时也可增强职责的灵活性,通过改变链内的成员或调用次 ...
- Java String的简单介绍
一.String类的构造方法(先粗略介绍三种 分别是s1,s2,s3) 二.String的常用判断方法 三.String类的常用获取方法 三.Sting的常用转换方法 四.String其他功能 五 ...
- ORM&MySQL
概念: ORM:对象关系映射 , 全拼 Object-Relation Mapping ,是一种为了解决面向对象与关系数据库存在的互不匹配现象的技术.主要实现模型对象到关系型数据库数据的映射.比如:把 ...
- 我的Java之旅 第六课 JAVA WEB 请求与响应
一.有关URL编码 1.在URL的规范中定义了一些保留字符,如:: / ? & = @ % 等,在URI中有它的作用.如果要在URI中包含这些字符,必须转码,即%字符后跟十六进 ...
- 安卓开发_浅谈Fragment之事务添加Fragment对象
我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式 看一下布局文件 <LinearLayout xmlns:android="http://schema ...