Mein erster Ansatz ist hier die Bildung einer Hüllkurve. Nun muss automatisch entschieden werden, welches Maximum die Grundfrequenz darstellt. Falls dazu jemand eine geniale Idee hat, bin ich immer dankbar.
Das sauber zu machen ist gar nicht so einfach. Der Ansatz mit der Hüllkurve bringt keine sauberen Ergebnisse, da das Maximum der Peaks nicht immer (sieht man auch auf Deiner Grafik) nicht immer mit dem Maximum der Hüllkurve zusammenfällt.
Normalerweise würde man eine Funktion suchen, die die Form eines einzelnen Peaks beschreibt, diese dann anfitten, und den Fitparameter, der die Frequenzlage des Peaks beschreibt, für die weitere Auswertung nutzen. Das Problem hier ist, dass das Spektrum sehr viele Überlagerte Peaks enthält, die sich überschneiden und sehr unterschiedliche Amplituten haben. Man müsste also eine Fitfunktion aus vielen Überlagerten Peaks benutzen. Das ist technisch möglich, aber Du hast dann sehr viele Fitparameter (jeder Peak vermutlich 2 bis 3 Parameter x Anzahl der Peaks), und dann ist es wieder schwierig, den richtigen Parameter automatisch herauszusuchen.
Der beste Kompromiss ist vermutlich, die lage der höchsten Peaks herauszusuchen (durch eine einfache Suche nach Werten, die eine bestimmte Schwelle überschreiten). Dann hast Du schon mal eine grobe Lage des Maximums. Dann eine Fitfunktion finden, die nicht allzu empflindlich auf Überlagerung mit kleineren Peaks ist, aber trotzdem das Maximum sauber reproduziert, und diese auf den ersten Peak loslassen.
Hope this helps.