8 bit ses çalmada uygun filtre

Başlatan Mucit23, 13 Eylül 2012, 20:44:55

Mucit23

Merhaba Arkadaşlar

MP3 Dosyalarını İstediğim gibi Wav formatına dönüştürebileceğim bir program buldum. Program güzel çalışıyor fakat sadece 8,16 ve 24 bit çözünürlükle ses dönüşümü yapıyor. 8 bitte ses fena değil. Fakat  istemediğim iki çeşit ses var. İyi filtre yapamıyorum sanırım.

1. si hani pwm ile motor sürdüğümüz zaman düşük frekanslarda motordan ses gelir ya tam olarak öyle bir ses geliyor.
2. istenmeyen ses ise sanki arkada telefon sesi gibi bir ses geliyor.Bu sestende kurtulamadım bir türlü.

10 bit ses dönüşümü yapan bildiğiniz program varmıdır

Filtre olarak R-C filtre var. Aşağıdaki gibi

anonymous picture upload
Anfi kısmında ise basit TDA2003 lü bir anfi kurdum. Başkada bir ayrıntı yok. Bu konuda bi yanlışım varmıdır.

18F452 yi 40Mhz de çalıştırıyorum. CCP1 pininden 8 Khz pwm frekansının Duty değerini 50us de bir güncelliyorum. Protonda denememi yaptım.  Aslında Basicden elimi kolumu çekmeye çalışıyorum hatta epeyce CCS ile uğraştım ama CCS nin SD kütüphanesini çalıştıramadım bir türlü. Bu konudada çalışma yapan olmamış anladığım kadarıyla. Yarın birde  Hi Tech ile deneyeceğim.

Reminders OFF
Device = 18F452
Xtal = 10
PLL_Req=TRUE
TRISA=0:PORTA=0
TRISB=0:PORTB=0
TRISC=0:PORTC=0
TRISD=0:PORTD=0

'-----------------------------------------------------------
All_Digital = TRUE
'-----------------------------------------------------------
Hserial_Baud = 115200                                       'Setup RS232 port
Hserial_RCSTA = %10010000                                        
Hserial_TXSTA = %00100100
'-----------------------------------------------------------
CCP1_Pin = PORTC.1                                          'Setup PWM 
'-----------------------------------------------------------
Dim Response As Byte                                        'Variables
Dim SD_IO    As Byte
Dim SD_DATA  As Byte
'-----------------------------------------------------------
Symbol SD_CS = PORTE.0                                      'SPI CS to SD CS (SD pin 1)
Symbol SD_DI = PORTC.5                                      'SPI DO to SD DI (SD Pin 2)
Symbol SD_CLK = PORTC.3                                     'SPI CLK to SD CLK (SD Pin 5)
Symbol SD_DO = PORTC.4                                      'SPI DI to SD DO (SD Pin 7)
'-----------------------------------------------------------
Include "SD_MMC_Deneme1_Lib.pbp"
'-----------------------------------------------------------
Repeat 
Response = SD_Init_FS_MSSP SD_SPI_FOSC_04
High PORTB.0
Until Response = 0
Low PORTB.0

winamp:
SD_File_Name = "WINAMP_" 
SD_File_Ext = "WAV" 
Response = SD_Open_File
If Response = 1 Then
Stop
EndIf
PORTA.0=1
While SD_EOF < 1
SD_DATA = SD_Read_Byte_From_File
HPWM 0,SD_DATA,8000
DelayUS 50
Wend
Finish:
PORTA.0=0
Stop


Kodlar bu şekilde..
Antraktaki Tarık Konca isimli arkadaşın yaptığı uygulamadan faydalandım..
Asıl Link Burada..
http://antrak.org.tr/index.php?option=com_content&task=view&id=1695&Itemid=55

Wav dosyası okumak kolay. MP3 nasıl okunur veya çözümlenir. Bunu bana kısaca bir iki kelime ile açıklayabilirmisiniz.

Maxim

adobe audition programini kullanabilir waw dosyasina ne istersen yapabilirsin

Mucit23

Verdiğiniz iyi oldu hocam. Bayağı profesyonel bir programa benziyor.

ince motor sesinin sebebi pwm frekansıyla ilgiliymiş. İnternette hep 8Khz pwm frekansı olması gerektiği yazıyordu. Ben bu frekansı önce 20 sonra 25Khz ye çıkardım ses felan kalmadı, Yani Filtrede problem yok. Müzik sesi de netleşti fakat berrak değil. Ama kesinlikle bilgisayardaki 8 bit çözünürlüklü çıkan sese benzedi. Şimdi birde 10 bit ile deneyeceğim. Ne kadar fark olur merak ediyorum.

Protonla Fazla uğraşmayacağım ama yarın kesinlikle Hitech ile devam edeceğim. En azından Elm-chanın kütüphanesini adapte etmeye çalışırım.
Haftaya da Mp3 çalarımı yaparım inş :D

