NAudio FFT-Ergebnis gibt Intensität auf allen Frequenzen C #

Ich habe eine funktionierende Implementierung von NAudios Wasapi-Loopback-Aufzeichnung und der FFT der Daten. Die meisten Daten, die ich erhalte, sind genau so, wie sie sein sollten, aber hin und wieder (in Intervallen von 10 Sekunden bis Minuten) wird die Amplitude auf fast allen Frequenzen angezeigt.

Grundsätzlich bewegt sich das Bild von rechts nach links, wobei die Zeit und die Frequenzen logarithmisch von den niedrigsten Frequenzen unten abgehen. Die Linien sind die Fehler. Soweit ich das beurteilen kann, sollten diese nicht dort sein.

Ich erhalte den Audiopuffer und sende die Samples an einen Aggregator (Hamming-Fenster wird angewendet), der die NAudio-FFT implementiert. Ich habe die Daten (FFT-Ergebnis) überprüft, bevor ich sie in irgendeiner Weise ändere (das Bild stammt nicht aus der rohen FFT-Ausgabe, sondern ist desibel skaliert), um zu bestätigen, dass das FFT-Ergebnis diese Zeilen enthält. Ich könnte auch darauf hinweisen, dass das Bild mit LockBits modifiziert wurde, sodass ich dachte, dass etwas mit der Logik dort nicht stimmt, aber deshalb habe ich die FFT-Ausgabedaten überprüft, die dasselbe Problem aufweisen.

Nun, ich könnte mich irren und das Problem könnte irgendwo liegen, wo ich sagte, dass es nicht so ist, aber es scheint wirklich, dass es aus der FFT ODER den Pufferdaten (Daten selbst oder der Aggregation von Samples) stammt. Irgendwie bezweifle ich, dass der Puffer selbst so beschädigt ist.

Wenn jemand eine Idee hat, was dies verursachen könnte, würde ich es sehr schätzen!

AKTUALISIEREN

Deshalb habe ich beschlossen, den gesamten FFT-Ergebnisbereich und nicht die Hälfte davon zu zeichnen. Es zeigte etwas Seltsames. Ich bin mir bei FFT nicht sicher, aber ich dachte, die Fourier-Transformation sollte ein Ergebnis liefern, das in der Mitte gespiegelt ist. Dies ist hier sicherlich nicht der Fall.

Das Bild ist linear skaliert, sodass die genaue Bildmitte der Mittelpunkt des FFT-Ergebnisses ist. Unten ist der erste und oben ist der letzte.

Ich habe eine 10-kHz-Sinuswelle gespielt, die die beiden horizontalen Linien dort wiedergibt, aber der obere Teil ist mir verborgen. Es sieht auch so aus, als würden die Linien um das untere Viertel des Bildes gespiegelt, so dass mir das auch seltsam vorkommt.

UPDATE 2

Also habe ich die FFT-Größe von 4096 auf 8192 erhöht und es erneut versucht. Dies ist der Ausgang, an dem ich mit der Sinusfrequenz herumspiele.

Es scheint, dass das Ergebnis zweimal gespiegelt wird. Einmal in der Mitte und dann wieder in der oberen und unteren Hälfte. Und die riesigen Linien sind jetzt verschwunden. Und es scheint, dass die Linien jetzt nur noch in der unteren Hälfte erscheinen.

Nach einigen weiteren Tests mit verschiedenen FFT-Längen scheinen die Linien in diesem Konto völlig zufällig zu sein.

UPDATE 3

Ich habe einige Tests mit vielen Dingen gemacht. Das Letzte, was ich hinzugefügt habe, war das Überlappen von Samples, sodass ich die letzte Hälfte des Sample-Arrays zu Beginn der nächsten FFT wiederverwende. Bei Hamming- und Hann-Fenstern gibt es mir massive Intensitäten (ganz wie auf dem zweiten Bild, das ich gepostet habe), aber nicht bei BlackmannHarris. Durch Deaktivieren der Überlappung werden die größten Fehler bei jeder Fensterfunktion entfernt. Die kleineren Fehler wie im oberen Bild bleiben auch bei BH-Fenster erhalten. Ich habe immer noch keine Ahnung, warum diese Zeilen erscheinen.

In meinem aktuellen Formular können Sie steuern, welche Fensterfunktion verwendet werden soll (von den drei zuvor genannten), überlappen (Ein / Aus) und mehrere verschiedene Zeichenoptionen. Auf diese Weise kann ich alle Effekte der betroffenen Parteien vergleichen, wenn sie geändert werden.

Ich werde weitere Nachforschungen anstellen (ich bin mir ziemlich sicher, dass ich irgendwann einen Fehler gemacht habe), aber gute Vorschläge sind mehr als willkommen!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage