<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RedBaron</id>
		<title>RN-Wissen.de - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RedBaron"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/RedBaron"/>
		<updated>2026-04-11T17:34:05Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:TWI_Slave_mit_avr-gcc&amp;diff=20612</id>
		<title>Diskussion:TWI Slave mit avr-gcc</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:TWI_Slave_mit_avr-gcc&amp;diff=20612"/>
				<updated>2012-08-08T09:58:30Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hallo Uwe,&lt;br /&gt;
&lt;br /&gt;
als mein Master mit Deinem Slave reden wollte, hängte sich der wegen nen Programmierfehler meines Masters auf. Die SCL-Leitung hat er dadurch einfach nicht mehr losgelassen. Durch ändern der Zeile&lt;br /&gt;
&lt;br /&gt;
//switched to the non adressed slave mode...&lt;br /&gt;
#define TWCR_RESET TWCR = (1&amp;lt;&amp;lt;TWEN)|(1&amp;lt;&amp;lt;TWIE)|(1&amp;lt;&amp;lt;TWINT)|(1&amp;lt;&amp;lt;TWEA)|(0&amp;lt;&amp;lt;TWSTA)|(0&amp;lt;&amp;lt;TWSTO)|(0&amp;lt;&amp;lt;TWWC); &lt;br /&gt;
&lt;br /&gt;
nach &lt;br /&gt;
&lt;br /&gt;
//switched to the non adressed slave mode...&lt;br /&gt;
#define TWCR_RESET TWCR = (1&amp;lt;&amp;lt;TWEN)|(1&amp;lt;&amp;lt;TWIE)|(1&amp;lt;&amp;lt;TWINT)|(1&amp;lt;&amp;lt;TWEA)|(0&amp;lt;&amp;lt;TWSTA)|(1&amp;lt;&amp;lt;TWSTO)|(0&amp;lt;&amp;lt;TWWC); &lt;br /&gt;
&lt;br /&gt;
war alles in Butter.&lt;br /&gt;
&lt;br /&gt;
Gruß Frank&lt;br /&gt;
&lt;br /&gt;
:: Ok, habe es jetzt korrigiert, aber noch nicht selbst getestet... Solle laut Datenblatt aber korrekt sein. mfg --[[Benutzer:Uwegw|uwegw]] 11:47, 12. Apr 2010 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Kelinigkeiten ==&lt;br /&gt;
&lt;br /&gt;
Hallo,&lt;br /&gt;
&lt;br /&gt;
ich habe den Code für ein Projekt vor 2 Jahren benutzt, jetzt habe ich nach dem Code gesucht um ein Update zu machen.&lt;br /&gt;
&lt;br /&gt;
Die Oben genannten Probleme hatte ich damals auch - jetzt beim ersetzen des Moduls fällt mir folgendes auf:&lt;br /&gt;
&lt;br /&gt;
- I2C_reg_Schreibschutz ist nicht definiert und kommt im Code auch nur einmal vor. Ich denke mal, dass es dafür sorgen soll, dass richtig adressiert worden ist, oder?&lt;br /&gt;
&lt;br /&gt;
I2C_reg_Schreibschutz in twislave.h definieren ich denke das war als array gedacht?&lt;br /&gt;
I2C_reg_Schreibschutz sollte in der ini routine initialisiert werden... - dabei kann man gleich den Speicherbereich vorbeschreiben.&lt;br /&gt;
: Das war tatsächlich als Array gedacht, über das man den Schreibzugriff auf bestimmte Register sperren konnte. Wenn ich es mir recht überlege, ist diese Funktion recht überflüssig. Ich habe sie also erst mal entfernt. --[[Benutzer:Uwegw|uwegw]] 16:39, 2. Jul 2010 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich würde auch die Interrupt aktivierung nicht in der Ini routine machen, sondern lieber ausserhalb, denn normalerweise müssen ja noch andere Sachen vorbereitet werden.&lt;br /&gt;
&lt;br /&gt;
Mein Vorschlag für die Ini routine:&lt;br /&gt;
&lt;br /&gt;
void init_twi_slave(uint8_t adr)&lt;br /&gt;
{   &lt;br /&gt;
    uint8_t i=0;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
    TWAR= adr; //Adresse setzen&lt;br /&gt;
    TWCR &amp;amp;= ~(1&amp;lt;&amp;lt;TWSTA)|(1&amp;lt;&amp;lt;TWSTO);&lt;br /&gt;
    TWCR|= (1&amp;lt;&amp;lt;TWEA) | (1&amp;lt;&amp;lt;TWEN)|(1&amp;lt;&amp;lt;TWIE);&lt;br /&gt;
    buffer_adr=0xFF;&lt;br /&gt;
    for(i=0;i&amp;lt;i2c_buffer_size;i++)&lt;br /&gt;
	{&lt;br /&gt;
		i2cdata[i]=0;&lt;br /&gt;
		I2C_reg_Schreibschutz[i]=0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Warum definierst Du i2cdata zweimal? Einmal im header reicht ....&lt;br /&gt;
&lt;br /&gt;
Ansonsten vielen Dank, das ist sehr hilfreich...&lt;br /&gt;
&lt;br /&gt;
Christian&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hallo Uwe,&lt;br /&gt;
&lt;br /&gt;
ich setze mich gerade mit deinem Code in &amp;quot;twislave&amp;quot; auseinander. Ich habe folgende Anmerkungen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Puffer wird mit &amp;quot;volatile uint8_t i2cdata[i2c_buffer_size+1];&amp;quot; deklariert. Warum das &amp;quot;+1&amp;quot; bei der Größe? Du fragst überall die Puffergrenze mit &amp;quot;...&amp;lt;i2c_buffer_size&amp;quot; ab. Damit würde &amp;quot;i2cdata[i2c_buffer_size]&amp;quot; nie angefasst werden.&lt;br /&gt;
&lt;br /&gt;
Der Puffer wird sowohl in der .h- als auch in der .c-Datei deklariert. Die Deklaration in der .h-Datei wäre ausreichend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''init_twi_slave:'''&lt;br /&gt;
&lt;br /&gt;
Hier steht &amp;quot;TWCR &amp;amp;= ~(1&amp;lt;&amp;lt;TWSTA) | (1&amp;lt;&amp;lt;TWSTO);&amp;quot;. Durch ~(1&amp;lt;&amp;lt;TWSTA) sind bereits alle Bits bis auf TWSTA auf 1, also auch TWSTO. &amp;quot;| (1&amp;lt;&amp;lt;TWSTO)&amp;quot; wäre also unnötig. Meinst du etwas anderes?&lt;br /&gt;
&lt;br /&gt;
Danach folgt &amp;quot;TWCR |= (1&amp;lt;&amp;lt;TWEA) | (1&amp;lt;&amp;lt;TWEN) | (1&amp;lt;&amp;lt;TWIE);&amp;quot;. Diese Bits wurden bereits in der vorhergehenden Anweisung gesetzt. Diese Zeile müsste überflüssig sein.&lt;br /&gt;
&lt;br /&gt;
sei() in der Initialisierungsroutine ist nicht gut! Wenn mehrere Hardwarekomponenten zu initialisieren sind (z.B. USART), kann es sein, dass diese bereits im unitialisierten Zustand oder bei der Initialisierung Interrupts auslösen. sei() gehört auf jeden Fall ins Hauptprogramm. Ggf. wäre eine Kommentarzeile mit dem Hinweis auf sei() angemessen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ISR:'''&lt;br /&gt;
  ...&lt;br /&gt;
  { buffer_adr = 0; //Adresse auf Null setzen. Ist das sinnvoll? TO DO!&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
Ich denke, dass ist nicht sinnvoll. Besser ist es, buffer_adr auf 0xFF stehen zu lassen. Das setzen auf 0 bedeutet, dass bei einer offensichtlich fehlerhaften Ansteuerung ggf. gültiger Speicherbereich überschrieben würde. Das sollte nicht sein.&lt;br /&gt;
&lt;br /&gt;
Die folgende Codefolge taucht in ähnlicher Form mehrfach auf:&lt;br /&gt;
 { if(buffer_adr &amp;lt; i2c_buffer_size)&lt;br /&gt;
   { i2cdata[buffer_adr] = data; //Daten in Puffer schreiben&lt;br /&gt;
   }&lt;br /&gt;
   buffer_adr++; //Buffer-Adresse weiter zählen für nächsten Schreibzugriff&lt;br /&gt;
   ...&lt;br /&gt;
&lt;br /&gt;
Das bedingungslose Hochzählen des Pufferindex bedeutet, dass er bei genügend langen Übertragungssequenzen zunächst zu 0xFF (also ungültig) wird und dann zu 0x00 überläuft und wieder in gültige Indexbereiche kommt. Die Sequenz muss noch nicht einmal sehr lang sein, da man den Index durch die Addressierung kurz vor das Ende des Puffers positionieren kann. Besser wäre&lt;br /&gt;
&lt;br /&gt;
 { if(buffer_adr &amp;lt; i2c_buffer_size)&lt;br /&gt;
   { i2cdata[buffer_adr++] = data; //Daten in Puffer schreiben&lt;br /&gt;
   }&lt;br /&gt;
   ...&lt;br /&gt;
&lt;br /&gt;
Eigentlich müsste man auch noch berücksichtigen, dass wenn der Index 254 errreicht wurde, weder weiter hochgezählt werden darf (würde zu 0xFF führen) noch ein weiteres Mal Daten gespeichert werden dürfen. Einfacher ist es, man begrenzt die max. Puffergröße auf 253 Byte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  case TW_ST_DATA_ACK: //0xB8 Slave Transmitter, Daten wurden angefordert&lt;br /&gt;
     if (buffer_adr == 0xFF) //zuvor keine Leseadresse angegeben!&lt;br /&gt;
     { buffer_adr = 0;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
Auch hier: Offensichtlich ein Fehlerzustand, der zu gültigen Daten führt. Wenn man diesen Fehler macht, sucht man ziemlich lange nach der Ursache. Kurz danach wird auf Datenanforderung außerhalb des Pufferbereichs mit dem Senden von 0x00 reagiert. Dies sollte man auch diesem Fehler machen. Anweisung also am besten streichen.&lt;br /&gt;
&lt;br /&gt;
Apropos &amp;quot;lange suchen&amp;quot;... Ich bin schon etwas älter. Da könnte der Ausdruck &amp;quot;totsuchen&amp;quot; zur Realität werden :-)&lt;br /&gt;
&lt;br /&gt;
Viele Grüße&lt;br /&gt;
RedBaron&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15865</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15865"/>
				<updated>2009-12-29T09:58:13Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
y(t): neuer Schätzwert&amp;lt;br/&amp;gt;&lt;br /&gt;
y(t-1): alter Schätzwert&amp;lt;br/&amp;gt;&lt;br /&gt;
x: neuer Messwert&amp;lt;br/&amp;gt;&lt;br /&gt;
a: Gewicht im Bereich 0..1&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder: y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&amp;lt;br/&amp;gt;&lt;br /&gt;
a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)   oder:                 y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15864</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15864"/>
				<updated>2009-12-29T09:57:13Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
y(t): neuer Schätzwert&amp;lt;br/&amp;gt;&lt;br /&gt;
y(t-1): alter Schätzwert&amp;lt;br/&amp;gt;&lt;br /&gt;
x: neuer Messwert&amp;lt;br/&amp;gt;&lt;br /&gt;
a: Gewicht im Bereich 0..1&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&amp;lt;br/&amp;gt;&lt;br /&gt;
a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15863</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15863"/>
				<updated>2009-12-29T09:56:34Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&amp;lt;br/&amp;gt;&lt;br /&gt;
a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15862</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15862"/>
				<updated>2009-12-29T09:55:53Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&amp;lt;br/&amp;gt;&lt;br /&gt;
a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15861</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15861"/>
				<updated>2009-12-29T09:55:15Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C)&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&amp;lt;br\&amp;gt;&lt;br /&gt;
a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15860</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15860"/>
				<updated>2009-12-29T09:54:35Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C)&amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&amp;lt;br\&amp;gt;&lt;br /&gt;
a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&amp;lt;\code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15859</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15859"/>
				<updated>2009-12-29T09:53:54Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C)&amp;lt;br\&amp;gt;&lt;br /&gt;
&amp;lt;c&amp;gt; &lt;br /&gt;
a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&amp;lt;br\&amp;gt;&lt;br /&gt;
a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&amp;lt;\c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15858</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15858"/>
				<updated>2009-12-29T09:53:07Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C)&amp;lt;br\&amp;gt; &lt;br /&gt;
