'da çakışan sonuçlar Bir STM32L4 mikroişlemcisini kullanarak bir FFT hesaplamaya çalışıyorum ama garip sonuçlar alıyorum. Bir SD karttan .wav dosyasında okurum, dolguyu kaldırın ve bir dizide 1024 bayt veri depolayın. Bu verinin, bilgisayardaki bir hex editöründe aynı wav dosyasını açarak doğru olduğunu onaylıyorum. Matlab'da FFT'yi hesapladığımda ve büyüklüğünü alırken, giriş sinüs dalgasının frekansına karşılık gelen frekans kutusu eşleşiyor. Bu benim C kodumda geçerli değil (kullandığım Keil hata ayıklayıcısında görüldüğü gibi). ARM DSP kütüphaneleri tarafından verilen değerler ile MatLab'da üretilen değerler arasında, bir exmaple için, MatLab = 5.2'de bin [0], C = 131246'da bin [0] arasında bir korelasyon yoktur. Ben FFT iki farklı versiyonunu denedim (... düzenleme bakınız) ve aşağıda ikisi de ekleriz:ARM DSP kitaplıklarını kullanarak bir FFT hesaplarken ve MatLab
/* Carry out an FFT on the (correctly formatted) input data */
arm_cfft_f32(&arm_cfft_sR_f32_len1024, inputBuffer, IFFTFLAG, BRFLAG);
/* Calculate the complex magnitude of the FFT */
arm_cmplx_mag_f32(inputBuffer, outputBuffer, FFTSIZE);
kaldırılmış kodu:
arm_cfft_radix4_instance_f32 S;
arm_cfft_radix4_init_f32(&S, FFTSIZE, IFFTFLAG, BITREVERSEFLAG);
arm_cfft_radix4_f32(&S, inputBuffer);
arm_cmplx_mag_f32(inputBuffer, outputBuffer, FFTSIZE);
yılında İkisi sonuç aynı (yanlış) değerler. C 'de yapılan tüm ön işlemlerin doğru olması, Re [0], Im [0], Re [1], Im [1], ..., Re [1023 şeklinde düzenlenmiş FFTSIZE * 2 dizisi oluşturdum. ], Im [1023].
Herhangi bir fikir veya yardım çok takdir edilecektir! :)
DÜZENLEME: DC bin dışında, iki hesaplama arasındaki değerlerin aslında birbiriyle ilişkili olduğunu fark ettim. , yani her iki hesaplama için de bin 47 en büyük değere sahiptir (bu, 22.05kHz'de örneklenmiş bir 1kHz sinüs dalgasından dolayı anlamlıdır). ARM DSP kitaplıklarının, kutuların çıkışlarını neden bu kadar çok ölçeklendirdiği konusunda bir fikriniz var mı?
Ne tür bir hata? –
@OliverCharlesworth C dilinde oluşturulan tüm değerler matlab komut dosyamdan daha büyük. Örnek olarak ilk 10 tane kutuyu listeleyeceğim. C: çöp kutusu [0] - 131486, hazne [1] - 413.7, hazne [2] - 410, hazne [3] - 415, hazne [4] - 408. Matlab: hazne [0] - 5.2, hazne [1] - 5.2, çöp kutusu [2] - 5.3, çöp kutusu [3] - 5.2, çöp kutusu [4] - 5.3. –
@OliverCharlesworth Değerlerin birbiriyle ilişkili olduğunu fark ettim (örn. Her iki hesaplama için bin 48 en büyük değerdir), sadece C'nin tüm sonuçları büyük ölçüde ölçeklenir. Buna neden olabilecek bir fikrin var mı? –