ich kenne mich mit vector <int> gar nicht aus, ich verwende grundsätzlich nur explizite C11 Datentypen
int16_t wavarray[SHRT_MAX]
für die komplexen Zahlen brauchst du die beiden floatarrays
float fx_[USHRT_MAX], fy_[USHRT_MAX]
die muss man erst auf Null setzen
memset(fx_ , 0, sizeof(fx_) ); // reel-Teil
memset(fy_ , 0, sizeof(fy_) ); // imaginär-Teil
dann die ints konvertieren und in die 1. Hälfte der fx_ arrays reinkopieren
for(int i=0; i<SHRT_MAX; ++i) fx_[i] = (float)wavarray[i]; // evtl sogar ein bisschen weniger, damit die 2. Hälfte überwiegt mit 0-Werten,
dann ist der ganze Rest der Komplex-Arrays schon auf Null, wie man es für die cross-correlation braucht.
Jetzt kann man die FFT darauf anwenden.
Bis dahin habe ich es gemacht, und dann abgebrochen, wegen irre langer Laufzeit auf dem NXT.
Übrigens:
für den Raspi würde ich double statt float nehmen, weil er intern auf 64bit double schneller rechnet als mit 32bit float.... 8-)
Die echte Cross-Correlation ist damit ebenfalls Neuland für mich!
entrauschen ist mein Lieblingsthema, das ist über Schwellwerte, Lowpass - und Highpass-Filter möglich, außerdem Spikes abfangen per gleitendem Medianfilter 8-)
(da gibt es aber bestimmt schon super Links dazu im www)
ps,
allerdings geht NICHTS über ein sauber aufgenommenes original-Micro-Signal ! 8-)
Lesezeichen