首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Python 自動化測試:波形文件比較,方差法可行性分析

     編輯:程式設計綜合問答

業務場景

兩個波形文件(如音頻、振動、傳感器數據),一個為基準期望值,一個為待測輸出。需自動判斷兩者是否「足夠相似」。

直接比較方差的局限性

  • 方差僅反映整體離散程度:兩個波形方差相近 ≠ 形狀相似(如相位偏移、頻率差異)。
  • 對時序敏感:微小時間偏移會導致點對點差異巨大,但方差可能變化不大。
  • 無法定位差異區間:只能給出單一標量,難以定位具體哪段波形異常。

推薦的比較指標體系

  1. 均方誤差 (MSE) / 均方根誤差 (RMSE):點對點差異的平均能量,最直觀。
    MSE = mean((y_true - y_pred)^2)
  2. 相關係數 (Pearson / Spearman):衡量形狀線性相關性,忽略幅度縮放。
    r = cov(x,y) / (std(x)*std(y))
  3. 動態時間規整 (DTW):允許時間軸非線性對齊,適合語音/手勢識別場景。
  4. 頻域指標:FFT 後比較功率譜密度 (PSD)、頻譜質心等,針對周期性信號。

工程落地建議

import numpy as np
from scipy.spatial.distance import euclidean
from fastdtw import fastdtw

def compare_waveforms(ref_path, test_path, threshold=0.01):
    ref = np.loadtxt(ref_path)
    test = np.loadtxt(test_path)
    
    # 1. 長度對齊(重採樣或截斷)
    if len(ref) != len(test):
        # 簡單線性插值對齊
        test = np.interp(np.linspace(0, 1, len(ref)), np.linspace(0, 1, len(test)), test)
    
    # 2. 多指標評估
    mse = np.mean((ref - test) ** 2)
    corr = np.corrcoef(ref, test)[0,1]
    dtw_dist, _ = fastdtw(ref, test, dist=euclidean)
    
    report = {
        'mse': mse,
        'correlation': corr,
        'dtw_distance': dtw_dist,
        'pass': mse < threshold and corr > 0.99
    }
    return report

結論

單純比較方差不可靠。建議構建「MSE + 相關係數 + DTW」多維指標儀表盤,並設置業務相關閾值;必要時引入頻域特征。自動化測試應輸出定量報告而非單一布爾值,便於回歸分析。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved