erstmal: wie setzen nur die Bereiche auf Null, die innerhalb eines bestimmten Ausschlags von der Basislinie liegen.
im Abspann, bei den fiktiven Werten
Code:
128 129 125 130 127 131 126 128
wären:
baseline 128
maxr 131
minr 125
bias 3
(zur Ermittlung arbeite ich grade an eine optimierten Funktion, die auch singuläre Ausreißer-Spikes unberücksichtigt lässt! )(
das (laute) Wort davor soll mal haben
Code:
135 138 120 123 180 150 115 112
kurzer Vorspann (optional):
jetzt gucken wir uns den gesamten Scan an:
(Punkte zur Markierung der Bereiche)
Code:
127 129 128 128 . 135 138 120 123 180 150 115 112. 128 129 125 130 127 131 126 128
nun bereinigen wir den Scan, indem wir alle kleinen Ausschläge ( von der Baseline <= bias inkl.) auf baseline gesetzt werden, d.h. alle zwischen 125 und 131
Code:
128 128 128 128 . 135 138 120 123 180 150 115 112. 128 128 128 128 128 128 128 128
du siehst: jetzt ist das "Wort" in der Mitte scharf markiert.
Den Kram mit dem Bias abziehen vom gesamten Scan, wie gestern "angedacht",können wir uns evtl schenken, denn das macht wschl. die FFT für und automatisch wie ichs momentan sehe.
- - - Aktualisiert - - -
Ah noch etwas. Was genau macht & 0x00ff?
& 0x00ff
"anded" bitweise einen Int-Wert aus mehreren (hier: 4) Bytes und errechnet daraus den Wert des Lowbytes.
0x00ff ist die hex-Schreibweise von 255, wo die 8 kleinen bits auf 1 und alle höheren bits Null sind.
das heisst:
7 & 0x00ff ergibt 7 // nur das lowByte enthält Werte
127 & 0x00ff ergibt 127 // dto...
255 & 0x00ff ergibt 255
256 & 0x00ff ergibt 1 // 2.-unterstes Byte enthält Stör-Wert, der wird herausmaskiert, nur Lowbyte bleibt übrig.
262 & 0x00ff ergibt 7 // dto...
382 & 0x00ff ergibt 127
511 & 0x00ff ergibt 255 .
1024 & 0x00ff ergibt 1
32768 & 0x00ff ergibt 1 // 3.-unterstes Byte enthält Stör-Wert, der wird herausmaskiert, nur Lowbyte bleibt übrig.
Der Sinn war: alle int-Werte, die sonst noch als unnütze Bytes in den 4-Byte-int32_t array-zellen auftauchen sollten, zu nullen (z. B. Steuer-Bytes / Begrenzer oder der Wert einer 2. Spur), damit nur das kleinste Byte übrig bleibt, wenn das wirklich die echte Micro-Mono-Spur enthält.
So wie es momentan aussieht, sind allerdings keine weiteren Stör-Bytes drinnen, aber das werden wir noch austesten.
Was ist der Unterschied zwischen i++ und ++i?????
++i ist das pre-increment, das führt das Increment sofort aus und steht für i=i+1.
i++ ist das post-increment, das führt das Increment erst aus, nachdem weitere Kommandos in der selben Kommando-Zeile bereits ausgeführt worden sind.
++i ist in diesem speziellen Falle zwar identisch mit i++,
aber ++i ist das logisch richtigere, denn i++ kann möglicherweise immer "side effects" haben.
Siehe die Erklärung hier:
http://www.embedded.com/design/progr...rement-in-C-C-
Lesezeichen