İlgilenenler için yukarıdaki kodlar çok iyi çalışıyor. Tarık Konca isimli arkadaşa tekrar teşekkür ediyorum.Programı Derlemeden önce protonda SD_File_System kütüphanesini eklemelisiniz. Kütüphane ekleme ile ilgili aşağıdaki linki inceleyebilirsiniz.
https://www.picproje.org/index.php?topic=34337.0


Maxim

şu sd card include dosyasını bir yere upload edebilirmisiniz ?


mdargut

İyi akşamlar Mucit23.
Size birkaç sorum olacaktı. Bu 8 bitlik ses dosyalarında ses kalitesi nasıl? Yani insan sesi anlaşılır seviyede oluyor mu? Benimde bir proje için sesi kaydedip karşıya göndermem gerekiyor. Telsiz kalitesinde oluyor mu?
İkinci sorum ise dosya boyutu ile ilgili. Mesela 30 sn lik bir kayıt nekadar yer kaplıyor?
En düşük dosya boyutunu hangi dosya formatında elde ederiz? Tabi kodlama ve kod çözme aşırı bir işlem gücü gerektirmemeli.

Mucit23

Ses MP3 kalitesinde değil ama rahatlıkla yetiyor. Sadece 8 bitten dolayı hafiften boğuk çıkıyor. Telsizden 10 kat iyi...
Boyut açısından bakarsak eğer SD kartlarda boyut pek önemli olmuyor tabiki ama benim denediğim uygulamada 4dakika 20 sn lik bir müzik dosyası mp3 hali yaklaşık 4 mb civarında. Çözünürlükle oynamada herhangi bir converter programı ile wav formatına çevirince boyut 45 mb civarına çıkıyor. Fakat 8 bit ve mono olarak çevirince boyut 2mb civarına düşüyor. Bu değerler sadece örnektir.

mdargut

Teşekkür ederim.
Ben bu konu üzerine bira araştırayım. Faydalı olabilecek link tavsiyeniz varsa sevinirim.

Mucit23

Malesef elimde pek bi kaynak yok. Yine bu forumu araştır.

Maxim

bence adobe audition ile güzelce oynanırsa waw üzerinde baya güzel sonuçlar alınacaktır

rree

      Niçin Pwm modülünü kullanıyorsunuz.
      Pwm yerine 16 bit DAC  barındıran picler var  ses de mükemmel olur.

dsPIC33FJ32MC302/304,
dsPIC33FJ64MCX02/X04 AND
dsPIC33FJ128MCX02/X04
Audio Digital-to-Analog Converter (DAC):
- 16-bit Dual Channel DAC module
- 100 Ksps maximum sampling rate
- Second-Order Digital Delta-Sigma Modulator

Mucit23

#11
Hocam sırf 16 bit dac için o mikrodenetleyicilerle ugrasmaya degmez. çok gerek olsa ya kendim yaparim r2r ile yada hazır dac kullanırdım. Ama  ugrasilabilir.

rree

#12
winamp:
SD_File_Name = "WINAMP_" 
SD_File_Ext = "WAV" 
Response = SD_Open_File
If Response = 1 Then
Stop
EndIf
While SD_EOF < 1
SD_DATA = SD_Read_Byte_From_File
HPWM 0,SD_DATA,25000
DelayUS 50
Wend
GoTo winamp
End

Çalma kotların burası ise  yöntem yanlış.
  2. satırda sd kartan datayı okuyorsun. sonra Pwm gönderiyorsun.
  50 us gecikmeyle  tekrar ediyorsun.
  - mmc veya sd kartan data okurken  farklı zaman harcamaları oluyor. İlk anda 512 bayt okuyor.
siz byte byte istekte bulunduğunuz sürece 512 lik buffur  boşalıncaya kadar kısa sürelerde size cevap
veriyor. 512 byte tamamı okunduğunda  sd kartan okumak için uzun zaman harcıyor, o arada seste motor  sesi gibi bozulma olduğunu göreceksin.

    İki sene önce  bunları  sürelerini tek tek takip ettim.  Mikro basicde yapmıştım  kotları kaybettim malesef .  Timer kesmesini kullanarak dac göndermiştim Kalan zamanlarda ram açtığım bufer i dolduruyordum. 22khz örneklemde temiz ses vardı. İlk zamanlar yukarıda kotlara benzer yöntem ile yapmıştım çıkan cızırtıyı DAc da aramıştım. Osilaskop ile incelediğimde neden ortaya çıktı.

50 us ölü zaman. Zaten pic in hızı yetmiyor.

Mucit23

Anladım. Çalma kısımları dediğim gibi bana ait değildi. Ama bu kadarı bile bence iyi çalışıyor. 8 bitte berrak bir ses gelmiyor ama gayet yetiyor.
Aslında 50us lik gecikmeyi ben koydum. Kodun orjinalinde daha fazla var. Bu gecikmenin birazda ses dosyası ile olduğunu düşünüyorum. Elimde istediğim formatta bir wav dosyası vardı. Onda hiç gecikme koymam gerekmedi. Bunda ise 50us mutlaka gerekiyor. Yoksa...

Tabi bu durum sadece işlemci bu işlerle uğraşıyorsa geçerli. Eğer başka işler yapılacaksa uygun olmayabilir.