Sari la conținut
ELFORUM - Forumul electronistilor

cum schimb referinta la un semnal ?


Postări Recomandate

Salut,

 

Uite ca mi-am pierdut o seara ptr tine (imi esti dator cu o bere :da ) si am facut demodularea completa a canalului 6 pentru ca "se auzea" mai tare. Am folosit un fisier mai vechi de-al tau pe care am aplicat filtrarea ch 6, demodulare prin intarziere si multiplicare, apoi extragerea datelor prin FTJ.

Filtrarea trece jos a datelor e cam incropita, dar merge. Ideea de baza e ca tot procesul se poate face exclusiv matematic. Nu ai nevoie de al doilea controler. Totusi, am atasat la arhiva, pe langa scriptul matlab, si un waw filtrat, ca sa poti sa te joci de-a demodularea prin masurarea perioadelor.

 

Scriptul este destul de brut, neperiat. Nu m-am straduit sa ii dau o forma comerciala. De asemenea, va trebui sa ii dai tu un wav de intrare ptr ca cel pe care am lucrat e prea mare ca sa-l atasez aici. Dar daca ai ceva care canta pe canalul 6 si este esantionat la 44.1K, ar trebui sa mearga.

 

Amplitudinile sunt mici in mod intentionat, ca sa le pot afisa pe amandoua pe acelasi grafic. Deci nu te crampona de chestia asta. Semnalul odata demodulat se poate face cum il vrei.

 

Bafta!

Cirip

 

http://www.elforum.info/download/file.php?id=28851

mirc_ch6.zip

post-879-139829504183_thumb.png

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

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

E clar ca e in sfecla, pentru ca amplificarea in banda de trecere este de 250dB (!!!).

Sunt dator cu cel putin o bere la tine Cirip *** :da De unde 250 dB amplificare in banda de trecere ? Unde am dat asa ceva sa faca Matlab ?Te rog mult sa-mi spui * ca nu m-am prins :jytuiyu Cu cei 40 dB si cu diferenta de doar 1Hz intre Fs1 si Fp1 si intre Fp2 si Fs2 am inteles.Am dat comenzile din Comenzi_1.txt. In grafic pare Finf = 480 Hz = 0.12*fs/2 iarFsup = 0.880*fs/2 = 3520 Hz si nu cum am dat adica Finf = Fp1 = 1140 Hz si Fsup = Fp2 = 1210 Hz.
Link spre comentariu

Salut Cirip,Ce functii Matlab trebe sa aplic ca sa fac proiectarea pas cu pas IIR Butterworth pentru un filtru trece banda ?1) identificarea functiei analogice h(z) in funtie de Fs1 Fp1 Fp2 Fs2 Rp Rs Fs.2) transformarea biliniara din planul s timp in planul z discret3) obtinerea functiei y(z) de transfer si identificarea coeficientilor b0 b1 b2 a0 a1 a2. a0 = 1.4) obtinerea cascaded second order sectionsIn carte sunt niste functii de transfer si un exemplu de calcul ( am atasat niste poze din carte ).Nu stiu cum sa introduc in Matlab si sa le folosesc.Mai citesc prin help la Matlab sa vad ce gasesc. Am vazut ca fdatool nu mi-a calculat coeficientii cum trebe ( tinand cont ca dsPICu nu scoate nimic dar cum am stabilit ne rezumam doar la proiectare si simulare in Matlab ). Poate gresesc. Recunosc ca-s cam varza cu teoria si cu termenii ca "biliniara", etc.M-apuc sa mai citesc si sa exersez din cartea lui Proakis si sa mai citesc din Help la Matlab si sa exersez functiile Matlab legate de acestea adica sa ma familiarizez cu ele. Pana acum n-am facut aceste lucruri referitor la teorie. E cam penibil sa intreb lucruri de detaliu despre lucruri despre care inca nu stiu cu ce se mananca. Ma refer la teorie. Daca vrei astept raspuns dar cum am zis trebe sa ma documentez mai bine si nu sa citesc si sa aplic "din avion" ce vad prin carti si documente, ci sa le iau pe rand cu rabdarepentru ca se pare ca nu merge asa repede cum speram.

Link spre comentariu

Salut,Cauta, citeste helpul si fa exemplele de la functia butter() din matlab. Joaca-te cu diverse combinatii de frecvente de esantionare si frecvente de trecere/taiere. Nu uita ca dupa fiecare generare de coeficienti sa dai freqz(), ca sa vezi exact ce caracteristica va avea filtrul. Nu e nevoie sa iti bati capul cu transformarea biliniara, predistorsiunea (prewarping) frecventei si alte cele. Functia butter() are grija de toate. Cand faci freqz(), uita-te la faza. Compara faza la FIR cu cea de la IIR. La FIR e o dreapta, ceea ce inseamna timp de intarziere de grup (derivata intai a fazei in raport cu frecventa) constant. La IIR e o ... stramba si asta afecteaza demodularea de frecventa. O sa incerc sa filtrez cu IIR si sa compar, dar mai incolo.Inca ceva. Raportul dintre frecventa de filtrare si cea de esantionare nu trebuie sa fie prea mare, ptr ca atunci ies coeficientii mici ca valoare si incepi sa ai erori de trunchiere. Asta se simte pe dsPIC, nu in matlab unde lucrezi in virgula mobila si stocare pe 64 de biti (cred ...). De aia, daca te uiti atent in codul postat, undeva exista o decimare. Decimarea scade frecv de esantionare de la 44 la 4.4K. Taica Nyquist e inca fericit, ptr ca frecv semnalului e de 1K, dar ajut filtrul.Nu e nevoie sa faci un fisier text cu comenzi. Toate comenzile se pot scrie intr-un script cu extensia .m, pe care il executa matlabul. Scriptul tau devine comanda in sine, asa cum am facut in arhiva.Cirip

Link spre comentariu

Raportul dintre frecventa de filtrare si cea de esantionare nu trebuie sa fie prea mare

Care este frecventa de filtrare in cazul meu de exemplu ???? E prima data cand aud de frecventa de filtrare. Te referi

de exemplu ca daca filtrez un semnal de maxim 1000 Hz sa nu-l esantionez cu o frecventa prea mare ?

 

Inca o data mentionez ca demodularea a iesit foarte bine. Se vad cei 16 biti de zero pentru sincronizare si cei 6 biti

de pauza ceea ce este bine.

 

Windowsul meu xp este pe 32 biti asa ca Matlab cred ca stocheaza pe 32 biti pe cand dsPICu pe 16 cred.

post-23035-139829504822_thumb.jpg

Link spre comentariu

Care este frecventa de filtrare in cazul meu de exemplu. E prima data cand aud de frecventa de filtrare. Te referi de exemplu ca daca filtrez un semnal de maxim 1000 Hz sa nu-l esantionez cu o frecventa prea mare ?

Ei alta! Cum prima data? Pai daca vrei sa extragi canalul 6, nu centrezi fitrul pe 1020Hz? Cam p-acolo e "frecv de filtrare". E adevarat ca exprimarea nu e prea tehnica, dar ma refeream la frecventele care caracterizeaza filtrul. E vorba de valorile grosiere, nu cele exacte. In cazul asta esti pe la 1K. Ei bine, esantionarea sa nu fie mult mai mare de 2K. Probabil ca ceva intre 4K ... 10K ar fi rezonabil. Nu e o limita stricta, dar daca esantionarea e prea sus, apar erori, asa cum ziceam, sau nu mai ai timp de procesare.

Windowsul meu xp este pe 32 biti asa ca Matlab cred ca stocheaza pe 32 biti

Nu are legatura. Poti sa stochezi pe un catralion de biti folosind mai multe locatii native ale sistemului. Cum crezi ca lucreaza double precision?Gata pe azi! Piua, ca am treaba. :)
Link spre comentariu

