Bu görev için mantığı çözmeye çalışıyorum ve hızlı fourier dönüşümünü gerçekleştirmek için KissFFT kaynak paketini kullanmayı planlıyorum. Bunun doğru görünüp görünmediğini lütfen bize bildirin:
- Bir FFT yapısı tahsis edin, yani.
kiss_fft_alloc(N,0,NULL,NULL)
KullandığımN
pencere boyutu nerede . Giriş arabelleği, birN
tür elemanlar dizisi olacaktırkiss_fft_scalar
. Çıktı tamponu birN/2 + 1
tür elemanlar dizisi olacaktırkiss_fft_cpx
. N
PCM örneklerinin kod çözme (pencere boyutu) sayısı.- Her PCM örneği için, her bir kanalın genliğini (işaretsiz örnekler) ortalayın ve 0 ile 2 arasında ölçeklendirin (65536.0'a bölün) ve sonucu giriş arabelleğine kaydedin.
- Giriş arabelleğinde pencereleme (örn. Hanning) gerçekleştirin.
- Çıkış arabelleğine kaydederek, giriş arabelleğinde hızlı fourier dönüşümü gerçekleştirin. Giriş olarak gerçek değerleri kullandığım için kullanabilirim
kiss_fftr()
. - İçin
N/2
çıkış değerlerinin, dönüştürülmüş veri karesi alınan büyüklüğü elde edilir ve şu formül ile dB ölçeğinde değerleri dönüştürmek:10 * log10 (re * re + im * im)
N/2
6. adımdaki değerleri çizin .- Bir sonraki (pencere boyutu / 2) PCM örneklerinin kodunu çözerek ve verilere ölçekleme ve pencereleme gerçekleştirerek giriş arabelleğinin ilk yarısını atın. Bu, giriş penceresini etkili bir şekilde kaydırmalı ve işlenmiş PCM örneklerinde matematiği yeniden yapmak zorunda kalmamalıdır.
- Tüm örnekler işlenene kadar bu adımları tekrarlayarak 5. adıma geçin.
- Kullanılan hafızayı boşaltın
kiss_fft_alloc()
.
FFT'yi gerçekleştirmeden önce giriş penceresinden bir değer çıkarmam önerildi, böylece elde edilen DC değeri sıfır büyüklüğüne sahip oldu. Girdi verilerinden ortalamayı mı yoksa ortalamayı mı çıkarmalıyım?
Ayrıca, bir pencere boyutu seçerken dikkate almam gereken şeyler nelerdir? Bunun yanı sıra, KissFFT'nin talimatlarına göre çift sayı olması gerekir, yani küçük bir pencere boyutu kullanmanın bir yararı vardır. daha iyi bir grafik sağlayacak mı? Büyük bir pencere boyutunun gerçekleştirilmesi gereken FFT sayısını azalttığını varsayıyorum, büyük bir pencere boyutu kullanmanın tek yararı bu mu?
Sağlayabileceğiniz her türlü rehberlik için şimdiden teşekkür ederiz.