← Back to CoursesStemExpert
StemExpert
Expert · Handboek · 40. Sensorfusie en schatten
StemExpert · Brecht Corbeel · schoolium.me
StemExpert
E40. Sensorfusie en schatten
EExpert · deel E8 · Regeltechniek

Handboek · hoofdstuk 40Sensorfusie en schatten

Een schatting vertelt zowel wat je weet als hoe onzeker dat weten is

Eén sensor kan ruisen, achterlopen of uitvallen. Twee sensoren zijn alleen sterker als ze dezelfde toestand op een bekende manier meten. Je combineert voorspellen en meten, leidt een eendimensionaal Kalman-filter af en bewaakt de aannamen waarop de zekerheid berust.

9× uitleg3× uitgewerkt voorbeeld1× naslag1× verhaal1× het geheel2× code10 opdrachten in het werkboek± 12 lestijden
Co-located sensoren kunnen dezelfde toestand toetsen; een water- en luchtsensor meten verschillende toestanden.
Co-located sensoren kunnen dezelfde toestand toetsen; een water- en luchtsensor meten verschillende toestanden.
Na dit hoofdstuk
Uitleg · 40.1

Meer getallen betekenen niet meer zekerheid

1/17

Ruis is een variërende fout; bias is een systematische verschuiving. Meetvertraging is dynamiek. Een schaalfout verandert de helling van de sensoroverdracht. Middelen verlaagt alleen de spreiding van voldoende onafhankelijke ruis; een gedeelde kalibratiefout blijft. De NTC uit e06 heeft ongeveer 0,10 K sample-ruis, maar ook een kalibratie-onzekerheid die middelen niet verwijdert.

Fusie vraagt een gemeenschappelijke toestand. Een NTC in het reservoir en een SHT31 in de lucht mogen niet eenvoudig gemiddeld worden: water en lucht kunnen werkelijk verschillen. Dit hoofdstuk gebruikt twee co-located temperatuurprobes in een geijkte kamer als expliciet rekenmodel. Het NTC-ruisbudget dient als voorbeeld, geen nieuwe plaatsing van de bestaande reservoirsensor.

afwijkingherkennenmiddel helpt
witte ruissnelle spreidingja, bij kansmodel
biasblijvend verschil tegen referentienee
vertragingverschil na een temperatuurstapniet zonder dynamisch model
echte temperatuurgradiëntplaatsafhankelijk verschilnee, andere toestand
Uitleg · 40.2

Twee onafhankelijke metingen wegen

2/17

Neem en met nulgemiddelde onafhankelijke ruis en varianties . Een lineaire onvertekende schatting is . De foutvariantie is . Afleiden naar w en gelijkstellen aan nul geeft:

wegen met precisie, het omgekeerde van variantie
variantie van onafhankelijke statische fusie

Bij gedeelde foutcovariantie ontstaat een kruisterm. Twee sensoren met dezelfde referentie zijn niet automatisch onafhankelijk. De uitkomstvariantie onder een onjuist onafhankelijkheidsmodel kan te optimistisch worden. Een gedeelde bias kan als extra toestand worden geschat met een onafhankelijke referentie, of als onzekerheidsvloer behouden blijven.

Uitgewerkt voorbeeld · 40.3

De nauwkeurigste sensor krijgt meer gewicht

3/17
Twee co-located probes geven 20,10 °C en 19,80 °C.
Gegeven
  • ruis σ1=0,10 K,σ2=0,20 K
  • bias apart geijkt
Gevraagd
  • Gewogen schatting en standaardafwijking
Oplossing
  1. 1
    R1=0,01 K² en R2=0,04 K². Gewichten zijn 0,8 en 0,2.
  2. 2
    Schatting 0,8×20,10+0,2×19,80=20,04 °C.
  3. 3
    P=1/(100+25)=0,008 K²;σ=√P=0,08944 K. Een gemeenschappelijke kalibratie u=0,07 K geeft gecombineerd √(0,008+0,0049)=0,11358 K.
Antwoord
20,04 °C met 0,089 K ruis; inclusief die gedeelde ijking circa 0,114 K standaardonzekerheid.
Klopt dit? De fabrikantnauwkeurigheid van een SHT31 is geen automatisch Gaussische σ; de gebruikteσ2 is een expliciete rekenwaarde.
Uitleg · 40.4

Filteren is informatie over tijd gebruiken

4/17

Het voortschrijdend gemiddelde vermindert witte ruis, maar voegt vertraging toe. Een exponentieel filter heeft een vaste verhouding tussen oude schatting en nieuwe meting. Voor een gekozen continue tijdconstante is een nuttige exacte vrije-vervalkeuze.

E21 gebruikt voor de NTC een voorgestelde tijdconstante van 5 s bij 1 Hz en noemt het gewicht van de nieuwe meting α=0,181269. In de formule hier heet het gewicht van de oude schatting α: dat is 0,818731. Beide notaties beschrijven dezelfde update. De voorspelde witte-ruisspreiding is 0,03157 K; de ijkonzekerheid en sensorkastvertraging van 60 s blijven apart.

Bij onregelmatige samples is Δt de echte tijdstap. Sla ontbrekende data niet als nul op en herhaal een oude meting niet alsof die nieuw is: dat maakt onzekerheid kunstmatig klein. De fusieparameters hier zijn expliciete voorbeelden. Het analoge A3-filter uit e21 heeft 64,144 Hz als berekende kantelfrequentie; het bestaande ±10 mV-signaal uit e07 is al gefilterd en wordt niet nog eens met dezelfde demping vermenigvuldigd.

hier: gewicht van de oude schatting
Uitleg · 40.5

Een hoek uit twee verschillende principes

5/17

Een gyroscoop meet hoeksnelheid. Integreren geeft hoek, maar een kleine bias stapelt op:0,20 °/s geeft 12° drift per minuut. Een accelerometer meet specifieke kracht. In quasistatische omstandigheden kan de richting van zwaartekracht de hellingshoek geven; bij de afgesproken assen . Tijdens versnellen of trillen is die interpretatie niet volledig geldig.

De gyroscoop is sterk op snelle beweging, de accelerometer corrigeert langzame drift. Het complementaire filter combineert:

éénassige complementaire schatting

Gebruik in een fysische berekening radianen; de code toont graden zodat drift leesbaar is. De éénassige demonstratie is geen volledige 3D-oriëntatie-estimator. Nulpuntskalibratie van de gyro gebeurt bij aantoonbare stilstand.

Code · 40.6

Complementaire schatting met een echte verstoring

6/17

De modelhoek is de eerste 5 s nul voor ijking. Daarna volgt een sinus. Bij 40–45 s treedt een extra accelerometerhoek op door een translatieverstoring. De demonstratie laat zien waarom een filter een foutmodel nodig heeft en waarom vertrouwen tijdelijk moet worden aangepast.

Pythoncomplementair.py20 regelsDownload
import numpy as nprng=np.random.default_rng(41)dt=0.1; t=np.arange(0,65,dt)theta=np.where(t<5,0,10*np.sin((t-5)/12))  # graden voor leesbare uitvoeromega=np.where(t<5,0,10/12*np.cos((t-5)/12))gyro=omega+0.20+rng.normal(0,0.05,len(t))acc=theta+rng.normal(0,0.8,len(t))acc[(t>=40)&(t<45)]+=8  # translatie: zwaartekrachtmodel tijdelijk foutbias=gyro[t<5].mean()   # stilstaande ijkfasealpha=np.exp(-dt/5.0)g=0.;c=0.;integraal=[];complement=[]for w,a in zip(gyro,acc):    g+=dt*(w-bias)    c=alpha*(c+dt*(w-bias))+(1-alpha)*a    integraal.append(g);complement.append(c)print("gyro-bias",round(bias,4),"graden/s")print("alpha",round(alpha,6))mask=(t>=5)&~((t>=40)&(t<50))print("rms complement buiten translatie",      round(np.sqrt(np.mean((np.array(complement)[mask]-theta[mask])**2)),4),"graden")
gyro-bias 0.203 graden/s
alpha 0.980199
rms complement buiten translatie 0.4101 graden
0102030405060−12−8−40481216t (s)hoek (°)modelhoekcomplementairaccelerometerhoek
Een translatieverstoring maakt de accelerometerhoek tijdelijk onjuist; het filter vermindert die invloed maar herkent de oorzaak niet vanzelf.
Uitleg · 40.7

Kalman begint met een toestand en een onzekerheid

7/17

Een 1D-toestandsmodel is . De meting is . Procesruis w heeft variantie Q; meetruis v variantie R. In het eenvoudige temperatuurvoorbeeld zijn a=h=1 en b=0: de temperatuur volgt een random walk. De toestandsvoorspelling en variantie worden:

voorspelstap

De variantie groeit als het model zonder meting doorloopt. Q=0 zou verklaren dat het model perfect is; een ontbrekende verwarming, deurbeweging of ander echt proces kan dan nauwelijks gecorrigeerd worden. Q heeft eenheid K² per stap en hoort dus bij Δt; een diffusie-intensiteit q in K²/s geeft Q=qΔt.

Uitleg · 40.8

De gain volgt uit minimaal verwachte kwadratische fout

8/17

Voor h=1 corrigeer je . Voorspellings- en meetfout zijn onafhankelijk in het model. De nieuwe variantie is . Afleiden geeft . Daarom:

correctie met innovatie

Veel meetruis geeft weinig correctie; een onzekere voorspelling krijgt juist een groot meetgewicht. Dit is hetzelfde precisieprincipe als statische fusie, maar de modelvoorspelling levert één van de twee schattingen. Voor h≠1 is . Een Kalman-filter is optimaal onder het passende lineaire Gaussmodel; bij bias, verkeerde dynamiek of nietlineaire metingen is die garantie niet zomaar geldig.

Uitgewerkt voorbeeld · 40.9

Een volledige Kalmanstap

9/17
De voorspelde temperatuur is 20,00 °C met P−=0,04 K². De nieuwe meting is 20,30 °C met R=0,01 K².
Gegeven
  • h=1
Gevraagd
  • Gain, innovatie, schatting en nieuweσ
Oplossing
  1. 1
    S=P−+R=0,05 K²; K=0,04/0,05=0,8.
  2. 2
    ν=0,30 K; correctie 0,24 K; schatting 20,24 °C.
  3. 3
    P=(1−0,8)²×0,04+0,8²×0,01=0,008 K²;σ=0,08944 K. Equivalent: P=(1−K)P−.
Antwoord
20,24 °C met σ=0,0894 K binnen het aangenomen model.
Klopt dit? De innovatie is maar 1,342 standaardafwijkingen omdat √S=0,2236 K; niet verdacht in dit rekenmodel.
Uitleg · 40.10

Foutdetectie gebruikt de innovatie

10/17

De innovatievariantie is . De genormaliseerde kwadratische innovatie vergelijkt afwijking met verwachte onzekerheid. De lescode weigert bij h=1 waarden groter dan 9, een 3σ-regel voor één meting onder het model. Dit is een detector, niet de standaard Kalman-update zelf. Normale ruis kan soms ook afgewezen worden.

Een bruikbaar beleid houdt counters, hysterese en herstelvoorwaarden bij. Een afgekeurde sensor krijgt een foutstatus; een enkele sprong hoeft nog geen permanent defect te zijn. Bij twee sensoren die onderling verschillen weet je zonder onafhankelijke referentie niet zeker welke faalt. Het model kan zelf fout zitten. Temperatuurgradiënten, leveringstijd en kalibratie worden daarom apart gecontroleerd.

scalar innovatiepoort
Code · 40.11

Temperatuur volgen terwijl een sensor faalt

11/17

De tweeσ-waarden zijn modelruis. Sensor 1 krijgt een 2 K-bias en sensor 2 ontbreekt later 31 samples. Sequentiële updates zijn hier alleen gerechtvaardigd doordat de gebruikte ruistermen onafhankelijk gegenereerd zijn. Er zit geen gedeelde kalibratiebias in de simulatie; die moet in echt onzekerheidsbudget nog worden toegevoegd.

Pythonkalman1d.py28 regelsDownload
import numpy as nprng=np.random.default_rng(40)n=360t=np.arange(n,dtype=float)  # elke seconde, start08:00 UTC+1waar=20+0.002*tz1=waar+rng.normal(0,0.10,n)z2=waar+rng.normal(0,0.20,n)z1[120:200]+=2.0  # defect met bias, geen normale ruisz2[250:281]=np.nanx=20.0; P=0.25; Q=0.0004schat=[]; onzeker=[]; afkeur=[0,0]for k in range(n):    P+=Q                  # random-walkvoorspelling    for j,(z,R) in enumerate(((z1[k],0.10**2),(z2[k],0.20**2))):        if not np.isfinite(z): continue        innovatie=z-x; S=P+R        if innovatie**2/S>9:            afkeur[j]+=1; continue        K=P/S        x+=K*innovatie        P=(1-K)**2*P+K*K*R   # Joseph-vorm, scalar    schat.append(x); onzeker.append(np.sqrt(P))schat=np.array(schat)print("rms sensor1",f"{np.sqrt(np.mean((z1-waar)**2)):.4f}")print("rms schatting",f"{np.sqrt(np.mean((schat-waar)**2)):.4f}")print("afgekeurd",afkeur)print("laatste sigma",f"{onzeker[-1]:.4f}","K")assert np.sqrt(np.mean((schat-waar)**2))<0.12
rms sensor1 0.9585
rms schatting 0.0376
afgekeurd [82, 0]
laatste sigma 0.0400 K
06012018024030036020212223t (s)T (°C)sensor 1modelwaarheidgated Kalman
Voorbeeld vanaf 08:00 UTC+1: sensor 1 krijgt 120–199 s een 2 K-bias; sensor 2 ontbreekt 250–280 s.
Uitleg · 40.12

Kalibratie en voorspellen hebben verschillende taken

12/17

Kalibratie legt het verband vast tussen aanwijzing en referentiewaarde. Gebruik twee of meer gekende temperaturen voor offset én helling, laat probes thermisch uitmiddelen en registreer referentie-onzekerheid. Een filter kan een foute ijklijn niet betrouwbaar wegmiddelen. Kalibreer de meetketen inclusief montage, ADC en voedingsreferentie.

Synchroniseer meettijdstip, niet enkel ontvangsttijd. Een snelle probe en een 60 s-sensorkast lopen tijdens opwarming werkelijk uiteen; corrigeer of modelleer die dynamiek vóór fusie. Bewaar ruwe data, kalibratieversie en kwaliteit naast de schatting. Dat maakt later zichtbaar of de fout uit meetketen, model of beslissing kwam.

logveldreden
raw en eenheidherberekenen
meet- en ontvangsttijdvertraging aantonen
kalibratieversiebias herleiden
P, innovatie, gatingzekerheid toetsen
modus/foutbesluit reconstrueren
Uitgewerkt voorbeeld · 40.13

Een ijklijn herstellen

13/17
Een probe geeft−0,3 °C bij 0 °C en 39,3 °C bij 40 °C.
Gegeven
  • lineair model z=ax+b
  • referenties worden als exact rekenvoorbeeld behandeld
Gevraagd
  • a, b en omzetting van z=19,5 °C
Oplossing
  1. 1
    b=−0,3; a=(39,3+0,3)/40=0,99.
  2. 2
    Werkelijke T=(z+0,3)/0,99. Bij z=19,5 volgt T=20,0 °C.
  3. 3
    Een onafhankelijke derde temperatuur controleert lineariteit; referentie-onzekerheid wordt daarna gepropageerd in de ijkparameters.