Am pus si invers condesatorul de 1uF electrolitic dar tot degeaba.Am pus un condensator nepolarizat de 2,2 uF dar tot degeaba.Am pus un condensator nepolarizat de 0,1 uF ( 100 nF ) dar tot degeaba.Specific ca cu condensatorul de 2,2 uF iese ceva de genul din figura dar nu e bine. Trebe sa iasa un semnal dreptunghiular. Vreau sa folosesc acest AO pe post de convertor din semnalsinusoidal in semnal dreptunghiular.Cu condensatorul electrolitic si cu cel nepolarizat de 0,1 uF iese zero totdeauna adica nimicdin AO.

baga direct semnalul intr-o poatra cd40106 si vezi ce iese ...eventual in doua sa pastrezi paritatea
Link spre comentariu

Salut,Postez fisierul m ( aici txt ) cu proiectarea filtru IIR canal 7 deplasat spre dreapta adica in loc de F0 = 1110 Hz este F0 = 1140 Hz. Este stabil filtrul ? Mai trebuie ceva ? Cum trec in forma cascadata second order section coeficientii b si a ca sa-i implementez in dsPIC ? adica mai exact cum trec din forma curenta de filtru IIR de ordinul N = 12 Butterworth in forma de 6 filtre IIR de ordinul 2 cascadate cu coeficientii b,a in forma direct form II ? Cu comanda "sos=zp2sos(zz,pz,kz);"am obtinut matricea sos cu 12 sectiuni ( filtre IIR cascadate ) si nu cu 6 sectiuni cum ma asteptam. Cum cuantizez ? :jytuiyu

IIR_C7_deplasat_dreapta.txt

Link spre comentariu

Salut,La U10 de pe placa demo cand aplic semnal extern de la emitatorul FSK cu XR2206 cu voltmetrulmasor 1.63V la pinii 1,7,8,14 de la U10. Placa demo o alimentez extern de la o sursa externa.Nu iese nimic din RD0 adica din dsPIC. Insa cand alimentez placa demo de la calculator ( fara sa am MPLAB deschis ) filtreaza si iese din dsPIC semnalul filtrat corect. Nu inteleg inca de ce nu merge independent de calculator.

Link spre comentariu

Salut,Ti-am vazut toate postarile dar sunt foarte prins si nu am timp sa rulez si sa depanez matlab.In legatura cu merge/nu merge, cred ca esti singurul care poate determina ce se intampla acolo. Verifica intai daca exista diferente de tensiuni de alimentare sau polarizare intre cele doua situatii. De asemenea vezi ce face resetul procesorului.

Link spre comentariu

In fine am rezolvat cu functionarea independenta a dsPICului de calculator. Au fost doua probleme: 1) PIC18F67J50 ii dadea validare de alimentare la dsPIC printr-un tranzistor 2) PIC18F67J50 ii dadea 1 logic la /MCLR cand era legat la calculator indiferent ca era MPLAB pornit sau nu, dar cand alimentam extern PIC18F67J50 de pe placa demo dadea 0 si tinea dsPICu in reset. Astfel ca a trebuit sa intrerup traseul pentru /MCLR de la PIC18F67J50. Din soft n-am gasit sa anulez pinul MCLR la dsPIC ca la PIC18F sau PIC16F din bitii de configurare ( ceva de genu MCLRDIS sau MCLR_OFF ). Acum merge !!! :dans: Trec sa vad cum demoduleaza cu masurarea perioadelor. Am observat ca la canalele sub 5 ( 800 Hz ) metoda mea cu masurare perioade pt demodulare este INSTABILA intrucat pe durata unui bit ( 20 ms ) sunt putine perioade in semnalul FSK. Asa cum la mine viteza este 50Hz ( 50 bps ) frecventa purtatoarei trebe sa fie Fc > 16 * 50 Hz = 800 Hz. Evident ca aici depinde si de distanta intre frecventele F0 si F1. Cred ca zic o prostie dar la metoda mea de demodulare cu masurare perioade cred ca este valabila chestia asta avand in vedere si ca distanta intre F0 si F1 este de doar 60 Hz. Postez si unde am gasit. Este vorba de pagina 2 paragraful 3. Evident ca se refera la altceva: adica frecventa de verificare a bitului de start la receptie la CPU trebe sa fie de 16 ori mai mare decat frecventa bitului sau perioada sa fie de 16 ori mai mica decat perioada sau durata unui bit. Am folosit chestia asta dar la detectie asincrona de date fara sa folosesc USART adica am implementat receptia seriala software intrucat protocolul serial cu pricina nu este la fel cu protocolul RS232.Mai exact la mine sunt trei sau chiar 12 octeti si fiecare are un bit de start si un bit de stop si 16 biti de sincronizare de 1 si bitul de paritate la fiecare octet si o pauza de 6 biti de zero.Ma gandeam ca poate puteam folosi protocolul RS232 prin citirea succesiva a 3 sau 12 octeti dar problema era la detectia bitilor de sincronizare ( cei 16 ) si detectia primului bit de START. Gandindu-ma acum cred ca se poate si direct cu RS232 adica datele demodulate sa le trec direct la pinul RX de la un modul USART de la un PIC oarecare care are USART.Pentru detectare stabilitate in MPLAB la filtre IIR am gasit o functie: isstable(Hd) unde Hd = dfilt.df1(b,a).Vizual toti polii trebuie sa se afle in interiorul cercului unitar pe axele real si imaginar.Am bagat coeficientii calculati cu fisierul m de mai jos trecandu-i din matricea sos in format Q15 si i-am implementat in dsPIC dar degeaba. Asa ca mai am de sapat la partea asta cu calculul si implementarea coeficientilor IIR.

IIR_C7_deplasat_dreapta.txt

Transmisie asincrona.pdf

Link spre comentariu

Problema este ca la iesirea din dsPIC nu iese o sinusoida frumoasa chiar daca frecventele pentru F0 si F1 sunt bine si asta destabilizeaza demodularea cu masurarea de perioade. Daca leg direct emitatorul FSK la receptorul FSK ( fara filtru IIR cu dsPIC ) demoduleaza bine. Postez iesirea din filtru cu dsPIC de pe placa demo ( iesirea din placa demo ) cu sinusoida cu pricina. In modularea FSK este un tact cu frecventa de 50 Hz, mai exact pentru 20 ms se emite frecventa F0 ( 1470 Hz ) iar pentru alte 20 ms se emite frecventa F1 ( 1530 Hz ).

Link spre comentariu

dupa o analiza atenta in matlab a spectrului de la intrarea in filtru iir comparat cu iesirea din filtru reiese ca la iesire trece un manunchi de frecvente pe la 3 khz avand in vedere ca ftj antialiere are cut-off doar la 3300hz. manunchiul este aproape nesemnificativ de la iesirea din emitator dar fiind o armonica adica 2*1500hz=3 khz este amplificata de filtru si strica sinusoida ce conduce la nereusita demodularii. in plus f0 in loc sa fie 1470 hz este 1480 hz astfel ca distanta dintre f0 si f1 1530 hz e de doar 50 hz. solutia ar fi sa pun o rezistenta si un condensator ca ftj la iesire din filtru si care sa aiba o cut-off la 2500 hz ca sa elimine manunchiul de 3 khz. si sa reglez f0 la emitator la 1470 hz.

Link spre comentariu

Vreau sa fac si eu un cablaj cu dsPIC33FJ128GP802. Nu stiu inca valorile la piese la etajul de intrare ( preamplificator cu reglare castig si filtru antialiere ) si eventual un filtru trece jos pentru demodularea semnalului pwm de la pinul de iesire comparator. Am vazut ca are si convertor digital analog. As vrea schema. Ma uit sa compar schema sin placa demo ( dsPIC Starter Kit1 ) si cea a lui Cirip din proiectul lui. Problema este ca nu gasesc la indemana operationalele din schema placii demo si daca pun in loc un LM358 mi-e ca nu face ce trebe. Si in plus in schema se la placa demo sunt valoricu tolerante mici la condensatoare si rezistente. Folosesc un canal de intrare/iesire.Am OPA2134,LM324,LM2902N,LM348N,LM339,LM2904N.

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