Sari la conținut
ELFORUM - Forumul electronistilor

Filtru digital cu dsPIC33F


mircang9

Postări Recomandate

Salut la toata lumea,Pentru referinte anterioare vedeti la sectiunea CQ-YO la radioamatorism topicurile"Stie cineva un soft free de filtrare FTB la un fisier mp3 ?" si"Filtrarea digitala a spectrului de frecvente".Implementarea este placa demo dsPIC starter Kit1.Ultima postare la "Stie cineva un soft free de filtrare FTB la un fisier mp3 ?".Acum sunt la faza de a transfera cele 256 sau 512 valori fractionale filtrate lamodulul PWM output compare pentru a genera semnalul filtratfara sa folosesc DMA.Exista dsPIC cu 4K sau mai mult de memorie DMA ?dsPIC33FJ256GP506 de pe placa demo are 2K DMA adrese adica 1K de datein DMA.Topicul acesta cu filtrarea digitala a fost deschis de Cirip, insa si pe mine maintereseaza foarte mult.:dans:

Link spre comentariu
  • Răspunsuri 18
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • mircang9

    13

  • Mondan

    3

  • cirip

    2

  • 10vid

    1

Top autori în acest subiect

Imagini postate

chiar nu stie nimeni ? N-a lucrat nimeni cu PWM/output compare de la dsPIC33Fca convertor digital analog pentru trimiterea a, sa zicem, 256 intregi pe rand ?int are intervalul [-32xxxx; +32xxxx] pe 16 biti. Daca nu codul macarlogica. Cer asta nu pentru ca nu m-as pricepe pana la urma, dar ca sa fac mai repede chestia asta.

Link spre comentariu

Am aplicat functia fereastra exponentiala poisson combinata cu functia rectangulara.Oricum caracteristica filtrului nu este simetrica. Adica panta intre Fp2 si Fs2 este mai abrupta decat intre Fs1 si Fp1. E ceva de genul din figura:

post-23035-139829338163_thumb.jpg

Link spre comentariu

Frumos, dar pune si niste axe si gradatii, ca sa vedem si noi herti si dB, sa facem cunostinta mai bine.Cu ce ai trasat graficul?Ma strofoc si eu sa scot la lumina un programel cu desepic, deocamdata numai in simulare, dar mi-a cam mancat zilele. Incerc sa fac esantionare simultana pe 4 canale, apoi sa folosesc DMA-ul ca sa umplu bufferele in modul scatter-gather, numai ca, cel putin in simulare, imi scrie o parte dintre esantioane unele peste altele. Mai sap!Cirip

Link spre comentariu

Eu NU am lucrat cu PWM pentru dsPIC.Da, exista dsPIC-uri mult mai "dotate". Se gasesc la TME, da un search are si reclama pe Elf. Se conecteaza usor la PicKIT.nteleg ca PWM este pe 16 biti.Eu am intrat doar sa te intreb. Procesezi cu acest dsPIC sunetul, ca pana acum ai vorbit de "semnal" dar cred ca se refera la sunet.Daca da cat de buna e converia A/D (care cred ca e pe 12 biti la 1MS/s sau 100Ks/S) ?Eu sunt interesat cat de clar este sunetul obtinut din acel PWM.Eu am incercat cu Adobe Audition sa transform mp3 in fisiere audio pe 8 biti. Asa aveam fasait suparator pe inalte. Nu am ideie cum se aude cu o transformare A/D pe 12 biti. Asa ca daca stii, m-ai ajuta cu raspunsul. Eu vreau sa imi fac o statie audio si sa pun PWM-ul de la iesire printru driver pe MOSFETii de putere.

Link spre comentariu

