Picproje Elektronik Sitesi

DİJİTAL & ANALOG ELEKTRONİK => Ses Frekansı => Konuyu başlatan: Mucit23 - 31 Ekim 2020, 22:40:01

Başlık: PWM ile Ses Üretmede Filtreleme işi
Gönderen: Mucit23 - 31 Ekim 2020, 22:40:01
Selamlar

PWM ile ses ürettiğim bir uygulama var. Wav dosyasını 8 Bit 8Khz Mono olarak Flash hafızaya gömüp oradan pwm olarak dışarı veriyorum. Filtreleme işini düzgün yapamadım.

Anfi olarak basitçe şu devreyi uyguladım.
(https://www.arduino.cc/wiki/static/b2b673e160dd6a5d820ebb7734e54291/b6e7a/LM386_AudioDue.jpg)
Bu devreye Telefon veya PC ile ses uyguladığımda gayet güzel ses alıyorum sorun yok bu kısımda.

Fakat PWM ile ses uyguladığımda taşıyıcı sesini çok fazla duyuyorum. PWM çıkışına çeşitli RC Filtreler ekledim PWM frekansı 8Khz olarak ilk başta denedim. Ses datasını flash hafızaya gömdüğüm için programda çok yer kaplasın istemedim ama 8Khz için hışırtı kabul edilebilir seviyede değil. Sonra 16Khz'ye çıktım Hışırtı biraz azaldı ama yine var. Ve Data boyutum X2 oldu.

8Khz gibi Düşük frekanslarda PWM ile düzgün ses çıkarmanın yolu varmı? Eldeki MCU'yu kullanma derdindeyim. DAC yok :)
 
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: yas - 31 Ekim 2020, 23:39:22
@Mucit23 hocam şu devre ile deneyin.

(https://i.hizliresim.com/kb5wkX.png)
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: ipek - 01 Kasım 2020, 00:44:08
pin 1 ve 8 arasındaki boostrap kapasitörünü çıkarın boş kalsın,ses elbet düşecektir fakat gürültüde azalacaktır..
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: z - 01 Kasım 2020, 02:49:45
Eger dinledigin ses muzik ise 8 Khzi bastirmak muzigi kotu etkiler (zaten 8 Khz ornekleme muzik icin uygun degil).

Eger konusma sesi ise low pass filitreyi 2. dereceye cikartip bir dene.

Benim de bir wav uygulamam vardi. Gerci frekansim cok yuksekti ama  amplifikator cipi kullanmadim. PWM sinyali guclendirip cikisi kapasitif kuplajla dogrudan hoparlore verdim diye hatirliyorum.

Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: Mucit23 - 01 Kasım 2020, 12:17:06
Alıntı yapılan: yas - 31 Ekim 2020, 23:39:22@Mucit23 hocam şu devre ile deneyin.

(https://i.hizliresim.com/kb5wkX.png)

Sanırım Benim Anfinin giriş empedansı çok düşük. 47K Seri direnç ile hiç ses alamıyorum.

Sanırım DAC bulunduran bir çip seçsem iyi olacak. Baktım pin to pin uyumlu stm mcu lar var. 2sn lik bir uyarı sesi çıkarıyorum. Bu yüzden SD kart vs gibi olaylara girmeden 8Khz ile basitçe halletmem lazım. 8Khz Dac ile verilse bence yeterli olur. Çünkü PC de çaldığımda pek sorun görünmüyor.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: berat23 - 01 Kasım 2020, 15:33:38
sinyal mantığıyla bakarsak 8khz taşıyıcı oldukça düşük kalıyor. mantıken taşıyıcının duyulması istenilen frekanstan yüksekte olması ve bu pwm sinyalinin duyulabilir frkenasta cut-off'u olan bir low pass filter'dan geçmesi gerekiyor ki temiz ses alınsın.

diyelim duymak istenilen maks. frekans 16khz. o zaman 32khz üzeri bir pwm frekansı olmalı. low pass ise (@yas'ın paylaştığı devrede r8-c6) cut off'u 16khz veya biraz altı derseniz cızırtı doğal olarak duyulmayacağı gibi diğer frekanslaarı da temizce alırsınız. rakamları çok kaba verdim anlatabilmek için.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: yas - 01 Kasım 2020, 19:52:10
@Mucit23 hocam, @berat23 ün dediği gibi bu durum varsa cızırtı oluşması gayet normal. Normalde pwm frekansınızı 70-100 khz gibi bir değerde üretmelisiniz. Örnekleme hızınız 8khz ise yani wav dosyası 8khz lik olarak üretilmişse saniyede 8000 defa olacak şekilde duty değerini değiştirmelisiniz. Aynı dosyayı bilgisayardan nasıl dinliyorsanız devrenizden de o kalitede çıkacaktır.

Not: Ses dosyasının örnekleme hızınızın 10 katı kadar pwm frekansı kullanılmalı.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: tunayk - 01 Kasım 2020, 20:23:48
Alıntı yapılan: yas - 01 Kasım 2020, 19:52:10@Mucit23 hocam, @berat23 ün dediği gibi bu durum varsa cızırtı oluşması gayet normal. Normalde pwm frekansınızı 70-100 khz gibi bir değerde üretmelisiniz. Örnekleme hızınız 8khz ise yani wav dosyası 8khz lik olarak üretilmişse saniyede 8000 defa olacak şekilde duty değerini değiştirmelisiniz. Aynı dosyayı bilgisayardan nasıl dinliyorsanız devrenizden de o kalitede çıkacaktır.

Not: Ses dosyasının örnekleme hızınızın 10 katı kadar pwm frekansı kullanılmalı.
Tamam da adam Hi-Fi müzik seti yapmıyor ki :)
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: power20 - 01 Kasım 2020, 20:27:49
Hifi olmasa da 8khz basit bir sesi güzel çalabilmek için galiba 48khz üzeri pwm gerekiyordu. Bizzat denedim. Ben diyeyim 48khz, siz deyin 98khz. Pwm frekansında cimrilik yapılmamalı. Sonuç başarısız olur
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: Mucit23 - 01 Kasım 2020, 22:24:33
PWM'den vazgeçtim. DAC kullanıcam. Diğer türlü en azından 22Khz üzeri bir pwm uygulamam gerekecek. Bunun için wav dosyamda 22Khz örneklenmiş. Bu şekilde örneklenmiş bir sinyali hafızada tutmam çok zor. SD kart kullanmam gerekir.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: yas - 01 Kasım 2020, 22:35:52
Alıntı yapılan: tunayk - 01 Kasım 2020, 20:23:48Tamam da adam Hi-Fi müzik seti yapmıyor ki :)

:o 8khz örneklemeli ses dosyası 8khz pwm frekansı ile üretmeye çalışılırsa her bir ses değişim verisi için sadece 1 periyod kullanılmış olur. Bu durumda pwm çıkışına analog dönüşüm için eklenen r-c filtre devresindeki çıkış genliği gerekli seviyesine tam oturmadan arkadan diğer değişimler gelmeye devam edecek sinyal olması gerektiğinden farklı üretilecektir.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: Mucit23 - 01 Kasım 2020, 22:40:33
Alıntı yapılan: yas - 01 Kasım 2020, 22:35:52:o 8khz örneklemeli ses dosyası 8khz pwm frekansı ile üretmeye çalışılırsa her bir ses değişim verisi için sadece 1 periyod kullanılmış olur. Bu durumda pwm çıkışına analog dönüşüm için eklenen r-c filtre devresindeki çıkış genliği gerekli seviyesine tam oturmadan arkadan diğer değişimler gelmeye devam edecek sinyal olması gerektiğinden farklı üretilecektir.

Aslında sorun benim veriyi aktarma için DMA kullanmamdan kaynaklanıyor. Bunu düşünmemiştim. Büyük bir hata. 8Khz örneklemeli ses datam olsun PWM frekansımı 44KHZ'ye ayarlayıp Bir döngü içerisinde örneğin 8Khz örneklemeli ses datamı 50us aralıklarla PWM registerine yazabilirim. Ben DMA ya start verip başka işlerle uğraşıyordum.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: yas - 01 Kasım 2020, 22:46:35
Alıntı yapılan: Mucit23 - 01 Kasım 2020, 22:24:33PWM'den vazgeçtim. DAC kullanıcam. Diğer türlü en azından 22Khz üzeri bir pwm uygulamam gerekecek. Bunun için wav dosyamda 22Khz örneklenmiş. Bu şekilde örneklenmiş bir sinyali hafızada tutmam çok zor. SD kart kullanmam gerekir.
Hocam bence yanlış düşünüyorsun. Eğer konuşma veya alert amaçlı bir ses çalacaksanız 8khz örneklem gayet yeterli. Sadece pwm frekansınız yükseltilmeli. Şayet konuşma yok sadece değişik tonlar üretmek istiyorsanız zaten bunlara hiç gerek yok. Bildiğim kadarıyla proton derleyici kullanıyordunuz. Eğer öyle ise freqout komutu fazlasıyla işinizi görecektir. Eğer proton kullanıyor ve illa sd kart kullanacağım derseniz örnek olarak yapılmış "mmc wave file player" diye bir örneği var gerçekten çok başarılı incelemeniz tavsiye ederim.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: yas - 01 Kasım 2020, 23:00:05
Alıntı yapılan: Mucit23 - 01 Kasım 2020, 22:40:33Aslında sorun benim veriyi aktarma için DMA kullanmamdan kaynaklanıyor. Bunu düşünmemiştim. Büyük bir hata. 8Khz örneklemeli ses datam olsun PWM frekansımı 44KHZ'ye ayarlayıp Bir döngü içerisinde örneğin 8Khz örneklemeli ses datamı 50us aralıklarla PWM registerine yazabilirim. Ben DMA ya start verip başka işlerle uğraşıyordum.

Devrenizin diğer speclerini bilmediğim için anlamsız yorumlar yapıyor olabilirim. Daha önce hangi mcu olduğunu hiç sormadan direkt pic18 serisi gibi düşünerek yazdım. hangi mcu olursa olsun 8khz için kesme kullansanız diğer işlerinizi aksatır mı?
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: Mucit23 - 02 Kasım 2020, 09:56:47
Protonu en son 8 sene önce kullanmıştım. Şuan STM32'de deneme yapıyorum. Aslında sistemi yanlış kurdum. Şuan herşey aklıma yattı. Bu DMA ve PWM ile yağılacaksa iki adet itmer kullanılmalı ben burada hata yaptım. Tetikleyici Timer ile PWM üretilen Timer ayrı olmalı. PWM üretilen Timerile 44Khz veya kaç khz kullanılıyorsa sabit pwm üretilmeli. İkinci Timer ise Ses sinyalinin örnekleme frekansına kurulmalı ve update eventinde DMA'ya tetik vermeli. DMA aldığı veriyi PWM registerine yazarsa olur. Bu akşam bunu deneyeceğim.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: power20 - 02 Kasım 2020, 10:10:41
DMA gerektiren durum yok. 8khz için örnekler tablodan 125us aralıkla okunuyor, pwm e veriliyor.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: superconductor - 02 Kasım 2020, 12:30:53
Pwm çıktığınız pinin çıkış hızına mümkün olan en düşük değeri verirseniz rise-fall süreleri uzayacak ve kare dalgadaki çok yüksek frekans bileşenleri kaybolacaktır. Bu taşıyıcı kare dalganın köşelerini yumuşatır ve sonraki low-pass filtre katlarının işini kolaylaştırır.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: RaMu - 02 Kasım 2020, 15:36:27
Alıntı yapılan: Mucit23 - 01 Kasım 2020, 22:40:33Aslında sorun benim veriyi aktarma için DMA kullanmamdan kaynaklanıyor. Bunu düşünmemiştim. Büyük bir hata. 8Khz örneklemeli ses datam olsun PWM frekansımı 44KHZ'ye ayarlayıp Bir döngü içerisinde örneğin 8Khz örneklemeli ses datamı 50us aralıklarla PWM registerine yazabilirim. Ben DMA ya start verip başka işlerle uğraşıyordum.

DMA ve PWM ile yapılıyor diğer konuda bahsetmiştim.
https://www.picproje.org/index.php/topic,78354.0.html
Alıntı yapılan: RaMu - 30 Ekim 2020, 01:37:24tim2 kanal  PWM çıkışı,
tim3 ilede DMA tetiklenip PWM duty değerini tutan 512 byte buffer CCR4 e gönderiliyor,

Yöntem şöyle:
İki timer kullanılıyor;
PWM üreten timer ın DMA ile alakası yok,
yüksek bir frekansa ayarlıyorsun.
Başka bir timerda DMA tetikliyor,
bu timer ın DMA tetikleme frekansı sesin örnekleme frekansı,
her tetiklemede sıradaki WAV değerini
PWM üreten timer ın CCR registerına aktarıyor.
Başlık: Ynt: PWM ile Ses Üretmede Filtreleme işi
Gönderen: tamircihasan - 02 Mayıs 2022, 12:35:57
düzgün ses alabilmeniz için taşıyıcıyı en az 50khz civarında tutmanız lazım LPF ile sesi taşıyıcıdan ayırabilmek için taşıyıcı olabildiğince yüksek frekans olmalıdır.
yok uğraşmam derseniz uygun fiyatlı dac ler var. ben dac olarak cs4331 kullanıyorum hem stereo hemde 8 pin olmasından dolayı gayet kullanışlı fx processör uygulamalarımda tercihim. aliexpresste uygun fiyata bulunuyor