Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: Kaanx - 03 Haziran 2013, 23:23:42

Başlık: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Kaanx - 03 Haziran 2013, 23:23:42
Merhaba arkadaşlar son 2 3 gundur usb host ile msp3 çalma üzerine ve vcp olusturma üzerine arastırma yapıyorum. ST nin DSP kutuphanesini inceledim ve örnek çalısmları inceledım. FFT ile ilgili bir örnege rastgeldim bende spectrum analyzer yapmayı hedefliyorum. Fakat Keile dsp lib dosyalarını ekleyemedım nedense ARMCM4.h hatası alıyorum sürekli tüm dosyaları taradım fakat böyle bir header bulamadım. DSP kutuphane ve uygulamalar hakkında aynı zamanda USB HOST hakkında bilgili arkadaşlar yardımcı olurlarsa cok sevinirim.
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: EMP_Otto - 04 Haziran 2013, 01:42:26
Pek yardımcı olamayacağım ama belki vereceğim linkler yardımcı olur ;D
http://projectproto.blogspot.ro/2010/06/mini-stm32-wave-audio-player.html (http://projectproto.blogspot.ro/2010/06/mini-stm32-wave-audio-player.html)
http://forum.stellarisiti.com/topic/105-stm32-wave-audio-player-with-lcd/ (http://forum.stellarisiti.com/topic/105-stm32-wave-audio-player-with-lcd/)
https://www.das-labor.org/trac/browser/microcontroller/src-stm32f4xx/serialUSB (https://www.das-labor.org/trac/browser/microcontroller/src-stm32f4xx/serialUSB)         (bu sitede kodlarda var stm32f4 için)
http://www.embeddedsignals.com/ARM.htm (http://www.embeddedsignals.com/ARM.htm)
http://jjmz.free.fr/?p=102 (http://jjmz.free.fr/?p=102)

Kolay gelsin...
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Kaanx - 04 Haziran 2013, 03:52:01
Hocam cevabınız için teskkur ederim cokyararlı lınkler bunlar gercekten bence. Siz DSP lib kullanarak örnek yaptınız mı dahili mic kullandınız mı acaba ?
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: diot - 04 Haziran 2013, 10:17:25
Kaan sorunun için link.
https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Discovery/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2FSTM32Discovery%2FDSP%20libraries&FolderCTID=0x01200200770978C69A1141439FE559EB459D75800084C20D8867EAD444A5987D47BE638E0F&currentviews=601

