hä?Für einen Optimale Darstellung ist ein Überlappung von 50% Scrollinterval und FFT Berechnungszeit notwendig.
hä?Um auf 19Khz zu kommen brauch ich eine FFT Length von 2048.
Weil, Bin_Breite_in_Hertz = fSample / fft_length = 44100 Hz / 4096 = 10.766 Hz. 2048*10.766 Hz = ca 22050 Hz.
wenn du 4096 samples eines mit 44100 samples/s abgetasteten signals durch die fft jagst hast du 2048 verschiedene frequenzbänder
die höchste frequenz die du mit 44100 samples/s messen kannst beträgt 22050hz. das aufgeteilt auf 2048 bänder ist ein frequenzbereich von ~11 hz pro band. sammelst du nur 2048 samples ein, hast du immerhin noch ~22 bei 1024 sind es ~43.
und welche auflösung brauchst du jetzt? willst du 11hz von 12 bis 22hz unterscheiden? willst du 43hz von 44 bis 86 unterscheiden?
jetzt kannst du das resamplen auf sagen wir mal 20480 samples/s
damit erhöhst du deine auflösung auf 5 hz bei 4096 und 20 hz bei 1024 sampel ABER alle frequenzen von 10240 bis 22050hz sind weg.
um auf eine 5 hz auflösung bei 44100 samples/s zu kommen müsstest du 8820 samples aufsammeln.
8820 samples hast du nach 0,2s und 4096 nach ~0,09s.
du kannst also einmal 5hz von 5-10hz unterscheiden, aber nur mit einer zeitlichen genauigkeit von 0,2s
oder du kannst 11 hz von 12-22hz unterscheiden, aber die zeitliche reihenfolge der frequenzen innerhalb von 0,09s nicht.
hä?Bei einer rate von 44100 und FFT length von 4096 sind wir als schon mal im richtigen bereich.
Nun der Overlap from scroll intervall:
SecFürNeueDaten = fft_Length * (1/Rate) = 4096*(1/44100) = 0,09287981859410430839002267573696 sec.
Scrollintervall ist auf 40ms gesetzt.
X = 100*40/ (0,09287981859410430839002267573696 *1000)
OSI = 100-x
Die Überlappung beträgt: 56,933%
das Scrollintervall? du meinst, du hast nen timeout, in dem du zeichnest? was gerade da ist? schlechte idee, 1. bekommst du das nicht synchron und 2. bekommst du kein festes scrollintervall von 40s.
immer wenn die fft durch ist, speicherst du die daten ab und zeichnest die alle im requestAnimationFrame-callback. fertig
die zeit-auflösung der frequenzen sollten ja nicht nach der zeichen-geschwindigkeit gewählt werden, sondern nach der signaldauer.
hat man langsame lange signale, kann man die fft-size erhöhen und hat damit eine schlechte zeitliche aber eine gute auflösung der frequenzbereiche.
- - - Aktualisiert - - -
o: dein "sinus"Wenn ich in der Hann Funktion 0 zuführe kommt auch 0 wider raus, auch der berechnete Sinus klingt fehlerfrei.
Erst wenn ich echte Daten in die Funktion packe kommt wider müll raus.
Ich habe mal was getestet. Habe in der Funktion vor der Berechnung ein console.log gemacht und danach, jeweils nur von ersten SP Aufruf (4096 samples).
Ausgabe vor der berechnung:
Ausgabe nach der Berechnung
h: was aus deiner funktion kommt

mal nur dein ausschnitt der 1. paar samples:

und das ergebniss deiner funktion vergrößert