Salut la toata lumea, Iata niste print screen-uri in 1.jpg atasat.Frecventele filtrate sunt: 1-500; 2-690; 3-720; 4-750; 5-780; 6-810; 7-840; 8-870; 9-900; 10-930 ; 11-990; 12-1020; 13-1050; 14-1110; 15-1140; 16-1170; 17-1200; 18-1230; 19-1260; 20-1290;21-1320; 22-1350; 23-1380; 24-1410; 25-1440 Hz. Frecventele le-am generat cu un soft. Ce a iesit din filtru le-am inregistrat cu Audicity. Se observa pauzele cand schimbam frecventele in timp ce Audacity inregistra. Cred ca fata de Matlab este o testare mai clara ( pe viu ). Am incercat sa mixez frecventele si apoi filtrare si filtrarea chiar mergea. Din Matlab am dedus empiric caracteristica de mai sus; oricum se observa mai bine la filtrarea cu fereastra Exponential de mai jos. Deci caracteristica filtrului este cat decat simetrica. Banda filtrata este pentru canalul 7 cu frecventa centrala Fc = 1140 Hz. Fp1 = 1110 Hz; Fp2 = 1170 Hz adica destul de stramta. Fereastra exponential elimina ( face zero ) coeficientii din extremitati concentrandu-se mai mult pe coeficientii din vecinatatea Fc. Se observa rezultatele conforme cu teoria: la fereastra rectangulara filtrarea este mai abrupta dar riplurile din banda de trecere sunt mai mari. Cred ca Hamming, Hanning sunt cele mai bune totusi si de aceea sunt implicite in filtrarea FIR din Matlab.Cat despre softul bagat in dsPIC33F a fost mult de lucru/testat desi programul ocupa doar 1% din Flash iar RAM este ocupat 43%. Esantionarea este la 8 KHz. Cand am marit frecventa de esantionaremi se cam strica semnalul filtrat. Motivul: accesul lent la memorie isi spunea cuvantul.Acum coeficientii si numarul de esantioane este egal adica 512. Cred ca mai mult de atatnu poate dsPICul asta. Frecventa este 80 MHz. Fcy = 40 MHz. ADC foloseste tot DMA-ul.PWM foloseste memoria X din RAM.Pentru a restrange banda filtrata am aplicat tehnica restrangerii adica: Fp1 l-am adus laFc-10Hz si Fp2 l-am adus la Fc+10 Hz. Cand restrangeam mai mult elimina informatia utiladin banda filtrata. Vorbesc aici de calculele din Excel.Am facut un programel in C ca sa-mi aranjeze automat coloana cu coeficienti din Excelsi apoi foarte usor ii import intr-un fisier extensia *.s cu caracteristicile filtrului pe care il bag in Mplab.Am incercat sa nu mai folosesc DMA datorita spatiului limitat si am folosit atat ADC cat si PWMcu memoria RAM obisnuita dar datorita vitezei de acces mai lente semnalul filtrat avea intreruperi cu o perioada constanta. Ajunsesem la 1024 esantioane si 1024 coeficienti. Am pussi frecventa de esantionare la 44.1 KHz. Ar fis fost excelent daca toti acestia ii bagam intr-unDMA dar asta e. Nu frecventa de esantionare cauza aceste lucruri ci, repet, accesul lent la memorie ceea ce impiedica filtrarea in timp real.

post-23035-139829338904_thumb.jpg

Link spre comentariu

Esantionare 8KHz, ADC 12 bit, PWM Timer 2 16 bit, Fcy 40 MHz la timer 2. 512 esantioane.

Am facut esantionare si la 11.025 KHz dar apare un mic zgomot usor sesizabil

datorita, cred, accesului la memorie la PWM mai lent - esantionarea fiind

mai fina si PWMu trebe sa genereze mai repede. Chiar daca Timer2 lucreaza

la viteza adaptata la 11.025 KHz pwm_duty cycle incarcat in OC1RS se face

mai lent ( mai in urma putin ) si apare putin zgomot adica mici distorsiuni.

Se aude asa ( ca din buda ) pentru ca inainte de ADC in exterior am un FTJ care

taie frecventele peste 4 KHz.

 

Este la: http://www.4shared.com/audio/7VpDE7sP/Mp3_8KHz.html.

Link spre comentariu

Raportul semnal/zgomot al cuantizarii este de aproximativ 6dB/bit. Deci in cazul tau s-ar obtine maximum 6*12=72dB. Mai multe detalii aici: http://en.wikipedia.org/wiki/Quantization_error

Multumesc pentru raspuns. M... decibeli.. deci daca faci conversia pe mai multi biti ... e ceva logaritmic....Nu imi pot imagina. Eu vreau sa "vad cum se aude", sau sa imi spuna cineva. Un convertor A/D inaintea lui dsPIC ar fi destul de scump.Cu 20RON iei un dsPIC, dar un A/D audio pe 20 biti costa 50 RON....Mai ma gandeam la ceva. Daca PWM-ul de output este pe 16 biti la o repetitie de 250KHz, ce conversie A/D trebuie sa am la intrare pentru o maxima calitate. PWM-ul prin driver ataca MOSFETi la vrea +/-60 pe vreo 4-8 ohmi.Cat depre C, eu in C nu am programat nicio data un microcontroller.
Link spre comentariu

