mircang9 Postat Ianuarie 2, 2012 Partajează Postat Ianuarie 2, 2012 Salutare,Rog cine a mai facut asa ceva sau intentioneaza sa ma ajute si pe mine.Va rog * Link spre comentariu
mircang9 Postat Ianuarie 2, 2012 Autor Partajează Postat Ianuarie 2, 2012 Semnalul FSK este trecut prin ADC la o rata de esantionare de 16 ori frecventa fmax din semnalul FSK. Esantioanele pe 16 biti se inmultesc cu iesiriledin DCO ( VCO ) si rezultatul este eroarea de faza ( faza DCO - faza semnal FSK ).Deci detectorul de faza este un multiplicator. Detectorul de faza este de tip Nyquist.Apoi iesirea din PD ( Phase Detector ) este filtrata cu un filtru digital trece jos FTJ de tip IIR. Link spre comentariu
mircang9 Postat Ianuarie 3, 2012 Autor Partajează Postat Ianuarie 3, 2012 La filtrul IIR formula este: uf[nT] = b0*ud(nT)+b1*ud([n-1]T)-a1*uf([n-1]T)pentru filtru de ordin 1. Link spre comentariu
mircang9 Postat Ianuarie 5, 2012 Autor Partajează Postat Ianuarie 5, 2012 IIRTransposed(FRAME_SIZE, &FilterOut[0], &samples[0], &C12Filter); Link spre comentariu
mircang9 Postat Ianuarie 5, 2012 Autor Partajează Postat Ianuarie 5, 2012 SAU in loc de functia de mai sus se poate scrie ca mai jos pentru un FTJ de ordin 2: for( i = 0; i { if( i == 0 ) { FilterOut[0] = b0*samples[0] + b1*samples_i_1 + b2*samples_i_2 - a1*FilterOut_i_1 - a2*FilterOut_i_2; } if( i == 1 ) { FilterOut[1] = b0*samples[1] + b1*samples[0] + b2*samples_i_1 - a1*FilterOut[0] - a2*FilterOut_i_1; } FilterOut = b0*samples + b1*samples[i-1] + b2*samples[i-2] - a1*FilterOut[i-1] - a2*FilterOut[i-2]; } samples_i_1 = samples[FRAME_SIZE]; samples_i_2 = samples[FRAME_SIZE-1]; FilterOut_i_1 = FilterOut[FRAME_SIZE]; FilterOut_i_2 = FilterOut[FRAME_SIZE-1]; Link spre comentariu
mircang9 Postat Ianuarie 5, 2012 Autor Partajează Postat Ianuarie 5, 2012 Iata rezultatele unui filtru IIR cu functia Elliptic, Fpass ( Fcut ) = 2KHz,Fstop = 2030 Hz. La intrare am aplicat o melodie mp3.Imaginea este rezultatul analizei in Matlab a semnalului filtrat.Se observa foarte bine filtrarea trece jos LPF ( Low Pass Filter ).Fs = 8 KHz. Filtru de ordin 4. Procesorul folosit este dsPIC33FJ256GP506.Un astfel de tip de filtru digital LPF intra in structura SPLL. Link spre comentariu
Traxxx Postat Ianuarie 5, 2012 Partajează Postat Ianuarie 5, 2012 Chiar daca nu prea inteleg eu ce este PLL etc, pentru ca nu am lucrat cu asa ceva va urez felicitari pentru ca impartasiti si cu ceilalti acest filtru chiar daca nu ati primit nici o propunere de proiect. , uneori conteaza ! Link spre comentariu
mircang9 Postat Ianuarie 6, 2012 Autor Partajează Postat Ianuarie 6, 2012 PLL poate fi folosit la comunicatia GSM ( la nivel mai inalt ) pentru demodulare FM sau FSK.SPLL se foloseste in unele telefoane mobile. Este doar una din tehnicile de demodulare( extragere a datelor digitale ). Cu deosebirea ca acolo se lucreaza cu purtatoare de ordinul MHz daca nu chiar GHz. Astea le stiu dupa ce am citit un proiect facutde niste studenti la Singapore ce viza inlocuirea tehnicilor analogice cu cele digitalesi din dorinta de a elimina cat mai mult componentele hardware in telefoanelemobile si integrarea lor in software conducand la un proces cost/productie mai eficient.Oricum astept pareri, recomandari completari sfaturi referitor la acest subiect. Link spre comentariu
mircang9 Postat Ianuarie 6, 2012 Autor Partajează Postat Ianuarie 6, 2012 Iata si o filtrare IIR FTB trece banda cu Fc = 1140 Hz, F1 = 1110 Hz si F2 = 1170 Hz.Fs = 8KHz. FTB digital de ordin 8 cu functie Butterworth.Se observa clar filtrarea. Este necesar doar un dsPIC33FJxxxx la filtrare IIRfata de trei dsPIC33FJxxxx in cascada ( inseriate ) la filtrarea FIR.Semnalul telefonic filtrat este modulat FSK. Este filtrattrece banda FTB canalul 7 corespunzator frecventei centrale Fc = 1140 Hz.Se observa frecventele F1 si F2 pentru 0/1 logic care sunt foarte apropiate. Link spre comentariu
cirip Postat Ianuarie 6, 2012 Partajează Postat Ianuarie 6, 2012 Salut mircang,Am urmatoarea rugaminte. Pune ADul sa esantioneze cu aprox 20KHz, apoi umple tot RAMul cu esantioane cu mufa de intrare analogica scurtcircuitata la masa. Fa testul atat pe 10 biti cat si pe 12 biti. Scoate esantioanele din procesor in format text, apoi zipeaza si uploadeaza undeva asa cum ai facut si cu esantioanele semnalului de date, ca sa pot sa ma uit si eu la fisier.Am si eu in lucru o jucarie cu desepel, dar mi se pare cam mare zgomotul ADului si as vrea sa compar cu o placa de la mama ei.Despre software PLL, cred ca te arunci prea departe. Este mult mai complicat decat sa pui impreuna comparatorul de faza, filtrul de bucla si NCOul. Fiind un sistem cu reactie, stabilitatea este extrem de importanta. Cel mai probabil ca punand totul impreuna asa la ghici, ori oscileaza bucla, ori nu se agata pe semnalul FSK. As incerca intai varianta cu intarziere, multiplicare si FTJ.Multumesc,Cirip Link spre comentariu
mircang9 Postat Ianuarie 7, 2012 Autor Partajează Postat Ianuarie 7, 2012 Salut Cirip * O sa listez esantionalele de la ADC. Chiar asa: doream sa te intreb: cum fac intarzierea aceea ? Ma gandesc la un timer care intarzie componentele ce ies din FTJadica dupa ce timer-ul a ajuns la overflow abia atunci le aplic la multiplicator. Iata cum vad algoritmul:1) Initializez vectorul intarziat de la FTJ de marime N cu 1 ( element ce nu anuleaza multiplicarea ) analog lui 0 ( element ce nu anuleaza adunarea ).While(1){ 2) conversie ADC pentru N esantioane 3) multiplicare vector de marime N de la ADC cu vector intarziat cu ValoareTimer de marime N de la FTJ obtinut la sfarsitul pasului 6. 4) vectorul de marime N rezultat de la multiplicator il aplic la FTJ care la randul lui scoate un vector de marime N cu componentele filtrate. 5) Scot prin PWM cele N componente filtrate. 6) Aplic temporizarea ValoareTimer pentru intarziere. La terminarea temporizarii celor N componente filtrate de la FTJ trec la pas 2 si asa mai departe ...}E corect ? La cat sa setez aceasta intarziere sau acest Timer ????Nu stiu cum sa fac ceea ce mi-ai cerut. Ca sa schimb Fs = 20 KHzam facut acest lucru la fel stiu sa schimb ADC la 12 respectiv 10biti rezolutie dar nu stiu cum sa fac sa copiez din RAM intr-un fisier format text esantioanele. Lucrez cu cate 256 esantioane.Ca sa umplu RAM-ul incrementez adrese: adica la fiecare 256 esantioane incrementez cu 256 * 2 adrese.Oricum dupa mine apare si la mine un zgomot la generarea PWM a melodiei mp3 DAR cand aplic de exempluun semnal de 780 Hz la intrare, imi scoate sinusoidacurata. Cred ca asa ar fi un test daca ADC introduce un zgomot de esantionare prea mare. Deocamdata postez fisierul wav cu semnalul de 780 Hz redat si la fel melodiala 20 KHz esantionare.Stiu sa salvez esantioanele din Debug DAR nu sunt succesiveci doar spicuiri ( pana salvez melodia chiar daca o opresc nu o opresc chiar in momentul cand a ajuns la break point ). Link spre comentariu
mircang9 Postat Ianuarie 7, 2012 Autor Partajează Postat Ianuarie 7, 2012 Le-am sheruit la: http://www.4shared.com/music/3Gk-O0x6/F ... 780Hz.html http://www.4shared.com/music/F1DXvPKf/S ... 20KHz.html rezolutie 12 bit. Link spre comentariu
cirip Postat Ianuarie 7, 2012 Partajează Postat Ianuarie 7, 2012 dar nu stiu cum sa fac sa copiez din RAM intr-un fisier format text esantioaneleMultumesc, dar nu e ce doream. Citeste cu atentie. Nu ma intereseaza sinus sau muzica, ci cu intrarea in scurt dpdv alternativ. Nu scurtcircuita in CC. Si nu baga PWMul de la iesire. Ma intereseaza numai rezultatul conversiei A/D.Ca sa copiezi din RAM, adauga numele arrayului buffer intr-o ferestra watch, apoi right clic si fa "output to file". Fa arrayul de 7500 de esantioane. 256 e prea scurt. Umple tot RAMul cu esantioane. O sa dureze pana updateaza watch window, dar asta e. Cam asa ar trebui sa arate fisierul text in care salvezi esantioanele:Address Symbol Name Value 085E in_buf_0 085E [0] 0x09C0 0860 [1] 0x09C0 0862 [2] 0x09C0 0864 [3] 0x0980 0866 [4] 0x0980... si asa mai departe.Inca ceva. Cred ca e bine sa nu te imprastii in atatea posturi, care de fapt sunt legate de una si aceeasi problema. E foarte greu de urmarit. Raspunsul la celelalte intrebari le gasesti in aplicatia cu MSP430 pa care ti-am dat-o intr-un alt post pe aceeasi tema.Mersi. Link spre comentariu
mircang9 Postat Ianuarie 7, 2012 Autor Partajează Postat Ianuarie 7, 2012 Cum adica sa scurtcircuitez ? sa fac scurt intre canalul Left Right simasa ? Nu se strica ? O sa bag acum 7500 sa fad ce se intampla ...O sa renunt la DMA ca sa pun 7500 ca nu ma lasa. Link spre comentariu
mircang9 Postat Ianuarie 7, 2012 Autor Partajează Postat Ianuarie 7, 2012 Nu stiu ce are Debugeru asta. Cand renunt la DMA si pun 3000de esantioane mi le face toate zero si doar primul esantion din bufferare valoare. Mai mult de 3000 nu pot pune pentru ca unbuffer nu pot sa-l declar ca fiind atribuit in toata memoria RAMci doar intr-o sectiune a acesteia cum ar fi: X Data Ram, Y DataRam si DMA Data Ram. Am pus buffer in X Data Ram in care pot incapea maxim 3000 esantioane. Daca pun mai mult de 3000 imi da eroare la compilatorca nu poate aloca memoria.Cand lucrez cu DMA in loc de 256 imi insiruie 511 esantioane.Postez cele "256" esantioane in fisierul text de mai jos.O sa mai incerc sa pun mai mult de 3000. Esantioane.TXT Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum