深入探索固定周期特徵測試 (FCFT):用 Python 分析工業設備的穩定狀態訊號

假設你是一位資料分析師,負責監測工業設備的健康狀態。 設備每天都在固定的周期模式下運轉,你希望找出潛在的異常,並預測設備的退化情況。 在這個情境下,固定周期特徵測試 (Fixed Cycle Features Test, FCFT) 提供了一種精簡但功能強大的方法,幫助你提取穩定狀態的訊號並進行深入分析。

今天的文章帶你一步步實現 FCFT,通過 Python 分析訊號並提取特徵。

我會展示如何模擬資料、分離穩定訊號、進行頻域分析,以及提取有用的特徵。

準備好一起享受一場資料探險吧!


固定周期特徵測試到底是什麼?

固定周期特徵測試(Fixed Cycle Features Test, FCFT)的核心理念是專注於設備運行周期中的「穩定狀態訊號」,去除設備啟動或停止過程中的瞬態噪聲。

穩定訊號代表設備在日常運行中的大部分行為,提取它可以讓我們獲得更準確的訊息,並識別異常或故障的早期跡象。

具體流程大致如下:

  1. 提取穩定狀態訊號(去除瞬態部分)。
  2. 基於穩定訊號進行特徵提取,比如使用快速傅里葉變換 (FFT) 分析頻譜。
  3. 根據提取的特徵進行異常偵測、健康狀態分類或預測維護。

模擬資料:步入設備訊號的世界

為了示範這個過程,這邊將會模擬一個包含瞬態和穩定階段的訊號。

如果你手邊沒有工業設備的真實數據,大可放心!

這裡使用 Python 模擬一個訊號就能讓你理解基礎操作。

import numpy as np
import matplotlib.pyplot as plt

# 模擬資料
time = np.linspace(0, 10, 1000)  # 時間範圍:0秒到10秒,共1000個點
transient = np.sin(2 * np.pi * 2 * time[:200]) * np.exp(-time[:200])  # 瞬態階段(前200點)
steady_state = np.sin(2 * np.pi * 5 * time[200:])  # 穩定階段(後800點)

# 合併訊號
signal = np.concatenate([transient, steady_state])  # 模擬訊號,包含瞬態和穩定階段

# 可視化訊號
plt.figure(figsize=(10, 4))
plt.plot(time, signal, label="Combined Signal")
plt.axvline(x=2, color='r', linestyle='--', label='Boundary (Transient to Steady)')
plt.xlabel("Time (s)")
plt.ylabel("Signal Amplitude")
plt.title("Analog device signals: transient and steady phases")
plt.legend()
plt.show()

在這裡,我們模擬的訊號分為:

  • 瞬態階段:設備啟動時產生的高頻波動。
  • 穩定階段:設備穩定運行的狀態(更規律的訊號)。

提取穩定階段訊號:去除噪音,留下規律精華

下一步,我們需要聚焦在穩定訊號部分,去除瞬態訊號的干擾。

這一步非常重要,因為穩定訊號包含更準確的設備健康資訊。

# 提取穩定階段訊號
steady_signal = signal[200:]  # 瞬態部分在前200點後

# 繪製提取的穩定訊號
plt.figure(figsize=(10, 4))
plt.plot(time[200:], steady_signal, label="Steady State Signal", color='green')
plt.xlabel("Time (s)")
plt.ylabel("Signal Amplitude")
plt.title("Extracted steady-state phase signals")
plt.legend()
plt.show()

折邊主要是分離穩定階段訊號出來,為後續特徵分析做好準備。


特徵提取:快速傅里葉變換 (FFT) 的魔力

穩定訊號就像一首設備的「歌」,我們可以藉由 FFT 技術解讀它的頻譜特徵。

FFT 是訊號處理工具箱中的一項重要技術,它能幫助我們將「時域」訊號轉換成「頻域」訊號,從而設法找出設備最主要的頻率成分以及訊號的能量分佈。

那我們具體做了什麼呢?

  1. 時域訊號 (Time Domain):指的是隨著時間變化的訊號。例如,設備振動訊號的幅度會隨著時間而波動。
  2. 頻域訊號 (Frequency Domain):指的是訊號的頻率成分,可以展現出訊號中存在的主要頻率成分。例如,你可以觀察設備在某一固定頻率的振動幅度。
  3. FFT 運算:快速傅里葉變換幫我們進行這兩種表示方式的轉換,揭示訊號的頻率特徵。
# fft:用於計算快速傅里葉變換。
# fftfreq:生成對應 FFT 值的頻率範圍。
from scipy.fft import fft, fftfreq

# 計算 FFT
N = len(steady_signal)  # 訊號點數:指穩定訊號的點數(樣本大小,也就是訊號的長度)
Fs = 100  # 採樣頻率:假設每秒收集 100 個訊號樣本
frequencies = fftfreq(N, 1/Fs)  # 頻率範圍:生成對應於每個 FFT 值的頻率範圍。
fft_values = fft(steady_signal)  # FFT 值:計算訊號的 FFT 值,並輸出一個複數陣列。
# 其中:
# - 實部 (Real) 表示振幅大小。
# - 虛部 (Imaginary) 表示相位資訊。
# 通常在振幅分析中,我們只關注複數的模值(也就是振幅大小)。

# 只取正頻率部分:FFT 的結果是對稱的,因此只需取正頻率部分即可。
positive_frequencies = frequencies[:N//2]
positive_fft_values = np.abs(fft_values[:N//2])

# 繪製頻譜圖
plt.figure(figsize=(10, 4))
plt.plot(positive_frequencies, positive_fft_values, label="FFT Spectrum")
plt.xlabel("Frequency (Hz)")
plt.ylabel("Amplitude")
plt.title("Spectral characteristics of stable signals")
plt.legend()
plt.grid(True)
plt.show()

透過 FFT 頻譜分析,並觀察頻譜,就可以回答以下關鍵問題:

  • 設備的主要振動頻率是多少? 主頻率通常對應設備穩定運行的核心頻率,如旋轉速度或運動頻率。
  • 是否出現額外的頻率成分(潛在異常)? 額外頻率可能反映部件異常振動,或外部干擾。

提取有用的資料特徵

顧名思義,特徵提取的目的是將訊號的特性格式化出來,有利於進行後續分析。

我們可以提取主頻率和頻譜能量這兩大重要特徵。

# 特徵提取
max_frequency = positive_frequencies[np.argmax(positive_fft_values)]  # 主頻率
spectral_energy = np.sum(positive_fft_values**2)  # 頻譜能量

print("主頻率 (Max Frequency): {:.2f} Hz".format(max_frequency))
print("頻譜能量 (Spectral Energy): {:.2f}".format(spectral_energy))

主頻率 (Max Frequency): 5.00 Hz

頻譜能量 (Spectral Energy): 159839.35

例如:

  • 主頻率:穩定訊號的核心振動頻率,通常代表設備的主要運動頻率。
  • 頻譜能量:整個訊號的能量大小,健康設備通常保持穩定的能量分布。

得到的數據特徵可以用於:

  • 設備異常檢測(是否新增奇怪頻率?)
  • 預測性維護(追蹤頻域特徵的變化趨勢)

最後,讓有用的資料說話

固定周期特徵測試 (FCFT) 是一個簡單但功能強大的工具,特別是在工業訊號分析中。

通過提取穩定狀態訊號並進行頻譜分析,你可以:

  • 更準確地監測設備的健康狀態。
  • 及早發現潛在異常並進行維護。

如果你的目標是想理解機器設備行為並應用機器學習進行預測,本篇文章應該能帶領你展開有關於訊號分析的基礎。

對頻譜分析或預測性維護感興趣的你,這篇文章可能會對你有所啟發唷!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *