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.

- Je kan ruis, bias, vertraging en meetonzekerheid onderscheiden.
- Je kan onafhankelijke metingen met variantiegewichten combineren.
- Je kan een complementair hoekfilter programmeren en de zwaartekrachtaanname toetsen.
- Je kan voorspelling, gain, innovatie en covariantie van een 1D-Kalman-filter afleiden.
- Je kan kalibratie, sensoruitval en foutdetectie als apart beleid ontwerpen.
Meer getallen betekenen niet meer zekerheid
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.
| afwijking | herkennen | middel helpt |
|---|---|---|
| witte ruis | snelle spreiding | ja, bij kansmodel |
| bias | blijvend verschil tegen referentie | nee |
| vertraging | verschil na een temperatuurstap | niet zonder dynamisch model |
| echte temperatuurgradiënt | plaatsafhankelijk verschil | nee, andere toestand |
Twee onafhankelijke metingen wegen
Neem en met nulgemiddelde onafhankelijke ruis en varianties . Een lineaire onvertekende schatting is . De foutvariantie is . Afleiden naar w en gelijkstellen aan nul geeft:
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.
De nauwkeurigste sensor krijgt meer gewicht
- ruis σ1=0,10 K,σ2=0,20 K
- bias apart geijkt
- Gewogen schatting en standaardafwijking
- 1R1=0,01 K² en R2=0,04 K². Gewichten zijn 0,8 en 0,2.
- 2Schatting 0,8×20,10+0,2×19,80=20,04 °C.
- 3P=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.
Filteren is informatie over tijd gebruiken
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.
Een hoek uit twee verschillende principes
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:
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.
Complementaire schatting met een echte verstoring
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.
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
Kalman begint met een toestand en een onzekerheid
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:
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.
De gain volgt uit minimaal verwachte kwadratische fout
Voor h=1 corrigeer je . Voorspellings- en meetfout zijn onafhankelijk in het model. De nieuwe variantie is . Afleiden geeft . Daarom:
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.
Een volledige Kalmanstap
- h=1
- Gain, innovatie, schatting en nieuweσ
- 1S=P−+R=0,05 K²; K=0,04/0,05=0,8.
- 2ν=0,30 K; correctie 0,24 K; schatting 20,24 °C.
- 3P=(1−0,8)²×0,04+0,8²×0,01=0,008 K²;σ=0,08944 K. Equivalent: P=(1−K)P−.
Foutdetectie gebruikt de innovatie
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.
Temperatuur volgen terwijl een sensor faalt
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.
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.12rms sensor1 0.9585 rms schatting 0.0376 afgekeurd [82, 0] laatste sigma 0.0400 K
Kalibratie en voorspellen hebben verschillende taken
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.
| logveld | reden |
|---|---|
| raw en eenheid | herberekenen |
| meet- en ontvangsttijd | vertraging aantonen |
| kalibratieversie | bias herleiden |
| P, innovatie, gating | zekerheid toetsen |
| modus/fout | besluit reconstrueren |
Een ijklijn herstellen
- lineair model z=ax+b
- referenties worden als exact rekenvoorbeeld behandeld
- a, b en omzetting van z=19,5 °C
- 1b=−0,3; a=(39,3+0,3)/40=0,99.
- 2Werkelijke T=(z+0,3)/0,99. Bij z=19,5 volgt T=20,0 °C.
- 3Een onafhankelijke derde temperatuur controleert lineariteit; referentie-onzekerheid wordt daarna gepropageerd in de ijkparameters.
Ontbrekende data vergroten de onzekerheid
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.
Kalman maakte voorspelling en fout samen recursief
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 bewaard | niet beweerd |
|---|---|
| x en P | volledige waarheid |
| innovatie | zekere oorzaak van een storing |
| modelaannamen | alle sensoren onafhankelijk |
Eenheden en stappen
| symbool | betekenis | eenheid |
|---|---|---|
| toestandsfoutvariantie | K² | |
| meetruisvariantie | K² | |
| procesruis per stap | K² |
| stap | handeling |
|---|---|
| kalibreer | corrigeer offset/schaal, leg onzekerheid vast |
| synchroniseer | meetmoment en vertraging |
| voorspel | x−, P− |
| toets | bereik, leeftijd, innovatie |
| corrigeer | geldige onafhankelijke meting |
| beslis | supervisor kiest modus |
Metingen krijgen een geschiedenis en een geldigheidsgebied
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 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.
In het kort
- Middelen verwijdert onafhankelijke ruis, geen gedeelde bias of echte gradiënt.
- Complementaire fusie combineert snelle gyro-informatie met langzame zwaartekrachtreferentie.
- Kalman voorspelt toestand en covariantie en corrigeert met een gain uit varianties.
- Innovatiegating en supervisorbeleid behandelen fouten en ontbreken apart.
- Schattingen blijven gebonden aan model, ijking, tijd en systeemgrens.
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.