# Python对比MATLAB波动数据分析优势

{% tabs %}
{% tab title="关键词" %}
Python | MATLAB | 波动数据
{% endtab %}

{% tab title="梗概" %}
在此，我们将测试两个类似的MATLAB和Python脚本，因为它们执行了一些基本的振动分析。这些脚本执行以下操作：

1. 载入两列CSV
2. 绘制所有数据
3. 计算并绘制移动的1秒RMS电平
4. 计算并绘制FFT

可以下载MATLAB和Python函数以及分析中使用的振动数据文件。我们将研究范围从数万个点到数千万个的数据集。

### **编程背景**

#### **Python**

一般而言，Python的优点是免费，开源且用途更广。 他们的NumPy和SciPy软件包具有与MATLAB类似的功能。 与MATLAB相比，Python是一种非常优雅且直观的编程语言。 它被创建为一种易于阅读的通用语言。 他们肯定成功了！ 除数据分析外，Python被公认为是MATLAB满足其他编程需求的更好的替代方案。

#### **MATLAB**

另一方面，MATLAB是专门为线性代数运算开发的，可以使其更快地用于振动分析应用程序。 不利的一面是，该语言可能难以阅读/理解。 但是通常认为MATLAB封装更干净，因为您可以在其中获得一个广泛的函数库和一个集成开发环境（IDE）。 对于Python，您需要安装额外的程序包和IDE（尽管这不是一件大事！）。

### **代码**

#### **MATLAB振动分析功能**

我希望Python和MATLAB之间的比较尽可能地精确。 我还希望它能够进行有用的分析，这是振动测试的一种典型方法。 我在MATLAB中编写了初始脚本，以提示用户输入CSV，加载CSV并绘制所有数据。 然后，我执行一个简单的移动RMS计算并绘制此图，然后对整个数据集和图进行FFT。 脚本将计算这些主要步骤中的每一个花费多长时间。 我正在研究移动RMS，因为这可以感觉到随着时间的推移振动的强度。 FFT是基本的第一振动分析步骤之一。

```matlab
close all
clear all
 
%Get filename and path 
    [fname,pathname] = uigetfile('.csv','Select CSV File to Load, Plot, Compute RMS & FFT');
    disp([pathname fname])
 
%Load CSV
    tic %start timer
    data = csvread([pathname fname]); 
    fprintf('%4.2f seconds - Time to Load Data\\n',toc)
     
%Determine variables and Display size
    [N,m] = size(data);
    t = data(:,1); %time in seconds
    x = data(:,2); %array of data for RMS and FFT
    Fs = 1/(t(2)-t(1));
    fprintf('%12.0f data points\\n',N)
 
...
```

#### **Python振动分析功能：**

困难的部分是用Python编写一个等效的脚本。下面提供了Pyhon脚本。 脚本的长度实际上是相同的。 Python脚本的加载时间要长几行，以将其加载到必要的库中。

```python
import matplotlib.pyplot as plt
import numpy as np
from scipy.fftpack import fft
import tkinter as tk
from tkinter import filedialog
import time
 
#Prompt user for file
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(filetypes=[("Two Column CSV","*.csv")])
print(file_path)
 
...
```

#### **振动数据文件**

我们还查看了根据MIL-STD-810G，以随机振动暴露曲线激发的振动器上以10,000 Hz采样的传感器采样记录文件。 有两个记录着眼于飞机的振动。 其中一个（aircraft.csv）来自enDAQ传感器在飞机外部的记录，采样率为2500 Hz（在应用程序中不能分享太多）。 第二个记录（aircraft\_takeoff.csv）是在商业飞行中我将传感器安装到我前面的座位上并以2,000 Hz采样时。

最后的两个记录着眼于我汽车（2008 Saab 93 2.0T）发动机的数据。 第一个记录（car\_engine.csv）是我们的方法视频系列的一部分，该视频具有更多信息。 第二个也是最大的数据集（commute.csv）是当我将传感器安装到引擎上并记录我在早上通勤期间的振动时的情况，其中包括在高速公路上行驶。 我住在附近，所以录音只有20分钟，但是我以10,000 Hz采样，因此有超过1100万个数据点。

#### **测试设置**

我在工作计算机Dell Precision T3610上进行了所有测试。 它具有Intel Xeon 3.00 GHz处理器和8 GB RAM。 操作系统是Windows 7 Professional 64位。 我正在使用的MATLAB是64位R2014b。 我下载并运行了64位Python 3.5.2，NumPy 1.11.1和SciPy 0.18.0。

**绘图**

在下面单击以查看从两个脚本生成的振动分析示例图。 顶部来自MATLAB，底部来自Python。 从左到右，先绘制整个数据集，然后绘制移动RMS，然后绘制整个数据集的FFT。 您可以看到MATLAB和Python都在同一个地方。 但问题是他们多快到达那里？

**结果**

### **载入CSV文件**

### **绘制和计算移动RMS**

### **计算FFT**

### **优化Python以击败MATLAB**

### **Python代码优化**

### **优化结果**

### **载入CSV文件**

### **截断FFT**

### **截断的FFT图**

### **PyFFTW算法**

### **结果**

### **代码**
{% endtab %}
{% endtabs %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