a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&amp;lt;br\&amp;gt;&lt;br /&gt;
a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15857</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15857"/>
				<updated>2009-12-29T09:52:51Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C) &lt;br /&gt;
a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&amp;lt;br\&amp;gt;&lt;br /&gt;
a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15856</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15856"/>
				<updated>2009-12-29T09:52:30Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C) &lt;br /&gt;
a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&lt;br /&gt;
a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15855</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15855"/>
				<updated>2009-12-29T09:51:56Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C) a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&lt;br /&gt;
            a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&amp;lt;br\&amp;gt;&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15854</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15854"/>
				<updated>2009-12-29T09:51:38Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C) a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&lt;br /&gt;
            a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&amp;lt;br\&amp;gt;&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47&amp;lt;br\&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15853</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15853"/>
				<updated>2009-12-29T09:51:06Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C) a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&lt;br /&gt;
            a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&amp;lt;br\&amp;gt;&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47  &lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15852</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15852"/>
				<updated>2009-12-29T09:50:40Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C) a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&lt;br /&gt;
            a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&lt;br /&gt;
t   0  1  2  3  4  5  6  7  8  9&lt;br /&gt;
x   0  0 50 50 50 50 50 50 40 50&lt;br /&gt;
y   0  0 25 37 43 46 48 49 45 47  &lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15851</id>
		<title>Diskussion:Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Gleitender_Mittelwert_in_C&amp;diff=15851"/>
				<updated>2009-12-29T09:48:09Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich empfehle eine Algorithmus, der in etwa einer exponentiellen Glättung entspricht. Dies Methode ist deutlich einfacher zu implementieren und liefert bereits ab dem ersten Messwert sinnvolle Ergebnisse. Nachteil/Vorteil (je nach Applikation) reagiert schneller auf Änderungen.&lt;br /&gt;
