Niższe częstotliwości silniejsze w FFT?


15

Obliczam FFT z wejścia mikrofonu. Zauważam, że niższe częstotliwości zawsze wydają się mieć większą moc (wyższe dB) niż wyższe częstotliwości.

  1. Tnę dane na ramki 24576 bajtów (4096 * 6).
  2. Zastosuj okno Hamminga: input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/fs));
  3. Uruchom go przez FFTW Process1D().
  4. Konwertuj z liczb zespolonych: output[i] = 10.0 * Math.Log10((fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1]));
  5. Uśrednij 6 wartości, aby uzyskać pełne FFT o wartości 4096 bajtów.
  6. Maluj ładny obrazek (kolory odwzorowane na paletę).

Uśrednianie (pkt 5) odbywa się w celu obniżenia hałasu FFT.

Jak obraz pokazuje zarówno z dźwiękiem, jak i przy wyłączonym mikrofonie, na niższych częstotliwościach jest więcej energii (i więcej szumu). Oznacza to, że jest to więcej niż problem z mikrofonem / subwooferem.

Moje pytania:
1. Czy jest to oczekiwane? Dlaczego?
2. Jakiś standardowy sposób to naprawić? Prawie wygląda na to, że jakaś magia Math.Tan () mogłaby podnieść ją tam, gdzie należy.

Moim celem jest możliwość zidentyfikowania 5 najlepszych częstotliwości bez domyślnego wygrywania niskich częstotliwości.

FFT


Proszę najpierw wypróbować prawidłowe okno Hamminga, aby zobaczyć, czy przyczyną pęknięcia o niskiej częstotliwości jest rozbity fragment okna.
hotpaw2

@Tedd Hansen, jak udało ci się „zidentyfikować 5 najlepszych częstotliwości bez niższych częstotliwości” - 5 najlepszych z ważonych pasm 1/3 oktawy?
denis

Odpowiedzi:


12

Tak, jest to bardzo oczekiwane. To, co widzisz, to „ różowe ” spektrum, tj. Stała energia na względną szerokość pasma, w porównaniu z „ białym ”, co oznacza stałą energię na absolutną szerokość pasma. Dla sygnałów różowych energia między 1-2kHz jest taka sama jak od 2-4kHz (każdy reprezentuje podwojenie szerokości pasma lub „oktawę”).

Większość naturalnych sygnałów audio (mowa, muzyka, filmy itp.) Ma widmo w kolorze różowym. Również większość akustycznych dźwięków tła (szum mikrofonu, HVAC, wahania ciśnienia powietrza, ogólne tło) wydają się być różowe lub nawet bardziej przekrzywione w kierunku niższych częstotliwości.

Ludzkie układy słuchowe również działają w ten sposób. W uchu wewnętrznym sygnały audio dzielone są na pasma o stałej względnej szerokości pasma (zwane „pasmami krytycznymi”), które są mniej więcej takie same jak widmo trzeciej oktawy.

Najlepszym sposobem spojrzenia na dane widma audio jest wykreślenie ich na logarytmicznej skali częstotliwości.


Stwierdzenie, że „naturalne sygnały audio mają spektrum podobne do różowego”, nie uwzględnia skali czasu. Przez długi czas (~ 10 sekund) zgadzam się, a na pewno przez kilka minut to stwierdzenie jest prawdziwe. Ale widma tutaj są obliczane w ciągu 0,55 sekundy. Jeśli na wejściu jest np. Muzyka, oczekiwałbym znacznie bardziej tonalnej struktury.
mtrw

2
„tonalność” wpływa bardziej na delikatną strukturę widma. Ogólny kształt (pod względem energii na oktawę) nadal będzie w większości różowy dla muzyki, chyba że będzie to coś w stylu „solo na trójkąt i talerz”
Hilmar,

1
@mtrw: Fala kwadratowa jest z pewnością tonem, ale harmoniczne wysokich częstotliwości wciąż spadają z częstotliwością 1 / f.
endolith,

8

W kroku 2 formuła powinna być , w twoim przypadku input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/N));, gdzie Njest liczba próbek w buforze 24576.

W krokach 4 i 5 zrobiłbym bin-średnie uśrednienie na wartościach kwadratowych wielkości, a nie wartościach dB. Powiedz, że masz kwadratowe wielkości [4,6]. Ich średnia jest 5, 10*log10(5) ~= 6.99. Średnia 10*log10(4)i 10*log10(6)wynosi 6.90.

Pierwszym problemem może być przyczyna odchylenia w kierunku niskich częstotliwości, ponieważ spowoduje to wyciek widmowy, a niskie częstotliwości dostaną więcej zanieczyszczeń z linii prądu stałego (co nieuchronnie jest złym szacunkiem). Drugi problem prawdopodobnie nie wpłynie na niskie częstotliwości, ale myślę, że zbliża się do celu twojego pomiaru.


Chociaż uśrednianie wartości dB nie jest prawdopodobnie najlepszą rzeczą do zrobienia, nie jest dla mnie od razu oczywiste, że uśrednianie wielkości jest znacznie lepsze. Proponuję uśrednienie kwadratów amplitud zamiast, który myślę, że (jeśli rozumiem fragmenty kodu poprawnie) obliczany jest już za fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1]. Myślę, że i używane przez mtrw są w rzeczywistości kwadratowymi wielkościami, ponieważ sugeruje użycie ich średniej w4610log10(5)(10log10(4)+10log10(6))/2)

W powyższym wyjaśnieniu uważam, że chcesz mieć szerokość okna (N) wynoszącą 4096, ponieważ jest to szerokość stosowanego FFT. To okno musiałoby zostać zastosowane do 4096 próbek transformowanych przed każdym fft.
Jakub

@Jacob - OP oblicza FFT na poziomie 6 * 4096 punktów, a następnie uśrednia 6 sąsiednich pojemników, aby zmniejszyć do 4096 punktów.
mtrw

5

Hałas 1 / f występuje w wielu systemach fizycznych, biologicznych i ekonomicznych. Niektórzy badacze opisują to jako wszechobecne.

różowe i białe dźwięki

Szum różowy (lewy) i szum biały (prawy) na spektrogramie FFT z osią pionową częstotliwości liniowej (w typowym analizatorze audio lub podobnym spektrum różowy szum byłby płaski, nie opadałby w dół, a biały szum wzrastałby)


6
Hałas po lewej stronie jest zdecydowanie różowy, ale ten po prawej wygląda trochę pomarańczowo :-)

Chociaż prawdą jest, że szum 1 / f jest wszechobecny, dobrze zaprojektowany analogowy interfejs dla audio ma generalnie niski poziom szumu 1 / f powyżej, powiedzmy 10 Hz. W pasmach zainteresowania dominuje biały szum.
mtrw 30.10.11

4

Czy jest to oczekiwane? Dlaczego?

Wiele naturalnych dźwięków ma harmoniczne , więc będą niższe częstotliwości podstawowe, a następnie mniej energii w wyższych wielokrotnościach podstawy. Może występować odchylenie prądu stałego, co oznaczałoby dużo energii po lewej stronie. Innym wpływem jest funkcja okienkowania, która zniekształca pasmo przenoszenia.

Jakiś standardowy sposób to naprawić? Prawie wygląda na to, że jakaś magia Math.Tan () mogłaby podnieść ją tam, gdzie należy.

Możesz poradzić sobie z uprzedzeniem DC za pomocą filtra górnoprzepustowego. Prostą implementacją jest odjęcie średniej długoterminowej z każdej próbki (EDYCJA: lub jeszcze prościej, odrzuć niższe częstotliwości, np. <50 Hz od wyniku FFT). Możesz także eksperymentować z różnymi funkcjami okna. upewnij się (jak wskazuje @mtrw), że poprawnie stosujesz okno. Wszelkie inne nieliniowości w reakcji można skorygować, mierząc idealne dane wejściowe i normalizując tę ​​krzywą.


Funkcja okienkowania nie powinna wpływać na pasmo przenoszenia, prawda?
endolith

@endolith: Mnoży twoje dane przez funkcję okienkowania, a połączona funkcja ma inną odpowiedź. Przeczytaj powiązany artykuł w Wikipedii, który omawia to bardziej szczegółowo. Rzeczywistość radzenia sobie z próbkami ze świata rzeczywistego polega na tym, że zwykle jest jakieś okno (np. Prostokąt) i z tego powodu można przybliżać jedynie odpowiedź częstotliwościową (nieskończonego) sygnału źródłowego.
Guy Sirton,

Może inaczej myślimy o „odpowiedzi częstotliwościowej”. Jeśli sygnał jest nieruchomy i zastosujesz do niego funkcję okna, widmo powinno mieć te same amplitudy przy tych samych częstotliwościach, bez względu na to, jakiej funkcji okna używasz, różniąc się tylko współczynnikiem skali, który wpływa jednakowo na wszystkie częstotliwości. Szerokość każdego piku częstotliwości będzie inna, ale wysokość pików będzie taka sama względem siebie. Funkcja okienkowania nie działa jak filtr, który tłumi niektóre częstotliwości bardziej niż inne.
endolith

@endolith: Wyobraź sobie nieskończoną falę sinusoidalną, teraz pomnożoną przez okno cos ^ 2. Nadal będziesz mieć komponent o oryginalnej częstotliwości, ale jego amplituda będzie „wyłączona” i będziesz mieć nowe komponenty częstotliwości wychodzące z okna. Zobacz pierwszy akapit tutaj: en.wikipedia.org/wiki/Spectral_leakage
Guy Sirton

Tak, ale amplituda „off” będzie taka sama bez względu na częstotliwość nieskończonej fali sinusoidalnej, nie?
endolith
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.