Ar mai fi doua incercari/testari. ADC lucreaza cu doua buffere ping pong in DMA.Ma gandesc sa incerc sa folosesc doar unul si ce-mi ramane sa pun la pwmsi asta pentru a mari frecventa de esantionare fara sa apara acel zgomot.Mai exact un buffer de 512 in DMA il pun la ADC si un buffer de 512in DMA il pun la PWM. Se poate sunta acel FTJ si prin marirea frecventei de esantionareredarea melodiei este mai buna adica reda si frecventele peste 4KHz.Pentru filtrare o sa incerc filtrarea in cascada. Primul dsPIC33F filtreaza grosulsi al 2-lea repeta filtrarea sau o mai restrange. Voi face asa:filtrez inregistrez filtrarea la frecventa maxima de la Audacity si apoice am inregistrat filtrez a 2-a oara. Apoi daca va merge mai bine asavoi pune doua dsPICuri unul dupa celalalt. Al doilea l-as pune pe dsPIC33F128GP802care are si DAC sau mai bine invers: dsPIC33F128GP802 primul care sa pastreze catmai fidel datele utile din FSK. Frecventa de redare a PWMului trebe sa fie egala cu frecventa de esantionare a ADCului pentru o calitate maxima. Sau poate chiar mai mare decat frecventa de esantionare a ADCului.Dar cred ca daca sunt egale este redare optima. Frecventa de redare a pwm este defapt perioada pwm-ului inscrisa in PR2 care este pe 16 biti.Deci frecventa minima este 610 Hz adica 40 MHz / 2^16 adica perioada maxima a duty cycle-ului de 2^16 = 65536. Maxim nu stiu cat este. Dar dintr-un exemplu zicea ca maxim este 64 KHz frecventa maxima pentru 16 biti. Adica 40 MHz / 64000 = 625 perioadaminima a pwm-ului adica perioada maxima a duty cycle-ului. Problema la PWM este ca cu cat se micsoreaza perioada pwm-ului ( se creste frecventa de redare )cu atat rezolutia de redare este mai mica ceea ce se simte la calitatea melodiei reglate. Deci frecventa maxima la pwm pe 16 biti ar fi undeva pe la jumate adica maxim 32 KHz. Mai pe inteles PWMul de 16 biti poate reda la maxim 64 KHz si nu la 250 KHzcat dai la ADC si pentru o calitate satisfacatoare la maxim 32 KHz. Oricum si ADCul are o frecventa maxima de esantionare impusa de perioada minima Tsamp ( viteza de incarcare a condensatoruluiChold cu noul esantion ). Nu stiu acum sa-ti spun ce frecventa maxima de esantionare poate realiza ADC in dsPIC33F. Stiu ca pe 12 biti trebuie sa ii ia 14 * Tad. Tad ( timpul de conversie ) trebuie sa fie undeva la minim75 us la care se adauga Tsamp. Cee ce determina calitatea la un ADC este acel condensator Chold care cu cat are o valoare mai mica cu atatse incarca mai repede si Tsamp scade si deci si frecventa de esantionare creste. Tad este determinata de marimea registrului de lucru( la mine 12 biti ) si frecventa maxima la care lucreaza CPU ( la mine 80MHz adica 40 MHz pentru un ciclu de instructiune: fetch + execute ).E cam impropriu spus totusi "PWM pe 16 biti". Defapt PWM este un Timer 2 de 16 biti si un output compare tot pe 16 biti. Cand Timer 2 ajunge la valoareapusa in PR2 se reseteaza. Valoarea duty cycle se pune in OC1RS.PR2 defineste perioada PWMului si valoarea inscrisa in OC1RS definestelatimea pulsului care trebuie sa fie <= PR2. Cand Timer 2 adica TMR2 ajungela valoarea din OC1R pinul OC1 trece in zero. Cand se reseteaza TMR2 se genereazao intrerupere ( T2IF = 1 ) si se incarca noul duty cycle in OC1RS si din OC1RS in OC1R si incepe o noua perioada PWM si OC1 trece in unu logic, si asamai departe. Intreruperea generata de Timer 2 este si clock pentru modululoutput compare. Asa ca pentru a creste calitatea melodiei inregistrate/redate pana la maxim se recomanda ADC si DAC si NU PWM care e limitat la 32 KHz, zic eu. Poate cine stie la PWM pe 32 biti sau mai mult s-ar merita sa te complici cu PWM. :da

Link spre comentariu

Te contrazic aici, mircang9. PWM pe 32 biti e o absurditate. La o frecventa de esantionare de 250 kHz, cum ii trebuie lui, ar fi necesar un clock de 1073742 GHz.Calitatea DAC-urilor PWM e comparabila cu cea a DAC-urilor R-2R si chiar mai buna, dovada sta faptul ca mai toate sistemele audio HI-FI folosesc DAC-uri PWM (SDM, sigma-delta modulation) cu rezolutia de 1 bit, la o rata de esantionare de vreo 2.8 MHz. Deci la o rata de esantionare de 250 kHz si un clock de 40 MHz, ai deja o rezolutie PWM de 7 biti. Mai mult decat suficienta.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări