Sari la conținut
ELFORUM - Forumul electronistilor

filtrare audio digitala cu dsPIC - filtre digitale FIR si IIR


Vizitator MIRCAN DAN

Postări Recomandate

Vizitator MIRCAN DAN

Salutare tuturor !

 

Am si eu nevoie mare de cineva dintre voi care are software-ul FULL pentru calcul coeficienti pentru filtrare.

 

Am softul Part Number: SW300001-LT - Digital Filter Design Lite DAR care imi calculeaza doar 64 coeficienti FIR.

 

http://www.microchipdirect.com/ProductSearch.aspx?Keywords=SW300001

 

Am 22 canale pentru care vreau sa calculez separat pentru fiecare coeficientii FIR adica 512 taps si fereastra Hamming.

 

Cine ma poate ajuta, va rog sa-mi scrieti.

 

Cu 64 coeficienti taps FIR am filtrat cu succes cu dsPIC33FJ256GP506 si filtreaza bine doar ca-mi trebuie o panta mai abrupta. Banda de trecere pentru FTB pentru fiecare dintre cele 22 canale are DOAR 60 Hz.

 

Mentionez ca am calculat 512 coeficienti FIR in MATLAB si i-am convertit in format Q15 pentru filtrare DSP, DAR problema este ca folosindu-i la dsPIC, NU se potriveste probabil cu arhitectura interna a dsPIC si NU filtreaza deloc. Deci exclud MATLAB-ul sau alt software de calcul coeficienti FIR.

 

Posed dsPIC starter Kit cu placuta demo cu dsPIC33FJ256GP506. Am modificat putin programul in limbajul C demo ce vine cu CD-ul kitului. DOAR introduc coeficientii calculati din fisierul cu extensia "*.s" si filtreaza excelent. La intrare ii introduc o melodie sau un pattern cu tot spectrul de frecvente vocale ( pana la 3200 Hz ) si la iesire inregistrez ce a filtrat cu Audacity si verific spectrograma si astfel vad ca filtreaza corect. Asta, asa ca sa stiti cum fac. Rezultatul filtrarii l-am verificat si in MATLAB si e in regula, doar ca filtrarea nu e atat de abrupta sau selectiva pe cat imi doresc adica sa aiba banda de trecere de doar 60 Hz pentru FTB.

 

Am mai discutat cu "cirip" pe acest forum dar el ma baga in tot felul de calcule matematice. Eu vreau ceva simplu.

 

Atasez un fisier cu extensia *.s cu pe care il atasez in proiectul MPLAB pentru dsPIC pentru a va face idee despre ce vorbesc. Coeficientii introdusi in acest fisier sunt calculati in MATLAB, DAR nu filtreaza, cum am zis mai sus. Atasez si un fisier cu extensia *.s cu 64 coeficienti calculati cu Digital Filter Design Lite care filtreaza corect.

 

Va multumesc !

ftb_64.txt

ftb_7_512_hn.txt

Editat de MIRCAN DAN
Link spre comentariu
  • Răspunsuri 7
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Vizitator MIRCAN DAN

Digital Filter Design Lite imi genereaza automat fisierul cu extensia *.s ce contine cei 64 coeficienti gata calculati dupa ce ii dau caracteristicile filtrului FTP. Apoi, eu doar includ acest fisier in proiectul din MPLAB pe care apoi il compilez, programez dsPIC-ul si gata filtrul digital !

 

Coeficientii din fisierul *.s sunt convertiti din format fractional apoi in format Q15 si apoi in hexazecimal pe 16 biti gata pregatiti pentru a fi introdusi in dsPIC.

 

Dupa ce testez toate acestea voi face un PCB cu dsPIC33FJ128GP802 cu 28 pini care are si convertor DAC intern.

Editat de MIRCAN DAN
Link spre comentariu

Salut Dan,

"NU se potriveste probabil cu arhitectura interna a dsPIC"
Exclus! Arhitectura nu iti ofera decat executie accelerata, dar daca stii sa codezi un filtru, o poti face si pe un i8080 de pe vremea dacilor, atata doar ca e lent. Dar de filtrat filtreaza de n-are aer. Acum multi ani, cand dsPICul nici nu aparuse, am scris un filtru cu PIC16F877 fugarit la 20MHz. Mergea schiopatand, dar mergea. Filtra semnale telegrafice la o frecventa de esantionare de 3.8KHz sau asa ceva. La voce nu-l tineau balamalele.

"Deci exclud MATLAB-ul"
He he. O sa razi, dar Matlabul este prietenul tau cel mai bun. Un filtru pe care l-am postat aici pe forum acum cativa ani, are filtre cu 300 de coeficienti, calculati in Matlab si merge pe dsPIC bine mersi.

"NU filtreaza deloc"
Ai simulat filtrul in Matlab? Ai folosit functiile din biblioteca dsPICului? Ai tinut cont de alinierea datelor si pozitionarea lor in memoriile X sau Y. Este foarte important. Daca tii cont de toate astea, cred ca poti face filtre cu peste 1000 de coeficienti, ca memorie are destula. Nu uita de facilitatea DMCI din MPLAB. Cu aia poti sa vizualizezi in mod grafic continutul buferelor si sa te prinzi de ce nu munceste. Cu aia m-am prins eu de un glici pe care il aveam in procesare din cauza unei indexari incorecte; iesea in afara bufferului cu o locatie si aparea cate un sughit.

"Am mai discutat cu "cirip" pe acest forum dar el ma baga in tot felul de calcule matematice. Eu vreau ceva simplu."
Hihi... Din pacate nu se poate ceva simplu. Domeniul asta nu e simplu deloc. Sau daca vrei ceva simplu, adica sa folosesti softuri care sa faca treaba ptr tine, daca sunt moka, atunci au limitari, ca deh ... Branza e pe bani.

M-am uitat de curiozitate la coeficientii tai, aia 512. Sunt scosi destul de corect si ar trebui sa filtreze. Daca imi spui cu ce frecventa de esantionare lucrezi, pot sa "desenez" mai precis caracteristica de frecventa. Ceva e putin ciudat ptr ca ai foarte multe zerouri si functia pondere nu este centrata in mijlocul intervalului de 512 prize. Ce tip de filtru i-ai cerut Matlabului sa iti faca?

Inca ceva... Stiu ca te chinui de cativa ani la treaba asta si parca ti-am si extras mai demult un canal dintr-o inregistrare pe care mi-ai trimis-o. Asta e sarcina de serviciu? E pentru o firma? Ca pare destul de serioasa treaba. Eu n-as fi avut rabdare sa ma strofoc atata numai ptr hobi :) Care e scopul final al proiectului astuia?

Uite, cam asa arata filtrul tau, ala de 512 coeficienti. Coeficientii sunt corecti, ar trebui sa mearga, dar cred ca nu codezi tu bine convolutia aia ...

post-174676-0-48115200-1485405776_thumb.png

Spor la treaba si te rog sa nu fii suparat pe mine, ca de "artimetica" tot nu scapi asa de usor, daca te-ai bagat in ciorba asta frumoasa si interesanta, de altfel. :sorry
Cirip

Editat de cirip
Link spre comentariu
Vizitator MIRCAN DAN

Multumesc Cirip * Acesta e un hobby.

 

La filtre digitale am lucrat intre oct-dec 2011. De atunci si pana acum am facut o pauza.

 

Da ! "Branza e pe bani." Dar si MATLAB-ul e pe bani. MATLAB-ul pe care-l folosesti este cel standard adica fara librarii speciale ?

Am folosit MATLAB 7 in 2011. Sa vad unde mai gasesc CD-urile de instalare.

 

Imaginile de mai sus ( caracteristicile acelea ) le-ai generat in MATLAB ? sau Excel ? Ce functii MATLAB ai folosit ?

 

Pana nu m-apuc iar efectiv de introdus iar coeficienti in dsPIC nu-ti pot spune exact ce frecventa de esantionare am folosit. Cred ca 8KHz sau 44,1 KHz. Cei 512 coeficienti i-am calculat in MATLAB cu functiile pe care mi le-ai dat prin 2011. Oricum am multe fisiere *.s completate cu cf. calculati in MATLAB.

 

Oricum m-ai incurajat sa mai incerc cu MATLAB sa calculez si sa introduc coeficientii in dsPIC. Cu coeficientii calculati gata de SW300001-LT - Digital Filter Design Lite mi-a filtrat bine dsPICu.

Deocamdata suspend acest topic pentru ca ma arde mai tare demodularea FSK pentru care deschid un nou topic. Dupa ce termin cu

demodularea FSK continuu acest topic cu filtrarea digitala.

Link spre comentariu

Salut,

 

Imaginile le-am generat cu Matlabul. Nimic special ca functii. Diverse manevre cu matrici ca sa convertesc din hex in zecimal, apoi ca sa transform matricea in vector. Apoi o transformata Fourier pe vectorul de coeficienti.

 

Pff, uitasem ca ti-am dat functiile alea. Ce-a trecut timpul. :) Aveai alt user atunci. Am cautat si am gasit threadul ala cu demodulare FSK din 2012. Sa-l fi continuat pe ala. In orice caz, parerea mea e sa nu te chinui cu numararea trecerilor prin zero. Metoda e ineficienta si foarte sensibila la zgomot; O sa fii foarte departe de limita de demodulare Shannon.

 

Cred ca e bine sa lamuresti filtrarea intai. Oricum trebuie sa filtrezi inainte sa demodulezi.

 

Spor!

 

 

Link spre comentariu
  • 4 săptămâni mai târziu...

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