天天看點

拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

本文展示了如何使用擴充卡爾曼濾波器進行故障檢測。本文使用擴充的卡爾曼濾波器對一個簡單的直流電機的摩擦力進行線上估計。估計的摩擦力的重大變化被檢測出來,并表明存在故障。

電機模型

電機被模拟成具有阻尼系數c,轉動慣量J,由一個扭矩u驅動。電機的角速度w和加速度˙w是測量輸出。

拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

為了使用擴充卡爾曼濾波器估計阻尼系數c,為阻尼系數引入一個輔助狀态,并将其導數設為零。

拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

是以,模型狀态,x = [w;c],和測量,y,方程式為:

拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

使用近似值˙x=xn+1-xnTs将連續時間方程轉換為離散時間,其中Ts為離散采樣周期。這就得到了離散時間模型方程。

拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

指定電機參數

  1.  J = 10; % 慣性
  2.  Ts = 0.01; % 采樣時間

指定初始狀态。

1.  x = [...
2.  0; ... % 角速度
3.  1]; % 摩擦力
4.   
5.  % 以摩擦為狀态的電機的狀态更新方程
6.  % 狀态更新方程式
7.  x1 = [...
8.  x0(1)+Ts/J*(u-x0(1)*x0(2)); ...
9.  x0(2)];
10.   
11.  % 以摩擦為狀态的電機的測量方程
12.   
13.  % 輸出。
14.  % y - 電機測量元素[角速度;角加速度]。
15.   
16.  y = [...
17.  x(1); ...
18.  (u-x(1)*x(2))/J];      

電機經曆狀态(過程)噪聲幹擾,q,和測量噪聲幹擾,r。噪聲項是相加的。

拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

過程和測量噪聲的平均值為零,E[q]=E[r]=0,協方差Q=E[qq']和R=E[rr']。摩擦狀态有很高的過程噪聲幹擾。這反映了我們希望摩擦力在電機正常運作期間會有變化,并且濾波器能跟蹤這種變化。加速和速度狀态的噪聲很低,但速度和加速度測量的噪聲相對較大。

指定過程噪聲協方差。

  1.  [...
  2.  1e-6 0; ... % 角速度
  3.  0 1e-2]; % 摩擦力

指定測量噪聲協方差。

  1.  [...
  2.  1e-4 0; ... % 速度測量
  3.  0 1e-4]; % 加速度測量

建立一個擴充的卡爾曼過濾器

建立一個擴充的卡爾曼濾波器來估計模型的狀态。我們特别關注阻尼狀态,因為這個狀态值的急劇變化表明存在故障事件。

建立一個擴充卡爾曼濾波器對象,并指定狀态轉換和測量函數的雅各布系數。

擴充卡爾曼濾波器的輸入參數是之前定義的狀态轉換和測量函數。初始狀态值x0、初始狀态協方差、過程和測量噪聲協方差也是擴充卡爾曼濾波器的輸入。在這個例子中,精确的雅各布函數可以從狀态轉換函數f和測量函數h中得到。

拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測
1.   
2.  % 輸出
3.  Jac - 在x處計算出的狀态雅各布系數
4.   
5.   
6.  % 雅各布系數
7.  Jac = [
8.      1-Ts/J*x(2) -Ts/J*x(1); ...
9.      0 1];
10.   
11.  % 電機模型測量方程的雅各布系數
12.   
13.  % 輸出
14.  Jac - 在 x 處計算的測量雅各布系數
15.   
16.   
17.  % 雅各布系數
18.  J = [ ...
19.      1 0;
20.      -x(2)/J -x(1)/J];      

Simulation仿真

為了模拟工廠,建立一個環路,在電機中引入一個故障(虛構的電機劇烈變化)。在模拟回路中,使用擴充的卡爾曼濾波器來估計電機狀态,并特别跟蹤摩擦狀态,檢測摩擦力何時發生統計意義上的變化。

電機被模拟成一個脈沖序列,反複加速和減速。這種類型的電機操作對于生産線上的采摘機器人來說是典型的。

在模拟電機時,加入與建構擴充卡爾曼濾波器時使用的Q和R噪聲協方內插補點相似的過程和測量噪聲。對于摩擦,使用一個小得多的噪聲值,因為除了故障發生時,摩擦大多是恒定的。在模拟過程中人為地誘發故障。

  1.  Qv = chol(Q); % 過程噪聲的标準偏差
  2.  Qv(end) = 1e-2; % 較小的摩擦噪聲
  3.  Rv = chol(R); % 測量噪聲的标準偏差

使用狀态更新方程對模型進行仿真,并在模型狀态中加入過程噪聲。仿真十秒鐘後,強制改變電機的摩擦力。使用模型測量功能來模拟電機傳感器,并在模型輸出中加入測量噪聲。

