kalman
상태 추정을 위한 칼만 필터 설계
구문
설명
[
은 플랜트 모델 kalmf
,L
,P
] = kalman(sys
,Q
,R
,N
)sys
와 잡음 공분산 데이터 Q
, R
, N
을 받아 칼만 필터를 만듭니다. 함수는 아래 다이어그램에 나오는 구성의 칼만 추정기에서 사용할 칼만 필터를 계산합니다.
모델 sys
를 알려진 입력 u 및 백색 공정 잡음 입력 w와 함께 구성하며, 여기서 w는 sys
에 대한 마지막 Nw개 입력으로 구성됩니다. "실제" 플랜트 출력 yt는 sys
의 모든 출력으로 구성됩니다. 잡음 공분산 데이터 Q
, R
, N
도 제공해야 합니다. 반환된 칼만 필터 kalmf
는 알려진 입력 u와 잡음 측정값 y를 받고 실제 플랜트 출력에 대한 추정값 와 플랜트 상태에 대한 추정값 를 생산하는 상태공간 모델입니다. 또한 kalman
은 칼만 이득 L
과 정상 상태 오차 공분산 행렬 P
도 반환합니다.
[
은 다음 조건 중 하나 또는 둘 모두가 존재할 때 칼만 필터를 계산합니다.kalmf
,L
,P
] = kalman(sys
,Q
,R
,N
,sensors
,known
)
sys
의 출력 중 일부가 측정되지 않은 경우.외란 입력 w가
sys
의 마지막 입력이 아닌 경우.
인덱스 벡터 sensors
는 측정할 sys
출력을 지정합니다. 이러한 출력은 y를 구성합니다. 인덱스 벡터 known
은 어떤 입력을 이미 알고 있는지(즉, 결정적인지) 지정합니다. 알려진 입력은 u를 구성합니다. kalman
명령은 sys
의 잔여 입력을 받아 이들이 확률적 입력 w가 되도록 합니다.
예제
SISO 플랜트를 위한 칼만 필터 설계하기
아래 다이어그램과 같이 입력에는 가산성 백색 잡음 w가 있고 출력에는 v가 있는 플랜트를 위한 칼만 필터를 설계합니다.
플랜트에 다음 상태공간 행렬이 있으며 미지정 샘플 시간(Ts = -1
)이 있는 이산시간 플랜트라고 가정하겠습니다.
A = [1.1269 -0.4940 0.1129 1.0000 0 0 0 1.0000 0]; B = [-0.3832 0.5919 0.5191]; C = [1 0 0]; D = 0; Plant = ss(A,B,C,D,-1); Plant.InputName = 'un'; Plant.OutputName = 'yt';
kalman
을 사용하려면 잡음 w
에 대한 입력이 있는 모델 sys
를 제공해야 합니다. 따라서 sys
는 Plant
와는 다릅니다. Plant
는 입력 un = u + w
를 취하기 때문입니다. 잡음 입력을 위한 합산점을 만들어 sys
를 생성할 수 있습니다.
Sum = sumblk('un = u + w'); sys = connect(Plant,Sum,{'u','w'},'yt');
sys = Plant*[1 1]
을 사용할 수도 있습니다.
잡음 공분산을 지정합니다. 플랜트에 잡음 입력이 하나 있고 출력이 하나 있으므로, 이러한 값은 스칼라입니다. 실제로 이러한 값은 시스템에서의 잡음원의 속성으로서, 시스템의 측정값이나 다른 지식을 통해 결정됩니다. 이 예제에서 두 잡음원은 모두 단위 공분산을 가지며 서로 상관관계가 없다고 가정합니다(N
= 0).
Q = 1; R = 1; N = 0;
필터를 설계합니다.
[kalmf,L,P] = kalman(sys,Q,R,N); size(kalmf)
State-space model with 4 outputs, 2 inputs, and 3 states.
칼만 필터 kalmf
는 입력 2개와 출력 4개를 갖는 상태공간 모델입니다. kalmf
는 플랜트 입력 신호 u와 잡음 있는 플랜트 출력 를 입력으로 받습니다. 첫 번째 출력은 추정된 실제 플랜트 출력 입니다. 남은 출력 3개는 상태 추정값 입니다. kalmf
의 입력과 출력 이름을 검토하면 kalman
이 이들의 레이블을 어떻게 지정하는지 알 수 있습니다.
kalmf.InputName
ans = 2x1 cell
{'u' }
{'yt'}
kalmf.OutputName
ans = 4x1 cell
{'yt_e'}
{'x1_e'}
{'x2_e'}
{'x3_e'}
칼만 이득 L
을 살펴봅니다. 3가지 상태가 있는 SISO 플랜트의 경우 L
은 3-요소 열 벡터입니다.
L
L = 3×1
0.3586
0.3798
0.0817
kalmf
를 사용하여 잡음으로 인한 측정 오차를 줄이는 방법은 칼만 필터링 항목을 참조하십시오.
MIMO 플랜트를 위한 칼만 필터 설계하기
입력이 3개이고 그중 하나는 공정 잡음 w를, 다른 두 개는 측정된 출력을 나타내는 플랜트가 있다고 가정하겠습니다. 플랜트에는 상태가 4개 있습니다.
다음과 같은 상태공간 행렬이 있다고 가정하고, sys
를 만듭니다.
A = [-0.71 0.06 -0.19 -0.17; 0.06 -0.52 -0.03 0.30; -0.19 -0.03 -0.24 -0.02; -0.17 0.30 -0.02 -0.41]; B = [ 1.44 2.91 0; -1.97 0.83 -0.27; -0.20 1.39 1.10; -1.2 0 -0.28]; C = [ 0 -0.36 -1.58 0.28; -2.05 0 0.51 0.03]; D = zeros(2,3); sys = ss(A,B,C,D); sys.InputName = {'u1','u2','w'}; sys.OutputName = {'y1','y2'};
플랜트에 공정 잡음 입력이 하나뿐이므로, 공분산 Q는 스칼라입니다. 이 예제에서는 공정 잡음이 단위 공분산을 갖는다고 가정합니다.
Q = 1;
kalman
은 Q
의 차원을 사용하여, 어떤 입력이 알려진 입력이고 어떤 입력이 잡음 입력인지 결정합니다. 스칼라 Q
의 경우, 사용자가 별도로 지정하지 않는 한 kalman
은 잡음 입력이 하나 있다고 가정하며 마지막 입력을 사용합니다(미측정 출력이 있는 플랜트 항목 참조).
두 출력의 측정 잡음에 대해 2×2 잡음 공분산 행렬을 지정합니다. 이 예제에서는 첫 번째 출력에는 단위 분산을 사용하고 두 번째 출력에는 분산으로 1.3을 사용합니다. 두 잡음 채널이 서로 상관관계가 없음을 나타내기 위해 비대각선 값을 0으로 설정합니다.
R = [1 0; 0 1.3];
칼만 필터를 설계합니다.
[kalmf,L,P] = kalman(sys,Q,R);
입력과 출력을 검토합니다. kalmf
의 입력과 출력이 무엇을 나타내는지를 쉽게 추적할 수 있도록 kalman
은 kalmf
의 InputName
, OutputName
, InputGroup
, OutputGroup
속성을 사용합니다.
kalmf.InputGroup
ans = struct with fields:
KnownInput: [1 2]
Measurement: [3 4]
kalmf.InputName
ans = 4x1 cell
{'u1'}
{'u2'}
{'y1'}
{'y2'}
kalmf.OutputGroup
ans = struct with fields:
OutputEstimate: [1 2]
StateEstimate: [3 4 5 6]
kalmf.OutputName
ans = 6x1 cell
{'y1_e'}
{'y2_e'}
{'x1_e'}
{'x2_e'}
{'x3_e'}
{'x4_e'}
따라서 알려진 두 입력 u1
과 u2
는 kalmf
의 첫 번째 두 입력이며 측정된 두 입력 y1
과 y2
는 kalmf
에 대한 마지막 두 입력입니다. kalmf
출력의 경우 첫 번째 두 항목은 추정된 출력이며, 남은 네 항목은 상태 추정값입니다. 칼만 필터를 사용하려면, 칼만 필터링의 SISO 플랜트에 대해 나타낸 것과 유사한 방법으로 이러한 입력을 플랜트와 잡음 신호에 연결하십시오.
미측정 출력이 있는 플랜트
입력이 4개이고 출력이 2개인 플랜트를 가정하겠습니다. 첫 번째와 세 번째 입력은 알려진 입력이며, 두 번째와 네 번째 입력은 공정 잡음을 나타냅니다. 플랜트에는 출력이 2개 있지만 두 번째 출력만 측정됩니다.
아래 상태공간 행렬을 사용하여 sys
를 만듭니다.
A = [-0.37 0.14 -0.01 0.04; 0.14 -1.89 0.98 -0.11; -0.01 0.98 -0.96 -0.14; 0.04 -0.11 -0.14 -0.95]; B = [-0.07 -2.32 0.68 0.10; -2.49 0.08 0 0.83; 0 -0.95 0 0.54; -2.19 0.41 0.45 0.90]; C = [ 0 0 -0.50 -0.38; -0.15 -2.12 -1.27 0.65]; D = zeros(2,4); sys = ss(A,B,C,D,-1); % Discrete with unspecified sample time sys.InputName = {'u1','w1','u2','w2'}; sys.OutputName = {'yun','ym'};
kalman
을 사용하여 이 시스템의 필터를 설계하기 위해, known
과 sensors
입력 인수를 사용하여 플랜트의 알려진 출력과 측정된 출력을 지정합니다.
known = [1 3]; sensors = [2];
잡음 공분산을 지정하고 필터를 설계합니다.
Q = eye(2); R = 1; N = 0; [kalmf,L,P] = kalman(sys,Q,R,N,sensors,known);
kalmf
의 입력과 출력 레이블을 확인하면 필터가 기대하는 입력과 필터가 반환하는 출력이 표시됩니다.
kalmf.InputGroup
ans = struct with fields:
KnownInput: [1 2]
Measurement: 3
kalmf.InputName
ans = 3x1 cell
{'u1'}
{'u2'}
{'ym'}
kalmf
는 sys
의 알려진 두 입력과 sys
의 잡음이 포함되어 측정된 출력을 입력으로 받습니다.
kalmf.OutputGroup
ans = struct with fields:
OutputEstimate: 1
StateEstimate: [2 3 4 5]
kalmf
의 첫 번째 출력은 측정된 플랜트 출력의 참값에 대한 추정값입니다. 남은 출력은 상태 추정값입니다.
입력 인수
sys
— 공정 잡음이 있는 플랜트 모델
ss
모델
공정 잡음이 있는 플랜트 모델로서, 상태공간(ss
) 모델로 지정됩니다. 플랜트에는 알려진 입력 u와 백색 공정 잡음 입력 w가 있습니다. 플랜트 출력 yt
는 측정 잡음을 포함하지 않습니다.
이러한 플랜트 모델의 상태공간 행렬은 다음과 같이 작성할 수 있습니다.
kalman
은 출력에서 가우스 잡음 v를 가정합니다. 따라서 연속시간에서 kalman
이 사용하는 상태공간 방정식은 다음과 같습니다.
이산시간에서의 상태공간 방정식은 다음과 같습니다.
known
입력 인수를 사용하지 않을 경우 kalman
에서는 Q
의 크기를 바탕으로 어떤 sys
입력이 잡음 입력인지를 결정합니다. 이 경우 kalman
은 마지막 Nw = size(Q,1)
입력을 잡음 입력으로 취급합니다. 잡음 입력 w
가 sys
의 마지막 입력이 아닌 경우, known
입력 인수를 이용해 어느 플랜트 입력이 알려진 입력인지 지정해 줄 수 있습니다. kalman
은 남은 입력을 확률적 입력으로 취급합니다.
플랜트 행렬 속성에 대한 다른 제약은 제한 사항 항목을 참조하십시오.
Q
— 공정 잡음 공분산
스칼라 | 행렬
스칼라나 NwxNw 행렬로 지정되는 공정 잡음 공분산으로, 여기서 Nw는 플랜트에 대한 잡음 입력의 개수입니다. kalman
은 Q
의 크기를 바탕으로 어떤 sys
입력이 잡음 입력인지 결정하고, 사용자가 known
입력 인수를 이용해 별도로 지정하지 않는 한 마지막 Nw = size(Q,1)
입력을 잡음 입력으로 받습니다.
kalman
은 공정 잡음 w가 분산 Q
= E(wwT)인 가우스 잡음이라고 가정합니다. 플랜트에 공정 잡음 입력이 하나뿐이면 Q
는 w의 분산과 동일한 스칼라입니다. 플랜트에 상관관계가 없는 잡음 입력이 여러 개 있으면 Q
는 대각 행렬입니다. 실제로 사용자는 시스템의 잡음 속성을 측정하거나 합리적으로 추측하여 Q
에 적합한 값을 결정합니다.
R
— 측정 잡음 공분산
스칼라 | 행렬
스칼라나 NyxNy 행렬로 지정되는 측정 잡음 공분산으로, 여기서 Ny는 플랜트 출력의 개수입니다. kalman
은 측정 잡음 v가 공분산 R
= E(vvT)인 백색 잡음이라고 가정합니다. 플랜트에 출력 채널이 하나뿐이면 R
은 v의 분산과 동일한 스칼라입니다. 플랜트에 상관관계가 없는 측정 잡음이 있는 출력 채널이 여러 개 있으면 R
은 대각 행렬입니다. 실제로 사용자는 시스템의 잡음 속성을 측정하거나 합리적으로 추측하여 R
에 적합한 값을 결정합니다.
측정 잡음 공분산에 대한 다른 제약은 제한 사항 항목을 참조하십시오.
N
— 잡음 교차 공분산
0 (디폴트 값) | 스칼라 | 행렬
잡음 교차 공분산으로, 스칼라 또는 Nw×Ny 행렬로 지정됩니다. kalman
은 공정 잡음 w와 측정 잡음 v가 N
= E(wvT)를 만족한다고 가정합니다. 두 잡음원이 서로 상관관계가 없으면 N
을 생략해도 되며, 이는 설정 N = 0
과 같습니다. 실제로 사용자는 시스템의 잡음 속성을 측정하거나 합리적으로 추측하여 N
에 적합한 값을 결정합니다.
sensors
— sys
의 측정된 출력
벡터
sys
의 측정된 출력으로, sys
의 출력 중 어느 것이 측정된 출력인지를 식별하는 인덱스의 벡터로 지정됩니다. 예를 들어 시스템에 출력이 3개 있지만 sys
의 첫 번째와 세 번째 출력에 해당하는 2개만 측정된다고 가정해 보겠습니다. 이 경우에는 sensors = [1 3]
으로 설정합니다.
known
— sys
의 알려진 입력
벡터
sys
의 알려진 입력으로, 알고 있는(즉, 결정적) 입력을 식별하는 인덱스의 벡터로 지정됩니다. 예를 들어 시스템에 입력이 3개 있지만 첫 번째와 두 번째 입력만 알고 있다고 가정해 보겠습니다. 이 경우에는 known = [1 2]
로 설정합니다. kalman
은 sys
의 모든 잔여 입력을 확률적 입력으로 해석합니다.
type
— 이산시간 추정기 유형
'current'
(디폴트 값) | 'delayed'
출력 인수
kalmf
— 칼만 추정기
ss
모델
칼만 필터 또는 칼만 추정기로, 상태공간(ss
) 모델로 반환됩니다. 결과로 얻게 되는 추정기는 입력 와 출력 를 가집니다. 다시 말해 kalmf
는 플랜트 입력 u와 잡음 있는 플랜트 출력 y를 입력으로 취하며, 추정된 무잡음 플랜트 출력 와 추정된 상태 값 를 출력으로 생산합니다.
kalman
은 kalmf
의 InputName
, OutputName
, InputGroup
, OutputGroup
속성을 자동으로 설정하여 사용자가 신호에 대응하는 입력과 출력을 쉽게 확인할 수 있게 합니다.
Mx
, My
— 상태 추정기의 혁신 이득
배열
이산시간 시스템용 상태 추정기의 혁신 이득으로, 배열로 반환됩니다.
Mx
와 My
는 이산시간 시스템의 기본 추정기인 type
= 'current'
일 때만 유효합니다. 연속시간 sys
또는 type
= 'delayed'
의 경우 Mx = My = []
입니다.
'current'
유형 추정기의 경우 Mx
와 My
는 업데이트 방정식의 혁신 이득입니다.
잡음 입력 w에서 플랜트 출력 y로 이어지는 직접 피드스루가 없으면(즉 H = 0, 자세한 내용은 이산시간 추정 항목 참조), 이며 출력 추정값은 으로 단순화됩니다.
배열 Mx
와 My
의 차원은 다음과 같이 sys
의 차원에 따라 달라집니다.
Mx
— NxxNy이며, 여기서 Nx는 플랜트의 상태 개수이고 Ny는 출력의 개수입니다.My
— NyxNy.
kalman
이 Mx
와 My
를 얻는 자세한 방법은 이산시간 추정 항목을 참조하십시오.
제한 사항
플랜트 및 잡음 데이터는 다음을 충족해야 합니다.
(C,A)는 감지 가능하며, 여기서 각각은 다음과 같습니다.
및 이며, 여기서 각각은 다음과 같습니다.
는 연속시간에서는 허수축에서, 또는 이산시간에서는 단위원에서 제어 불가능한 모드를 가질 수 없습니다.
알고리즘
연속시간 추정
알려진 입력 u, 백색 공정 잡음 w, 백색 측정 잡음 v인 연속시간 플랜트가 있다고 가정하겠습니다.
잡음 신호 w와 v가 다음을 충족합니다.
칼만 필터 또는 칼만 추정기는 정상 상태 오차 공분산을 최소화하는 상태 추정값 를 계산합니다.
칼만 필터는 다음과 같은 상태 방정식과 출력 방정식을 갖습니다.
필터 이득 L을 얻기 위해 kalman
은 대수 리카티 방정식을 풀어 다음을 얻습니다.
여기서
P는 대응하는 대수 리카티 방정식을 풉니다.
추정기는 알려진 입력 u와 측정값 y를 사용하여 출력 및 상태의 추정값 와 를 생성합니다.
이산시간 추정
이산 플랜트는 다음과 같이 주어집니다.
이산시간에서 잡음 신호 w와 v가 다음을 충족합니다.
이산시간 추정기는 다음과 같은 상태 방정식을 갖습니다.
kalman
은 이산 리카티 방정식을 풀어 이득 행렬 L을 얻습니다.
여기서 각각은 다음과 같습니다.
kalman
은 이산시간 칼만 추정기의 두 가지 변형된 형태인 현재 추정기(type
= 'current'
)와 지연 추정기(type
= 'delayed'
)를 계산할 수 있습니다.
현재 추정기 — 까지의 모든 사용 가능한 측정값을 사용하여 출력 추정값 과 상태 추정값 을 생성합니다. 이 추정기는 다음과 같은 출력 방정식을 갖습니다.
여기서 혁신 이득 Mx와 My는 다음과 같이 정의됩니다.
따라서 Mx는 새 측정값인 을 사용하여 상태 추정값 을 업데이트합니다.
마찬가지로 My는 업데이트된 출력 추정값을 계산합니다.
H = 0인 경우 이며, 출력 추정값은 으로 단순화됩니다.
지연 추정기 — 측정값을 yv[n–1]까지만 사용하여 출력 추정값 과 상태 추정값 을 생성합니다. 이 추정기는 다음과 같은 출력 방정식을 갖습니다.
지연 추정기는 제어 루프 내부에서 더 쉽게 구현할 수 있습니다.
버전 내역
R2006a 이전에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)