实验的过程中,经常需要对所采集的数据进行频谱分析,软件的选择对计算速度影响挺大的。我在实验过程中,通常使用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. spring事务传播行为之使用REQUIRES_NEW不回滚

    最近写spring事务时用到REQUIRES_NEW遇到一些不回滚的问题,所以就记录一下. 场景1:在一个服务层里面方法1和方法2都加上事务,其中方法二设置上propagation=Propagati ...

  2. 【RabbitMQ】6、rabbitmq生产者的消息确认

    通过Publisher Confirms and Returns机制,生产者可以判断消息是否发送到了exchange及queue,而通过消费者确认机制,Rabbitmq可以决定是否重发消息给消费者,以 ...

  3. Contest2075 - 湖南多校对抗(csu1576)大数 Catalan Square

    Problem C: Catalan Square Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 42  Solved: 16[Submit][Stat ...

  4. wcf json参数返回失败问题

    问题: 最近写了一个接口,提示连接失败,于是在本地发布了一下,然后模拟post请求进行本地调试,发现能正常进入接口,中间也没问题,一直走到最后一步return时,也能return,但是就是返回不了数据 ...

  5. HTML5实现video标签的自定义播放进度条

    现在随着html5的渐热,越来越多的web开发者都开始选择使用html5写出一些比较好的web应用. html代码: <!DOCTYPE html> <html lang=" ...

  6. ajax请求完之前的loading加载

    很多时候我们需要引入框架来开发项目,这时我们可能会遇到页面还没加载完源码出来了的问题,给用户一种不好的视觉体验,这是便需要loading加载了,来完善用户体验! /*loading.js*/ // 加 ...

  7. vue-cli脚手架之webpack.dev.conf.js

    webpack.dev.conf.js  开发环境模式配置文件: 'use strict'//js按照严格模式执行 const utils = require('./utils')//导入utils. ...

  8. 二层协议--LLDP协议总结

    二层协议--LLDP协议总结,待完善.

  9. 二层协议--STP协议总结

    生成树协议的技术实现与配置注意点 一.stp协议的用途 二.stp协议的运行机制 三.stp协议规范

  10. Linux 操作系统下为网卡配置ip

    Linux操作系统下为网卡配置ip by:授客 QQ:1033553122 1.   Linux单一网卡设置多IP的配置方法 在Linux下网卡接口逻辑名被称为eth0,eth1,eth2,..... ...