1.  for ct = 1:numel(t)  
2.   % 模型輸出更新   
3.     y = y+Rv*randn(2,1); % 添加測量噪聲
4.     % 模型狀态更新 
5.     xSig(:,ct) = x0;
6.     % 誘發摩擦力的變化
7.     if t(ct) == 10
8.         x1(2) = 10; % 步驟變化
9.   
10.     x1n = x1+Qv*randn(nx  % 加入過程噪聲      
Significant friction change at 10.450000      

為了從電機測量值中估計電機狀态,使用擴充卡爾曼濾波器的預測和糾正指令。

1.   
2.   
3.  % 使用擴充卡爾曼濾波器進行狀态估計
4.  x_corr = correct(ekf,y,u(ct),J,Ts); % 根據目前測量結果修正狀态估計。
5.  predict(ekf,u(ct),J,Ts); % 根據目前狀态和輸入預測下一個狀态。      

為了檢測摩擦力的變化,使用4秒的移動視窗來計算估計的摩擦力平均值和标準偏差。在最初的7秒之後,鎖定計算的平均值和标準差。這個最初計算出的平均值是摩擦力的預期無故障平均值。7秒後,如果估計的摩擦力與預期的無故障平均值相差超過3個标準差,這就意味着摩擦力有了明顯的變化。為了減少噪音和估計摩擦力的影響,在與3個标準差的界限比較時,使用估計摩擦力的平均值。

1.  % 計算估計平均值和标準偏差。
2.  else
3.  % 存儲計算出的平均數和标準差,不需要
4.  %重新計算。
5.  fMean(ct) = fMean(ct-1)
6.  % 使用預期的摩擦力平均值和标準偏差來檢測
7.  %摩擦力變化。
8.  estFriction = mean(xSigEst(2,
9.  if fChanged(ct) && ~fChanged(ct-1)
10.  % 檢測摩擦變化信号的上升沿|fChanged|      

使用估計的狀态來計算估計的輸出。計算測量輸出和估計輸出之間的誤差,并計算出誤差統計。誤差統計可用于檢測摩擦力的變化。這一點将在後面詳細讨論。

1.   
2.  kurtosis(ySigEst(1,idx)-ySig(1,idx));
3.  kurtosis(ySigEst(2,idx)-ySig(2,idx))];      

擴充的卡爾曼濾波器性能

請注意,在10.45秒時檢測到了一個摩擦變化。我們現在描述一下這個故障檢測規則是如何得出的。首先檢查仿真結果和過濾器的性能。

  1.  figure,
  2.  plot(t, Sig(1,:) Sig(2,:));
拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

模型的輸入輸出響應表明,很難直接從測量信号中檢測出摩擦力的變化。擴充的卡爾曼濾能夠估計狀态,特别是摩擦狀态。比較真實的模型狀态和估計狀态。估計的狀态顯示了對應于3個标準差的置信區間。

  1.  plot(t, True(1,:), t, Est(1,:), ...
拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

請注意,濾波器的估計值跟蹤了真實值,而且置信區間仍然有界。檢查估計誤差可以更深入地了解濾波器。

plot(t,True(1,:)-Est(1,:)      
拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

誤差圖顯示,濾波器在10秒的摩擦力變化後進行了調整,并将估計誤差降低到了零。然而,誤差圖不能用于故障檢測,因為它們依賴于對真實狀态的了解。将測量的狀态值與加速度和速度的估計狀态值進行比較,可以提供一種檢測機制。

plot(t,Sig(1,:-Est(1,:)      
拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

加速度誤差圖顯示,在引入故障的10秒左右,平均誤差有微小的差異。檢視誤差統計,看看是否可以從計算的誤差中檢測出故障。加速度和速度誤差預計是正态分布的(噪聲模型都是高斯的)。是以,加速度誤差的峰度可能有助于識别由于摩擦力的變化和由此産生的誤差分布從對稱變為不對稱的變化情況。

plot(t,Kur(1,:)      
拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

忽略估計器仍在收斂和收集資料的前4秒,誤差的峰度相對穩定,在3(高斯分布的預期峰度值)附近有微小的變化。是以,在這個應用中,誤差統計不能被用來自動檢測摩擦力的變化。在這個應用中,使用誤差的峰度也是很困難的,因為過濾器正在适應并不斷地将誤差推向零,隻給出了一個誤差分布與零不同的短暫時間視窗。

是以在這個應用中,使用估計的摩擦力的變化提供了自動檢測電機故障的最好方法。來自已知無故障資料的摩擦力估計值(平均值和标準偏差)提供了摩擦力的預期界限,當這些界限被超過時,很容易檢測出來。下面的圖強調了這種故障檢測方法。

plot(t,x,[nan t],[Mean+3*STD,Mean-3*STD]      
拓端資料tecdat|matlab實作擴充卡爾曼濾波(EKF)進行故障檢測

摘要

這個例子展示了如何使用擴充的卡爾曼濾波器來估計一個簡單的直流電動機的摩擦力,并使用摩擦力估計值進行故障檢測。

繼續閱讀