#include "ARMCM4.h"
şeklinde değiştir.
#include "stm32f4xx.h"
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Kaanx - 04 Haziran 2013, 14:08:06
Bülent hocam cok sagolun gercekten cıldırmak üzereydim hazır armcm4.h buldum yeni bir lib koydum bu sefer herbişi birbirine girdi düzeltmeye çalısıyorum :) Hocam Mikrofon kullandınız mı siz hiç STm32f4 de ??
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: diot - 04 Haziran 2013, 14:46:16
discovery kit in mikrofonu ile hiç uğraşmadım ne yazıkki . :(
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: EMP_Otto - 04 Haziran 2013, 17:49:22
http://forum.chibios.org/phpbb/viewtopic.php?f=4&t=351&sid=4bcc425e5507f3d5c4ee615b8259dcdd (http://forum.chibios.org/phpbb/viewtopic.php?f=4&t=351&sid=4bcc425e5507f3d5c4ee615b8259dcdd)
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Kaanx - 04 Haziran 2013, 22:29:03
Bülent hocam ADC - DAC örneklerini inceleyelim o zaman FFT uygulaması yapmaya calısıcam. Sorunun su gelen degere göre çizgilr oluşucak ve bunları bufferlarını nasıl o çizgilere yuklıcem ?

mesaj birleştirme:: 04 Haziran 2013, 22:30:04

Alıntı yapılan: EMP_Otto - 04 Haziran 2013, 17:49:22
http://forum.chibios.org/phpbb/viewtopic.php?f=4&t=351&sid=4bcc425e5507f3d5c4ee615b8259dcdd (http://forum.chibios.org/phpbb/viewtopic.php?f=4&t=351&sid=4bcc425e5507f3d5c4ee615b8259dcdd)

Hocam Chibi OS dosyalarını indirdim fakat nasıl kullanacagım hakkında en ufak bir bilgim yok FreeRTOS ve Chibis OS örneklerini çalıstıramıyorum sizn bilginiz var mı bu konuyla ilgili ?
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: EMP_Otto - 04 Haziran 2013, 23:26:24
Hocam şuanda kart yanımda değil o yzden yardımcı olamıyorum.Kusura bakmayın ....
ChibiOS ile calısmadım ama ilk olarak RTOS işiyle uğraşacam
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Kaanx - 05 Haziran 2013, 19:20:18
Hocam FreeRTOS stm32f4 discovery for KEİL var mı bilginiz varmı ben bulamadım FreeRTOS uygulamalarıda yapabiliriz eger müsait olrsanz paylasırmısnız yaptıgınızda bizlerle ?
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: superconductor - 27 Eylül 2013, 16:06:30
Hocam bu arkadaş pic18 ile spectrum analyser yapmış. Kodları stm için uyarlamak çok basit incelemende fayda var.

http://www.waitingforfriday.com/index.php/Real-Time_Audio_Spectrum_Analyser (http://www.waitingforfriday.com/index.php/Real-Time_Audio_Spectrum_Analyser)

Fft fonksiyonu hazır olduğundan pek bir anlamı olmasada buda benim denemem: stm32 real-time audio analyzer with fast fourier transform (fft) (http://www.youtube.com/watch?v=WeQuNCYgJvo#)

Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Kaanx - 29 Eylül 2013, 00:55:11
Hocam teşekkürler. PIC serisini ARM a başladıktan sonra unuttum gibi bişi oldu umarım başarabilirim :)
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: superconductor - 29 Eylül 2013, 20:40:00
Bu arada, DSP fonksiyonlarını kullanma konusunda ilerleme kaydedebildiyseniz öğrenmek isterim. Bende aynı problem ile karşılaştım ve durumu çözemedim.
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Mucit23 - 29 Eylül 2013, 23:18:08
@Kaanx,
Bende bu aralar spectrum analyser yapmak için uğraşıyorum. ST'nin Kendi DSP library'si üzerinde çalışıyorum.

@superconductor, Aynı uygulamayı bende denemek istiyorum. Kullandığınız FFT kütüphanesini paylaşabilirmisiniz?
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Kaanx - 30 Eylül 2013, 00:17:33
Alıntı yapılan: superconductor - 29 Eylül 2013, 20:40:00
Bu arada, DSP fonksiyonlarını kullanma konusunda ilerleme kaydedebildiyseniz öğrenmek isterim. Bende aynı problem ile karşılaştım ve durumu çözemedim.

Hocam ben hala durumu çözmeye calısıyorum TFT ekrana yabancı bir arkadasla birlikte spektrum bastırmayı basardık gibi bişi 0-10 khz ama hala mic kullanamıyoruz adc ile ve FFT ile ilgilenmeye devam ediyorum DSP lib kurcalamanızda fayda var suan bendede muallak

mesaj birleştirme:: 30 Eylül 2013, 00:20:36

Alıntı yapılan: Mucit23 - 29 Eylül 2013, 23:18:08
@Kaanx,
Bende bu aralar spectrum analyser yapmak için uğraşıyorum. ST'nin Kendi DSP library'si üzerinde çalışıyorum.

@superconductor, Aynı uygulamayı bende denemek istiyorum. Kullandığınız FFT kütüphanesini paylaşabilirmisiniz?

Hocam bende realtime spectrum analyzer ile ugrasıyorum hala fakat ilerleme katetmiş sayılamam ve FFT mantıgını sıfırdan kendim anlamaya calısıyorum biraz mantıgı kavramak için sagolsun burada bilgili arkadaslar yardımcı oluyorlar https://www.picproje.org/index.php/topic,48884.0.html (https://www.picproje.org/index.php/topic,48884.0.html) linkten sizde takıp edebilirisniz. Kodu kendimiz yazalım diye soyunduk biz o yuzden biraz detaylı gidicek sanırm :) ama uyarlama işi artık banada çekici gelmeye başladı cunku sabırsızlanıyorum bi an önce görmek istiyorum. eger sizin elinizde varsa kaynaklar paylasırsanız sevinirim hocam
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Mucit23 - 30 Eylül 2013, 00:30:58
Farklı birşey yok bendede. Ben hazır kütüphane kullanma peşindeyim aslında. Pek fazla işim olmayacak çünkü.
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Kaanx - 30 Eylül 2013, 01:10:35
Stm32f4 de hazır kutuphane bulmakta sorun hocam
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: superconductor - 02 Ekim 2013, 02:05:45
Kullandığım fft fonksiyonu şu şekilde.Bende linkini verdiğim pic ile yapılmış projeden alıntı yaptım. Kullanımı projenin içinde detaylı anlatılmış.
Aslında en iyisi öğrenerek gitmek ama iş yetiştirmem gerektiğinden benim fırsatım olmadı.


void fft(int fr[],int fi[],int m)
{
long int mr = 0, nn, i, j, l, k, istep, n, shift;
  short qr, qi, tr, ti, wr, wi;

n = 1 << m;
  nn = n - 1;

for (m=1; m<=nn; ++m)
   {
      l = n;
      do
      {
         l >>= 1;
      } while (mr+l > nn);
     
      mr = (mr & (l-1)) + l;
      if (mr <= m) continue;
     
      tr = fr[m];
      fr[m] = fr[mr];
      fr[mr] = tr;
      ti = fi[m];
      fi[m] = fi[mr];
      fi[mr] = ti;
   }
l = 1;
   k = LOG2_N_WAVE-1;

while (l < n)
   {
   
      long int c;
      short b;
     
      istep = l << 1;
       for (m=0; m<l; ++m)
      {
         j = m << k;
       
         wr =  Sinewave[j+N_WAVE/4];
         wi = -Sinewave[j];

         wr >>= 1;
         wi >>= 1;
         
         for (i=m; i<n; i+=istep)
         {
            j = i + l;
           
           
            c = ((long int)wr * (long int)fr[j]);
            c = c >> 14;
            b = c & 0x01;
            tr = (c >> 1) + b;
           
            c = ((long int)wi * (long int)fi[j]);
            c = c >> 14;
            b = c & 0x01;
            tr = tr - ((c >> 1) + b);
           
 
           
            c = ((long int)wr * (long int)fi[j]);
            c = c >> 14;
            b = c & 0x01;
            ti = (c >> 1) + b;
           
            c = ((long int)wi * (long int)fr[j]);
            c = c >> 14;
            b = c & 0x01;
            ti = ti + ((c >> 1) + b);
           


            qr = fr[i];
            qi = fi[i];
            qr >>= 1;
            qi >>= 1;

            fr[j] = qr - tr;
            fi[j] = qi - ti;
            fr[i] = qr + tr;
            fi[i] = qi + ti;
         }
      }
     
      --k;
      l = istep;
   }



Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Mucit23 - 20 Ocak 2016, 17:16:31
DSP Library üzerinde çalışıyorum. Diğer konuda bahsettiğim timer sorununu çözdüm. #define kısmında __ASSEMBLY__ tanımlamasıda olması gerekiyormuş.

Şimdi ADC den 32Khz frekansta N kadar örnek alıp DMA ile diziye atabiliyorum.

Şuanda Yapmaya çalıştığım şey Max 16Khz frekansı FFT ile 32 noktada görüntüleyebilmek. Bunun için ADC örnekleme frekansını 32Khz yaptım. Daha önceki çalışmalarımdan örnekleme frekansı max. görüntülenmek istenen frekansın iki katı olarak seçilmesi gerektiğini biliyorum.

DSP Library içerisinde bir örnek program var o ve alttaki linkte bulduğum örneğe bakarak birşeyler yapmaya çalışıyorum.
http://stm32f4-discovery.com/2014/10/stm32f4-fft-example/ (http://stm32f4-discovery.com/2014/10/stm32f4-fft-example/)

Amacım DSP library ile FFT almayı öğrenmek.

FFT almak için sırayla aşağıdaki işlemleri yaptım.
if(FFT_Ready_Flag)
{
SampleIndex=0;

for(i=0;i<ADC_SAMPLES;i=i+2) //Loading input buffer
{
    Input[i]=(float32_t)((float32_t)ADCConvertedValue[SampleIndex]-(float32_t)2048.0)/(float32_t)2048.0;
  Input[i+1]=0;       //Clearing imaginary Values
  SampleIndex++;
}

/* Initialize the CFFT/CIFFT module */
                       arm_cfft_radix4_init_f32(&FFT_Module, FFT_SIZE, 0, 1);
         /* Process the data through the CFFT/CIFFT module */
         arm_cfft_radix4_f32(&FFT_Module, Input);
/* Process the data through the Complex Magnitude Module for calculating the magnitude at each bin */
         arm_cmplx_mag_f32(Input, Output, FFT_SIZE);
/* Calculates maxValue and returns corresponding value */
arm_max_f32(Output, FFT_SIZE, &MaxValue, &MaxValueIndex);
/*Clearing FFT Buffer */
FFT_Ready_Flag=0; 
}


DSB libraryde Complex FFT alınmak istediğinde giriş verisi Çıkış verisinin 2 katı seçilmiş. Yani Öneğin Bana 32 noktada örnek lazım. Input dizisini 64 seçip ADC değerleri birer boşluk bırakılarak Input dizisine yerleştiriliyor.

Input[N]=ADC değeri ise Input[N+1]=0 olarak ayarlanıyor. N. eleman reel kısım ise N+1 imaginer kısım olarak açıklanmış örnekte.

Yukarıda verdiğim kodlarda en baştaki for döngüsüyle bu işlemi yapıyorum. Sayının +-1 aralığında değişmesi için ADC den okuduğum değeri 2048 den çıkarıp 2048'e böldüm. verdiğim linkteki adamda öyle yapmış sanırım sayıları küçültmek için böyle yapıyor.

DSP library içerisindeki Örnek data aşağıdaki gibi. Gördüğünüz gibi birer boşluk bırakılarak değerler yerleştirilmiş.
float32_t testInput_f32_10khz[2048] =
{   
-0.865129623056441, 0.000000000000000, -2.655020678073846, 0.000000000000000, 0.600664612949661, 0.000000000000000, 0.080378093886515, 0.000000000000000,
-2.899160484012034, 0.000000000000000, 2.563004262857762, 0.000000000000000, 3.078328403304206, 0.000000000000000, 0.105906778385130, 0.000000000000000,
0.048366940168201, 0.000000000000000, -0.145696461188734, 0.000000000000000, -0.023417155362879,


Birinci anlamadığım kısım neden komplex sayılarla işlem yapılıyor? Daha doğrusu CFFT nin RFFT den farkı ne? Mesela FFT fonksiyonları içerisinde arm_rfft_fast_f32 fonksiyonuda var. Uygulamada hangisinin artıları var onu bilmiyorum.

Diğer bir konu ise yukarıda yazdığım kodların gerçekte garip bir şekilde çalışması. Yine bir yerlerde hata yapıyorum.

yukarıda 32 nokta için bu işlemi yaptığımı söylemiştim. Output dizisinin ilk 20 elemanını doğrudan ekrana yazdırdım ve ADC den verdiğim ses sinyaline göre çıkış nasıl değişiyor onu anlamaya çalıştım.

Max örnekleme frekansımız 16Khz, Bunu 32parçaya bölersek 0, 500Hz 1000hz 1500hz gibi 500hz aralıklarla ölçüm yapabilmemiz gerekir.

Gerçekte 1Khz sinüs verdiğimde Output dizisinin 1, 18,19,20 ve 21. elemanlarında ufak artışlar görüyorum. 2Khz yapsam yine olmaması artmaması gereken elemanlarda artış görüyorum Bunun sebebini anlayamadım. Bunun gibi hiçbir frekansta çıkış değerim tutarlı değil.

Sonuç olarak çalıştıramadım. Fonksiyonların kullanımı tam olarak nasıl? Teorik olarak hata yaptığım bir yer varmı?
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Mucit23 - 21 Ocak 2016, 10:09:15
Arkadaşlar DSP library'deki kodu başka nasıl test edebilirim?


Şuanda ADC den veri giriyorum. ADC ye ise Telefon ile sinyal uyguluyorum.
(http://s17.postimg.cc/xjzcd29cf/fft_connect_sound_stm32f4.png)
ADC girişine 1.65V ofset eklemek için yukarıdaki devreyi kurdum. Değerler dediğim gibi anlamsız oluyor. Aldığım sonuçları henuz bargraph'a çizmedim ama yinede 0-16khz arası dizi elemanlarının değerleri sırasıyla artması lazım. Mantıken öyle ama yukarıdaki kodlar pratikte öyle çalışmıyor.


Fikri olan var mı?
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: beatname - 27 Ekim 2016, 14:55:48
Mucit23 sorunu halledebildin mi? Bende FFT konusunda bir çalışma gerçekleştirdim. Fakat takıldığım noktalar var
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Mucit23 - 21 Mayıs 2017, 23:09:07
Selamlar

Uzun zaman olmuş fft ile uğraşmayalı. DSP Library ile yine bir sinyal örneklemem gerekti.
35Khz'de örnek alıyorum. Örnek sayım 128. Dolayısıyla FFT algoritması bana 64 noktanın değerini vermesi gerekiyor. Sonucu daha iyi yorumlamak için Spektrum çizdirdim.

FFT Sonucum Çift görünüyor. Örneğin aşağıdaki resimde girişe 8 küsür Khz sinyal uyguluyorum.
(https://s10.postimg.cc/uyazgi32h/20170521_225354.jpg)

Sanki İşlem sonucu hep 32 band gibi görünüyor. Diğer 32 band birebir aynı.

Bu neden olur?
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: RaMu - 21 Mayıs 2017, 23:17:01
Acaba neden,
nyquist mezarında ters döndü,
simetrik olması gerek zaten diye kemikleri sızlıyor :)


Çok iddialı konuştum,
hatırladığım kadarıyla
fourier dönüşümü çıkan sonuç simetrik oluyordu,
neydi niyeydi hatırlamıyorum ama
şimdi merak ettim biraz bakacağım.
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Mucit23 - 21 Mayıs 2017, 23:22:42
Alıntı yapılan: RaMu - 21 Mayıs 2017, 23:17:01
nyquist mezarında ters döndü,
simetrik olması gerek zaten diye kemikleri sızlıyor :)

Aman hocam durun. Konuyu tam olarak hatırlamıyorum. Teorik bilgilerimi tazelemem lazım :) Ama sanki böyle değildi. Konuya tekrar bir bakayım.
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: RaMu - 21 Mayıs 2017, 23:43:07
Şimdi @berat23 olaydı şak diye söylerdi,
FT hakkında bilgi sahibi başka üyeler de vardı ama nikler aklıma gelmedi,
bilenler görse hemen hatırlatırlar cevabı aslında.

Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: berat23 - 22 Mayıs 2017, 16:36:02
Alıntı yapılan: RaMu - 21 Mayıs 2017, 23:43:07
Şimdi @berat23 olaydı şak diye söylerdi,
FT hakkında bilgi sahibi başka üyeler de vardı ama nikler aklıma gelmedi,
bilenler görse hemen hatırlatırlar cevabı aslında.


davete icabet edelim.


verilen rakamlara göre manzarada bir hata yok. şöyle ki 35khz denmiş, yuvarlak olsun diye 32 diyelim. sonuç 32 uzunluklu gelmiş, yani yarısı 16 örnek 16khz'e denk geliyor. sinyal de 8khz ise 8. ve 24. örneklerde bir tepe olması lazım ki olmuş. yani bu sonuç doğru.


fft belli uzunluklarla yapılan bir işlem, o uzunluklarda ikinin kuvveti. şimdi senin elinde 128 örnek varsa buna illa 128 uzunluklu fft almak zorunda değilsin. uzunluğun az olursa işlemsel yükün azalır ama frekans çözünürlüğün düşer. fft uzunluğunu arttırırsan kompleksite artar ama çözünürlüğün de artar. daha uzun fft almak için veriye ekleme yapman lazım, mesela zero padding ile istediğin uzunluğa getirirsin.


burdaki durum muhtemelen şu; kullandığın fonksiyon 32 uzunluklu fft alıyor. dolayısıyla sonuçlar veri ne uzunlukta olursa olsun 32 oluyor.
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Mucit23 - 22 Mayıs 2017, 17:19:04
@berat23 Cevap için teşekkürler

FFT almak için arm_cfft_radix4_f32 fonksiyonunu kullanıyorum. Buradaki f32 tanımı acaba boyutumu veriyor? Ben Float 32 kısaltması şeklinde yorumluyordum.

Diğer türlü örnek sayımı 128 yapıp fonksiyona verince saçma sapan çıktılar alıyorum. FFT ile alakası yok.

FFT almak içinde aşağıdaki yapıyı kullanıyorum.


if(FFT_Ready)
{
FFT_Ready=0;

   for(i=0;i<SAMPLES;i=i+2)
{
    Input[(uint16_t)i] = (float32_t)(ADC3ConvertedValues[i/2] - 2048.0) / (float32_t)2048.0;
  /* Imaginary part */
            Input[(uint16_t)(i + 1)] = 0;
}

/* Initialize the CFFT/CIFFT module, intFlag = 0, doBitReverse = 1 */
         arm_cfft_radix4_init_f32(&S, FFT_SIZE, 0, 1);
       
         /* Process the data through the CFFT/CIFFT module */
         arm_cfft_radix4_f32(&S, Input);
       
         /* Process the data through the Complex Magniture Module for calculating the magnitude at each bin */
         arm_cmplx_mag_f32(Input, Output, FFT_SIZE);
       
         /* Calculates maxValue and returns corresponding value */
         arm_max_f32(Output, FFT_SIZE, &maxValue, &maxIndex);
    }


Örnek sayım 128 ama Input dizisinin boyutu 256. Bu diziye birer boşluk bırakarak yerleştiriyorum elemanları. Dizinin tek indisli elemanları imajiner değerler(sabit olarak 0 veriyorum), Çift indisli elemanları ise reel değerler. Bu değerlere ise ADC den okunan değerleri +-1 aralıığına oranlayıp fonksiyona veriyorum.

Hocam peki nasıl yapmam gerekiyor? 64 çıkış veya 128 çıkış için dsp library'yi nasıl kullanacağım?
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Mucit23 - 23 Mayıs 2017, 18:15:09
Güncel,


Hocam 64 Nokta Çıkış için ne yapmam gerekiyor? Çözemedim. Sample Sayısını arttırınca sistem sapıtıyor.
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: berat23 - 23 Mayıs 2017, 19:16:48
arm_cfft_radix4_f32 isminden ben kompleks, radix4 ve float32 yi anlıyorum. bunlar da uzunlukla alakalı değil. sonundaki f32'nin aslında ne olduğunu da bence siz koda bakıp daha iyi anlayabilirsiniz, ayrıca st'nin ise library, mutlaka dökümantasyonu vardır bakın bence.

bundan sonrası o koda özel işler, ben şahsen hiç birşey yapmadım dsp lib ile. dolayısıyla ben burda bitiyorum.
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: comme_il_faut - 23 Mayıs 2017, 23:33:12
Bu arada matlab code generation ile fft fonksiyonunun c koduna dönüştürülmesi mümkün bilginiz olsun. Sonuçlar cmsis dsp "fft" fonksiyonundan çok daha hassastı diye hatırlıyorum.
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Mucit23 - 24 Mayıs 2017, 22:25:21
Alıntı yapılan: berat23 - 23 Mayıs 2017, 19:16:48
arm_cfft_radix4_f32 isminden ben kompleks, radix4 ve float32 yi anlıyorum. bunlar da uzunlukla alakalı değil. sonundaki f32'nin aslında ne olduğunu da bence siz koda bakıp daha iyi anlayabilirsiniz, ayrıca st'nin ise library, mutlaka dökümantasyonu vardır bakın bence.

bundan sonrası o koda özel işler, ben şahsen hiç birşey yapmadım dsp lib ile. dolayısıyla ben burda bitiyorum.

Hocam şimdi anladım. DSP library Sadece 64, 256 ve 1024 noktadan örnek alıyor. 64 Nokta FFT için 64 Adet örnek alıp birer boşluk bırakarak Input dizisine yerleştiriyoruz. Sonuç yine 64 elemanlı output dizisinde oluyor fakat Simetrik bir şekilde yerleştirilmiş oluyor. Yani çıktı 32 nokta aslında.

Fonksiyonlar çalışıyor problemsiz bir şekilde.

Giriş filtresi hakkında öneriye ihtiyacım var. Ses sinyalini basit bir Filtreden geçirip Analog girişe uyguluyorum fakat pek düzgün sonuçlar alamıyorum. Ses sinyalini Analog girişe uygulamak için girişte nasıl bir filtre kullanmalıyım
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: berat23 - 24 Mayıs 2017, 23:02:36
tamamen sallıyor olabilirim ama diziyi boşlukla yerleştirme sayıların kompleks olması anlamına geliyor olabilir mi? genelde kompleks sayılar sanal ve reel kısmı olarak iki sayıyla saklanır da ondan benzettim. bu yüzden kodun dökümantasyonuna bakmak lazım diyorum, yoksa böyle sallayarak ya da deneme yanılma ile bulunur.

filtreyi analog soruyorsun sanırım. analog filtreye takla attırmak yerine ben olsam analog kısma sadece basit low pass anti aliasing filter koyup asıl taklalı kısmı sayısal tarafa yapardım.
Başlık: Ynt: Stm32f4 Discovery DSP LİB kullanımı
Gönderen: Mucit23 - 24 Mayıs 2017, 23:39:36
Hocam aynen Komplex FFT aldığım için birer boşluklarla yerleştiriyorum diziye. FFT almada sıkıntı yok benm donanıma eğilmem lazım Zira girişe uyguladığım filtre yüksek frekanslı sinyallerin genliğini biraz düşürüyor sanırım. Çünkü yüksek frekanslı sinyallerde çok az bir değişim görüyorum.
(https://s22.postimg.cc/lbvtw378x/fft-connect-sound-stm32f4.png)
Buradaki dirençleri 100k kullandım
Gerçi bu sadece Müzik sinyali için geçerli. Aşağıdaki gibi bir siteden bilgisayarın ses kartını kullarak farklı frekanslarda tonlar uyguluyorum.


http://www.szynalski.com/tone-generator/


Frekans aralığını değiştirince FFT sonucumun gayet düzgün bir şekilde değiştiğini gözlemleyebiliyorum. Fakat müzik sinyalinde neden böyle davranıyor. Biraz filtre ile ilgili sanırım.


DC bileşene yakın değerleri hiç geçirmeyecek. Yüksek frekanslı değerleri ile maximunda geçirek nasıl bir filtre kullanabilirim?