Antwoord
Offset én schaal zijn nodig; alleen +0,3 corrigeren geeft 19,8 °C en blijft 0,2 K fout.
Uitleg · 40.14

Ontbrekende data vergroten de onzekerheid

14/17

Zonder nieuwe meting doe je alleen de voorspelstap. Bij random walk groeit P na m ontbrekende stappen met mQ. De uitkomst mag nog een voorspelling zijn, maar moet dat herkenbaar tonen. Een alarmkanaal dat alleen de schatting ziet kan anders een modelvoorspelling als veilige waarneming behandelen.

De supervisor kiest een gedegradeerde modus op basis van leeftijd, kwaliteit en voorspelonzekerheid. Absolute O₂- en CO₂-gevaren blijven op het onafhankelijke lokale meet-/alarmpad; ze worden niet weggefilterd omdat het model een normale waarde verwacht. Fusie ondersteunt betrouwbaarheid, maar vervangt geen hazardanalyse of hardwarebeveiliging.

random-walkonzekerheid zonder metingen
Verhaal · 40.15

Kalman maakte voorspelling en fout samen recursief

15/17

R. E. Kalman publiceerde in 1960 een nieuwe benadering van lineaire filtering en voorspelling met toestanden en hun foutcovariantie. Het centrale idee past op deze les: de beste huidige toestand én de onzekerheid worden telkens vooruitgebracht, waarna een nieuwe meting ze corrigeert. Je hoeft niet alle oude metingen elke stap opnieuw te verwerken.

Primaire bron:Kalman, 1960, A New Approach to Linear Filtering and Prediction Problems. Voor de bredere 3D-oriëntatiecontext:Mahony, Hamel en Pflimlin, 2008, Nonlinear Complementary Filters. De les gebruikt de veel eenvoudigere 1D- en éénassige vorm; zij beweert niet die volledige 3D-filterimplementatie te leveren. Geraadpleegd 30-09-2026.

recursief bewaardniet beweerd
x en Pvolledige waarheid
innovatiezekere oorzaak van een storing
modelaannamenalle sensoren onafhankelijk
Naslag · 40.16

Eenheden en stappen

16/17
scalar Kalman-gain
symboolbetekeniseenheid
toestandsfoutvariantieK²
meetruisvariantieK²
procesruis per stapK²
staphandeling
kalibreercorrigeer offset/schaal, leg onzekerheid vast
synchroniseermeetmoment en vertraging
voorspelx−, P−
toetsbereik, leeftijd, innovatie
corrigeergeldige onafhankelijke meting
beslissupervisor kiest modus
Het geheel · 40.17

Metingen krijgen een geschiedenis en een geldigheidsgebied

17/17

Filters, procesmodellen en foutdetectie voegen verschillende kennis toe. Een centrale logger bewaart de reden van elke sensorweigering, zodat de stationsoperator de schatting kan beoordelen.

Ruisspreiding en ijkonzekerheid.

Filtervertraging en bemonstering.

Tijd, kwaliteit en oude berichten.

Modeltoestand en sensorvertraging.

Habitat

Habitat voert fusie alleen uit voor sensoren die dezelfde toestand meten. De Pi bewaart x, P, innovaties en sensorstatus; lokale alarmen blijven onafhankelijk. Het 1 s/Q/R/3σ-model is een lesvoorbeeld en wordt alleen na kalibratie en proefvalidatie als productieconfiguratie gekozen.

Samenvatting

In het kort

Begrippen

Wat je nu kent

bias
Een systematische afwijking die niet verdwijnt door alleen veel samples te middelen.
innovatie
Het verschil tussen een nieuwe meting en de voorspelde meetwaarde.
Kalman-gain
Het gewicht waarmee een innovatie de voorspelling corrigeert.
procesruis
Onzekerheid in de voorspelling van een toestandstap.
complementair filter
Een combinatie van frequentiegebieden die elkaar aanvullen tot de geschatte toestand.
Aan de slag in het werkboek10 opdrachten, van oefenen tot uitdagen