DFT / FFT hesaplamasının çıktısını anlamak için biraz yardıma ihtiyacım var.
Deneyimli bir yazılım mühendisiyim ve ana frekansları bulmak gibi bazı akıllı telefon ivme ölçer okumalarını yorumlamam gerekiyor. Ne yazık ki, on beş yıl önce kolej EE derslerimin çoğunda uyudum, ancak son birkaç gündür DFT ve FFT'yi okuyorum (görünüşe göre çok az boşuna).
Lütfen, "gidip bir EE dersi al" yanıtını vermeyin. Aslında işverenim bana ödeme yaparsa bunu yapmayı planlıyorum. :)
İşte benim sorunum:
32 Hz'de bir sinyal yakaladım. İşte Excel'de grafiğini çizdiğim 1 saniyelik 32 nokta örneği.
Daha sonra Columbia Üniversitesi'nden Java ile yazılmış bir FFT kodu aldım (" Java'da güvenilir ve hızlı FFT " konulu bir gönderideki önerileri izledikten sonra ).
Bu programın çıktısı aşağıdaki gibidir. Yerinde bir FFT çalıştırdığına inanıyorum, bu nedenle hem giriş hem de çıkış için aynı tamponu yeniden kullanıyor.
Before:
Re: [0.887 1.645 2.005 1.069 1.069 0.69 1.046 1.847 0.808 0.617 0.792 1.384 1.782 0.925 0.751 0.858 0.915 1.006 0.985 0.97 1.075 1.183 1.408 1.575 1.556 1.282 1.06 1.061 1.283 1.701 1.101 0.702 ]
Im: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ]
After:
Re: [37.054 1.774 -1.075 1.451 -0.653 -0.253 -1.686 -3.602 0.226 0.374 -0.194 -0.312 -1.432 0.429 0.709 -0.085 0.0090 -0.085 0.709 0.429 -1.432 -0.312 -0.194 0.374 0.226 -3.602 -1.686 -0.253 -0.653 1.451 -1.075 1.774 ]
Im: [0.0 1.474 -0.238 -2.026 -0.22 -0.24 -5.009 -1.398 0.416 -1.251 -0.708 -0.713 0.851 1.882 0.379 0.021 0.0 -0.021 -0.379 -1.882 -0.851 0.713 0.708 1.251 -0.416 1.398 5.009 0.24 0.22 2.026 0.238 -1.474 ]
Yani, bu noktada, çıktının tura veya kuyruklarını yapamıyorum. Gerçek bölümün bileşen kosinüs dalgalarının genlikleri ve hayali bölümün bileşen sinüs dalgalarının genlikleri olması gibi DFT kavramlarını anlıyorum. Bu diyagramı harika " The Scientist and Engineer's Guide to Digital Signal Processing " kitabından da takip edebilirim :
Yani benim spesifik sorularım:
FFT'nin çıkışından "en çok meydana gelen frekansları" nasıl bulurum? Bu, ivmeölçer verilerimin analizinin bir parçası. Gerçek (kosinüs) veya hayali (sinüs) dizileri okumalı mıyım?
Zaman alanında 32 noktalı bir girdim var. FFT'nin çıktısı, gerçekler için 16 öğeli bir dizi ve sanal için 16 öğeli bir dizi olması gerekmez mi? Program neden bana hem gerçek hem de sanal dizi çıktılarını 32 boyutunda veriyor?
Önceki soruyla ilgili olarak, çıktı dizilerindeki dizinleri nasıl ayrıştırırım? 32 Hz'de örneklenmiş 32 örnek girdim göz önüne alındığında, benim anladığım kadarıyla 16 öğeli bir dizi çıktısının indeksi, örnekleme hızının 1 / 2'sine (32 Hz) kadar eşit olarak yayılmalıdır, bu nedenle her bir öğeyi anlamakta haklı mıyım? dizinin değeri (32 Hz * 1/2) / 16 = 1 Hz?
FFT çıktısının neden negatif değerleri var? Değerlerin bir sinüzoidin genliklerini temsil ettiğini sanıyordum. Örneğin, Real [3] = -1.075 çıkışı, frekans 3'ün kosinüs dalgası için -1.075'lik bir genlik anlamına gelmelidir. Bu doğru mu? Bir genlik nasıl negatif olabilir?