&lt;br /&gt;
y(t) = a * (y(t-1)) + (1-a) * x&lt;br /&gt;
&lt;br /&gt;
y(t): neuer Schätzwert&lt;br /&gt;
y(t-1): alter Schätzwert&lt;br /&gt;
x: neuer Messwert&lt;br /&gt;
a: Gewicht im Bereich 0..1&lt;br /&gt;
&lt;br /&gt;
Bei z.B. a=1/2 werden neuer Messwert und alter Schätzwert gleich Gewichtet. Bei 2/3 wird mehr Gewicht auf den alten Schätzwerr gelegt, d.h. die Werte ändern sich bei Spüngen langsamer. Zu empfehlen sind Zweierpotenzen. Dann kann man mit Shift-Operationen auskommen und auf Fließkomma-Verarbeitungen verzichten. Die ist auf µCs äußerst ineffizient.&lt;br /&gt;
&lt;br /&gt;
Also (in C) a= 1/2:     y = (y &amp;gt;&amp;gt; 1) + (x &amp;gt;&amp;gt; 1) (vermeidet Überläufe) oder y = (y + x) &amp;gt;&amp;gt; 1 (ist genauer)&lt;br /&gt;
            a= 1/4:     y = (y &amp;gt;&amp;gt; 2) * 3 + (x &amp;gt;&amp;gt; 2)                        y = ((y * 3) &amp;gt;&amp;gt; 2) + (x &amp;gt;&amp;gt; 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a = 1/2&lt;br /&gt;
t   x    y &lt;br /&gt;
0   0    0&lt;br /&gt;
1   0    0&lt;br /&gt;
2  50   25  &lt;br /&gt;
3  50   37&lt;br /&gt;
4  50   43&lt;br /&gt;
5  50   46&lt;br /&gt;
6  50   48&lt;br /&gt;
7  50   49&lt;br /&gt;
8  40   45&lt;br /&gt;
9  50   47&lt;br /&gt;
&lt;br /&gt;
Du siehst: Extrem effizient. Ein Variable (y) eine Programmzeile. Wenn man höhere Genauigkeit möchte, kann man Festkommazahlen verwenden.&lt;br /&gt;
&lt;br /&gt;
Wenn man ein System beschreiben will, bei dem Schwankungen/Sprünge nicht zufällig auftreten, sollte man sich überlegen, eine einfache Glättung zu nutzen. In deinem Beispiel sieht es so aus, als ob eine Spannungsquelle eingeschaltet wird. Da sollte man etwas einbauen, dass einen solchen Sprung erkennt und die alten Werte verwirft. Der langsame Spannungsanstieg, der durch die Glättung ermittelt wird, ist nur vorgetäuscht.&lt;br /&gt;
&lt;br /&gt;
Im weiteren verlauf deines Beispiels tauchen (zufällige) Messwertschwankungen auf, die lassen sich durch eine Glättung wirklich gut ausmitteln.&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Gleitender_Mittelwert_in_C&amp;diff=15850</id>
		<title>Gleitender Mittelwert in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Gleitender_Mittelwert_in_C&amp;diff=15850"/>
				<updated>2009-12-29T08:32:57Z</updated>
		
		<summary type="html">&lt;p&gt;RedBaron: /* Weblinks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der gleitende Mittelwert, auch gleitender Durchschnitt genannt, wird verwendet, um zeitlich aufeinander folgende Reihen von Werten zu glätten; eben den Mittelwert über n aufeinader folgende Werte zu bilden. &lt;br /&gt;
&lt;br /&gt;
{{Ausbauwunsch| viel mehr erklärender Text}}&lt;br /&gt;
&lt;br /&gt;
== Verwendung ==&lt;br /&gt;
Um die Einwirkung von veränderlichen äußeren Einflüssen auf die Genauigkeit von Messungen zu reduzieren, wird häufig der Mittelwert über die letzten gemessenen Werte gebildet. Es ist dabei unerheblich, woher diese äußeren Einflüsse stammen, sei es z.B. aus Schwankungen der Versorgungsspannung oder hochfrequenten Störungen aus der Umgebung.&amp;lt;br/&amp;gt;Die Bildung eines gleitenden Mittelwertes hat jedoch wenig bis keinen Einfluß auf die Genauigkeit der Ergebnisse, wenn diese durch nahezu konstante äußere Einflüsse (wie z.B. das thermische Rauschen von Bauteilen) verfälscht werden.&lt;br /&gt;
&lt;br /&gt;
Eine denkbare sinnvolle Anwendung: Ein Roboter ist mit einer größeren Solarzelle ausgerüstet und soll für diese die hellste Stelle in einer halbschattigen Umgebung (im Freien unter Laubbäumen) finden. Jede Positionsänderung kann eine gravierende Änderung der Zellenspannung bewirken.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
Hier ein Beispiel für die Auswirkungen auf eine Messung. Im Bild werden gestörte Messwerte in rot und die durch den gleitenden Mittelwert geglätteten Werte in grün dargestellt. Ein Nachteil bei der Glättung über viele Werte ist die langsame Reaktion auf Sprünge, wie am Anfang beim Sprung von 0 auf 50 zu sehen ist.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GleitenderMittelwert.png]]&lt;br /&gt;
&lt;br /&gt;
== C-Code ==&lt;br /&gt;
Auf Optimierungen, inline-Funktionen etc. wurde vorerst zugunsten der Lesbarkeit verzichtet.&lt;br /&gt;
Für manche Anwendungen ist es Sinnvoll für den gleitenden Mittelwert einen anderen Datentyp als für die Einzelwerte vorzusehen. Z.B. kann der Mittelwert von ganzen Zahlen durchaus signifikante Nachkommastellen haben. &lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
;FloatingAverage.h&lt;br /&gt;
&lt;br /&gt;
 #ifndef FLOATING_AVERAGE_H&lt;br /&gt;
 #define FLOATING_AVERAGE_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Ueber wieviele Werte soll der gleitende Mittelwert berechnet werden?}}&lt;br /&gt;
 {{ccomment|Zulaessige Werte 1..255}}&lt;br /&gt;
 #define SIZE_OF_AVG  8&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Datentyp, ueber den der gleitende Mittelwert berechnet werden soll.}}&lt;br /&gt;
 typedef uint16_t tFloatAvgType;&lt;br /&gt;
 {{ccomment|typedef float tFloatAvgType;}}&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Wird nur intern fuer die Durchschnittsberechnung benutzt.}}&lt;br /&gt;
 {{ccomment|Muss Zahlen fassen koennen, die SIZE_OF_AVG mal groesser als tFloatAvgType sind.}}&lt;br /&gt;
 typedef uint32_t tTempSumType;&lt;br /&gt;
 {{ccomment|typedef float tTempSumType;}}&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Die Struktur, in der die Daten zwischengespeichert werden}}&lt;br /&gt;
 typedef struct&lt;br /&gt;
  {&lt;br /&gt;
 	tFloatAvgType aData[SIZE_OF_AVG];&lt;br /&gt;
 	uint8_t IndexNextValue;&lt;br /&gt;
  } tFloatAvgFilter;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Initialisiert das Filter mit einem Startwert.}}&lt;br /&gt;
 void InitFloatAvg(tFloatAvgFilter * io_pFloatAvgFilter,&lt;br /&gt;
 		  tFloatAvgType i_DefaultValue);&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Schreibt einen neuen Wert in das Filter.}}&lt;br /&gt;
 void AddToFloatAvg(tFloatAvgFilter * io_pFloatAvgFilter,&lt;br /&gt;
 		   tFloatAvgType i_ui16NewValue);&lt;br /&gt;
 &lt;br /&gt;
 {{ccomment|Berechnet den Durchschnitt aus den letzten SIZE_OF_AVG eingetragenen Werten.}}&lt;br /&gt;
 tFloatAvgType GetOutputValue(tFloatAvgFilter * io_pFloatAvgFilter);&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Quellcode ===&lt;br /&gt;
;FloatingAverage.c&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;FloatingAverage.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 void InitFloatAvg(tFloatAvgFilter * io_pFloatAvgFilter, &lt;br /&gt;
 		  tFloatAvgType i_DefaultValue)&lt;br /&gt;
 { &lt;br /&gt;
  	{{ccomment|Den Buffer mit dem Initialisierungswert fuellen:}}&lt;br /&gt;
 	for (uint8_t i = 0; i &amp;lt; SIZE_OF_AVG; ++i)&lt;br /&gt;
 	{&lt;br /&gt;
 		io_pFloatAvgFilter-&amp;gt;aData[i] = i_DefaultValue;&lt;br /&gt;
 	}&lt;br /&gt;
 	{{ccomment|Der naechste Wert soll an den Anfang des Buffers geschrieben werden:}}&lt;br /&gt;
 	io_pFloatAvgFilter-&amp;gt;IndexNextValue = 0;&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void AddToFloatAvg(tFloatAvgFilter * io_pFloatAvgFilter,&lt;br /&gt;
 		   tFloatAvgType i_NewValue)&lt;br /&gt;
 { &lt;br /&gt;
 	{{ccomment|Neuen Wert an die dafuer vorgesehene Position im Buffer schreiben.}}&lt;br /&gt;
 	io_pFloatAvgFilter-&amp;gt;aData[io_pFloatAvgFilter-&amp;gt;IndexNextValue] =&lt;br /&gt;
 		i_NewValue;&lt;br /&gt;
 	{{ccomment|Der naechste Wert wird dann an die Position dahinter geschrieben.}}&lt;br /&gt;
 	io_pFloatAvgFilter-&amp;gt;IndexNextValue++;&lt;br /&gt;
 	{{ccomment|Wenn man hinten angekommen ist, vorne wieder anfangen.}}&lt;br /&gt;
 	io_pFloatAvgFilter-&amp;gt;IndexNextValue %= SIZE_OF_AVG;&lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 tFloatAvgType GetOutputValue(tFloatAvgFilter * io_pFloatAvgFilter)&lt;br /&gt;
 {&lt;br /&gt;
 	tTempSumType TempSum = 0;&lt;br /&gt;
 	{{ccomment|Durchschnitt berechnen}}&lt;br /&gt;
 	for (uint8_t i = 0; i &amp;lt; SIZE_OF_AVG; ++i)&lt;br /&gt;
 	{&lt;br /&gt;
 		TempSum += io_pFloatAvgFilter-&amp;gt;aData[i];&lt;br /&gt;
 	}&lt;br /&gt;
 	{{ccomment|Der cast is OK, wenn tFloatAvgType und tTempSumType korrekt gewaehlt wurden.}}&lt;br /&gt;
 	tFloatAvgType o_Result = (tFloatAvgType) (TempSum / SIZE_OF_AVG);&lt;br /&gt;
 	return o_Result;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Anwendungsbeispiel ===&lt;br /&gt;
Hier folgt ein Beispiel, das die Anwendung in einem PC-Konsolen-Programm demonstriert&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;quot;FloatingAverage.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
         {{ccomment|Datenstruktur anlegen:}}&lt;br /&gt;
         tFloatAvgFilter FilterVoltageBatt;&lt;br /&gt;
 &lt;br /&gt;
         {{ccomment|initialisieren und mit 0 fuellen}}&lt;br /&gt;
         InitFloatAvg(&amp;amp;FilterVoltageBatt, 0);&lt;br /&gt;
 &lt;br /&gt;
         AddToFloatAvg(&amp;amp;FilterVoltageBatt, 100);&lt;br /&gt;
         {{ccomment|jetzt steht 1 mal 100 und 7 mal 0 im Buffer:}}&lt;br /&gt;
         printf(&amp;quot;100/8 = %d\n&amp;quot;, GetOutputValue(&amp;amp;FilterVoltageBatt));&lt;br /&gt;
 &lt;br /&gt;
         AddToFloatAvg(&amp;amp;FilterVoltageBatt, 200);&lt;br /&gt;
         {{ccomment|jetzt steht 1 mal 100, 1 mal 200 und 6 mal 0 im Buffer:}}&lt;br /&gt;
         printf(&amp;quot;300/8 = %d\n&amp;quot;, GetOutputValue(&amp;amp;FilterVoltageBatt));&lt;br /&gt;
 &lt;br /&gt;
         AddToFloatAvg(&amp;amp;FilterVoltageBatt, 300);&lt;br /&gt;
         AddToFloatAvg(&amp;amp;FilterVoltageBatt, 200);&lt;br /&gt;
         {{ccomment|jetzt steht 1 mal 100, 2 mal 200, 1 mal 300 und 4 mal 0 im Buffer:}}&lt;br /&gt;
         printf(&amp;quot;800/8 = %d\n&amp;quot;, GetOutputValue(&amp;amp;FilterVoltageBatt));&lt;br /&gt;
 &lt;br /&gt;
         return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Gleitender_Mittelwert Wikipedia - Gleitender Mittelwert]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Quellcode C]]&lt;/div&gt;</summary>
		<author><name>RedBaron</name></author>	</entry>

	</feed>