Sari la conținut
ELFORUM - Forumul electronistilor

cum schimb referinta la un semnal ?


mircang9

Postări Recomandate

  • Răspunsuri 109
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • mircang9

    66

  • cirip

    34

  • 10vid

    2

  • Ionut Pavel

    2

Top autori în acest subiect

Imagini postate

Adica se poate ? In conditiile in care si LM1117 ar scoate tot 1 A la 3.3 V ?

 

Am inteles ca in continuu se aplica acelasi principiu ca in alternativ, adica:

 

"Tensiunea de alimentare sa fie in plaja corecta sau nominala, cat despre curent sursa de alimentare sa poate sa scoata oricat de mult curent ( sau doar putin mai mult decat este necesar pentru economie de bani si de spatiu pe PCB ) pentru ca montajul ( consumatorul ) sau sarcina absoarbe curent atat cat ii trebuie. Daca sarcina cere curent mai mare decat poate da sursa de alimentare, la tensiune nominala, atunci sursa de alimentare se supraincalzeste pana se arde".

 

Se pare ca placa demo dsPIC DSC Starter Kit 1 nu e defecta. Am refacut cele doua trasee pe care le-am intrerupt prin 2012 pentru functionare independenta si MPLAB imi da urmatorul mesaj, dupa ce compilez cu succes, sterg memoria dsPIC-ului si il programez:

 

Starter Kit board connected
Firmware version: 00.00.19
Erasing...done
Programming and verifying...done
Editat de mircang9
Link spre comentariu

Regulatorul MCP1727 de pe placa demo poate scoate chiar 1.5 A la 3.3 V iesire ! Se pare ca nu-i bai daca alimentez acel dsPIC cu LM2575 ajustabil la 3.3 V iesire si nu e nici pe sfert ca marime fata de LM2575. As putea sa-i masor curentul de consum la placa demo desi nu cred ca consuma mai mult de 200 mA.la 3.3 V.

Link spre comentariu

Ceea ce mi se pare ciudat este ca nu-mi mai spune: "Programming failed".

Inainte de aceste mesaje, chiar cand am pornit MPLAB-ul cu placa demo conectata mi-a zis "sa caut pe site la Microchip o alta placa demo la fel" !!!!

 

Probabil, asa ca sa ma sperie pentru ca au trecut 4 ani de la cumparare si probabil 8 ani de la fabricarea placii demo.

 

:57

Editat de mircang9
Link spre comentariu

@ Cirip

"Ziceai undeva pe un topic ca: dsPIC33FJ desi are acele doua module ADC si DAC interne scoate un zgomot de 17 Hz, cu iesirea la DAC tinuta in zero si in acelasi timp intern ii dai sa ruleze un algoritm ? Adica peste 12 KHz frecventa de esantionare se intampla acest fenomen ? Nu prea as fi dispus acum sa dau bani pe ADC si DAC externe. Si asta in conditiile in care in datasheet se lauda cu o rata de esantionare de 500 Ksps ( pentru ADC de 12 biti ) si 1.1 Msps ( pentru ADC de 10 biti ). "

Corect. Frecventa de 17 Hz era rezultatul procesarii pe blocuri de date (buffere ping-pong). Daca imi amintesc bine, treaba era asa: esantionam cu vreo 9KHz si, ptr reducerea latentei, procesam numai dupa ce umpleam un buffer de 512 esantioane. Datorita intrarii "in paine" a executiei fitrului pe un nr. mare de esantioane, consumul crestea pe termen scurt, apoi se calma. Am reusit sa vad pulsurile pe curentul consumat de desepel. Din asta rezulta 9Khz/512=17.57Hz zgomot ca un fel de impulsuri periodice. Zgomotul asta se propaga prin planul de masa al cipanului ("ground bounce" este termenul). Intre timp am rezolvat inlocuid ADC/DAC interne cu un codec de tip Si3000 si e curat ca lacrima. E interesant ca Microchip foloseste tot codec extern pe placa lor de demonstratie.


"Sa zic ca aplic interpolare adica esantionez cu 4 KHz si interpolez la 12 KHz cu un FTJ dupa introducere de zerouri intre esantioane pentru a obtine o intarziere k > 1 pentru esantioanele de la intrare ( pentru intarzierea de pi/2 ) pentru demodulare FSK."
Da, poti sa incerci cu up-sampling si interpolare.


"Pot seta orice frecventa de esantionare la ADC ? De exemplu: 5432 Hz ? Am ales intamplator aceasta cifra. Sau sunt frecvente de esantionare standard ? De exemplu 5432 Hz se poate obtine doar prin interpolare/decimare ? sau direct din setarile de la ADC/DAC ?"
Singura regula este sa fii sigur ca taica Nyquist este fericit. In rest nu ai nicio restrictie. Se mai adauga restrictii daca vrei sa interfatezi sisteme cu rate standard: 44.1K sau 48K la nivel digital. Altfel, esti liber ca pasarea cerului. A, mai e o restrictie impusa de ratele de divizare disponibile in cipan, in sensul ca trebuie sa gasesti un factor de divizare intreg cu care sa programezi lanturile de numaratoare de la oscilatorul primar pana la ceasul ADCului. Dar in general asta nu pune o problema majora. O sa gasesti ceva suficient de convenabil.

 

 

"Probabil, asa ca sa ma sperie pentru ca au trecut 4 ani de la cumparare si probabil 8 ani de la fabricarea placii demo."

Stai linistit , ca nu vrea nimeni sa te sperie :). Eu am cateva placi facute de mine si merg cu ICD2 si mai nou cu PicKit3 de n-au aer. Precis ca ai o gaina pe-acolo. Recent am lucrat la p placuta cu PIC18F, care parea ca nu vrea sa coopereze, dar in realitate uitasem sa lipesc conexiunile de la cuart si debuggerul se plangea ca nu poate sa vorbeasca cu cipanul. Am lipit si merge bine mersi.

Editat de cirip
Link spre comentariu

Pot folosi DAC si ADC de la codecul Si3000 in acelasi timp ? Cred ca am nevoie de el deoarece acel 17 Hz imi strica demodularea FSK cu date la viteza de 50 Hz adica 50 bps, adica se insumeaza cu semnalul demodulat.

Editat de mircang9
Link spre comentariu

In fisierul de demodulare FSK pentru Canal 6, daca iti mai amintesti, la partea de filtrare trece jos dupa inmultirea cu intarzierea k, ce fel de filtru trece jos e acela ? De unde ai scos a = 0.01 ? Am demodulat din fisierul gata filtrat cu canalul 6:

 

%canal 6: 990 - Fc=1020 - 1050 Hz

 

f_samp=44.1e3;
f_min=990; f_max=1050;

 

x_in=wavread('ch6_filtrat.wav');
%Demodulare FSK
x_lim=sign(x_in);
delay=11; n1=100000;
for k=delay:n1
x_mul(k)=x_lim(k)*x_lim(k-delay+1);
end
%Filtrare trece jos a datelor
y_data=zeros(1,n1);
a=0.01;
for k=2:n1
y_data(k)=(1-a)*y_data(k-1)+a*x_mul(k);
end
for k=2:n1
x_mul(k)=(1-a)*x_mul(k-1)+a*y_data(k);
end
for k=2:n1
y_data(k)=(1-a)*y_data(k-1)+a*x_mul(k);
end
figure(2)
%Afiseaza datele demodulate direct
plot(y_data(20000:95000), 'b');hold on;
%Generare date dreptunghiulare
for k=2:n1
y_lim(k)=0.15 + (sign(y_data(k)-0.08)+1)/20;
end
%Adauga datele dreptunghiulare la grafic
plot(y_lim(20000:95000), 'r');hold off;
%plot(y_lim, 'g');hold off;

ylim([0 0.3])

 

Deocamdata inca nu am reusit sa obtin y_data cu un fir sau iir din biblioteca de functii Matlab. Mai caut.

 

Comanda: x_in=wavread('ch6_filtrat.wav'); incarca in vectorul x_in esantioanele cu frecventa de esantionare implicita adica 44.1 KHz ? Intreb pentru ca in argument nu apare frecventa de esantionare cu care e citit fisierul ch6_filtrat.wav.

 

De exemplu cand e creat ch6_filtrat.wav dupa filtrare trece banda, e specificata frecventa de esantionare de scriere a vectorului rezultat x_interp dupa filtrarea trece banda cu filtru fir1: wavwrite(x_interp, f_samp, 'ch6_filtrat.wav');

 

Rescriu si partea de filtrare trece banda, ca sa-ti poti aduce aminte mai usor:

 

%canal 6: 990 - Fc=1020 - 1050 Hz

f_samp=44.1e3; t_start=10; %Nfft=2^17
f_min=990; f_max=1050;
%Citeste fisier de intrare
%=========================
x_in=wavread('L400_4.wav');
x_in_trunc=x_in(t_start*f_samp:t_start*f_samp+Nfft);
% Decimare
%==========
r=10;
x_dec=decimate(x_in_trunc, r, 'fir');
%Filtrare trece banda
%====================
n_taps=150;
b_ftb=fir1(n_taps, [f_min/(f_samp/(2*r)) f_max/(f_samp/(2*r))]);
x_filt=filter(b_ftb, 1, x_dec);
% Interpolare
%====================
x_interp=interp(x_filt, r);
wavwrite(x_interp, f_samp, 'ch6_filtrat.wav');
x_in=wavread('ch6_filtrat.wav'); % am adaugat eu ca sa demodulez din fisierul filtrat ch6_filtrat.wav si nu din x_interp - rezultatul
% filtrarii din Matlab.
Am eliminat plot-arile pentru a urmari mai usor esenta fisierului. Am salvat format .txt ca sa pot sa atasez fisierul .m pe care nu mi-l ataseaza.
Am schimbat f_min si f_max la cat ma intereseaza adica Fc+/-30 Hz, unde Fc = 1020 Hz.
f_min=950; f_max=1090; am modificat cu: f_min=990; f_max=1050;

mirc_ch6.txt

Editat de mircang9
Link spre comentariu

Salut mircang9,

 

"Pot folosi DAC si ADC de la codecul Si3000 in acelasi timp ?"
Da. Si3000 are o interfata seriala care se potriveste cu modulul DCI din dsPIC33F si care stie sa transmita si sa receptioneze simultan. Citeste cu atentie foaia de catalog a lui Si3000. Acolo explica cum se formeaza frame-urile de date si cum poti seta niste biti prin care sa ii spui ca frame-ul urmator contine o comanda. Si3000-ul e destul de complex. Are amplificator cu castig reglabil, intrari multiple, alea, alea.

 

"ce fel de filtru trece jos e acela ? De unde ai scos a = 0.01 ?"

Este filtru cu medie alunecatoare. E simplu si l-am pus acolo din lene, ca sa nu calculez un filtru mai complicat. L-am aplicat de 3 ori, ceea ce e echivalent cu cascadarea lor. (1/a) este numarul aproximativ de esantioane peste care se face medierea. Caracteristica de transfer nu e chiar ca un filtru traditional, ci e de tip sinus cardinal. Primul nul este la fs*a. In cazul asta, 44KHz *0.01=440Hz. Rulat de 3 ori, probabil ca frecventa de taiere ( -3dB) a coborat pe la 200-300Hz. O buna parte a ajustarii a fost si ochiometrica. M-am uitat la reziduurile de purtatoare dupa demodulare si am incercat sa le fac cat mai mici, fara sa afectez integritatea semnalului de date.

 

"Comanda: x_in=wavread('ch6_filtrat.wav'); incarca in vectorul x_in esantioanele cu frecventa de esantionare implicita adica 44.1 KHz ?"
Frecventa de esantionare e continuta in fisierul wav. Matlab stie sa o extraga. Scrie "doc wavread <enter>" in linia de comanda si o sa iti afiseze helpul comenzii.

 

 

.

 

 

 

Link spre comentariu

Salut Cirip,

 

Multumesc pentru raspunsuri si ajutor. Cred ca demodularea FSK prin inmultire cu esantioane intarziate cu k si FTJ + comparator am dezbatut-o deocamdata suficient de mult pana la stadiul in care urmeaza sa trec la implementarea efectiva in dsPIC.

 

Prezint in continuare a 2-a abordare adica a 2-a metoda de demodulare FSK pe care as vrea s-o dezbatem in continuare. Aceasta metoda mi se pare mai tare sau mai laborioasa si in acelasi timp mai greu de implementat. Iti redau un mesaj de al tau de prin toamna 2010:

 

"Vorbeam de demodulare soft, digitala. Pe de alta parte, demodularea digitala nu inseamna masurarea perioadelor. Daca in spectrul vocal se transmit simultan canalele alea de date, atunci semnalul in timp va fi o amestecatura de nedescris. Este imposibil de demodulat asa ceva fara filtrare. Ia excelul si insumeaza 3-4-5 sinusoide si vezi pe grafic ce iese. Asa ceva nu se poate demodula cu limitator. De aia nici nu a mers cu CD4046. Poate ca ar fi mers cu filtru inainte. Si de aici se vede ca solutia este DSP.

Revenind, probabil ca ceea ce vrei sa faci este sa filtrezi cate un canal, apoi sa il demodulezi. Asta se face digital, dar, repet, nu limitand si masurand perioade, ci: Esantionare->filtrare(prin filtrare inteleg convolutie discreta cu functia pondere a filtrului)->PLL numeric->data slicer->recuperare de clock->extragere date. Apoi detectie de erori si ce-o mai fi. Totul soft, dar lucrezi cu valorile esantioanelor, nu cu semnal limitat. Daca limitezi semnalul ala care contine mai multe canale simultane, nu mai recuperezi nimic. Daca semnalul ocupa banda vocala, conform lui Taica Nyquist, o esantionare pe la 8KHz ar fi suficienta, deci ADCurile duc bine mersi. Problema reala e puterea de procesare, mai exact calculul convolutiei.

E artimetica multa. Nu merge ca programele obisnuite de genul: daca bitul x e 1, fa-l pe y=0.

Daca am timp, o sa-ti arat o poza cu ce am facut eu in Matlab. E departe de ce vrei tu, in sensul ca eu am un singur canal si e un mediu sanitizat, adica RSZ foarte mare. Generez FSKul virtual. Frecventele mele sunt 2025 si 2225, 300 baud, standardul Bell 103. Am incercat sa aplic algoritmul pe un semnal real, inregistrat cu placa de sunet si inca nu imi place, dar se mai lucreaza."

Cirip

 

N-ai mai zis nimic de aceasta metoda de demodulare adica urmatoarele etape: Esantionare->filtrare(prin filtrare inteleg convolutie discreta cu functia pondere a filtrului)->PLL numeric->data slicer->recuperare de clock->extragere date, pentru standardul USILOG adica rata baud de 50 bps ( 50 Hz ) si frecventele pentru canal 6: %canal 6: 990 Hz ( zero logic ) - Fcentrala=1020 Hz - 1050 Hz ( unu logic ).

 

As vrea pentru inceput, referitor la aceasta metoda, o prezentare mai detaliata a algoritmilor enumerati:

 

0) Generez FSKul virtual - asta cred ca o rezolv cu Audacity editand un wav modulat FSK pe care apoi il citesc cu Matlab.

1) Esantionare - nu cred ca mai trebuie discutat

2) Filtrare(prin filtrare inteleg convolutie discreta cu functia pondere a filtrului) - filtrare la ce ? la esantioane, dar ce mai exact

filtram ?

Care e functia pondere a filtrului ? Vreau calculul matematic.

3) PLL numeric. Din ce e alcatuit ? Cred ca e un model matematic ce poate fi reprezentat in Matlab. Vreau, te rog frumos,

calculul matematic pentru PLL.

4) Data slicer. Ce face, matematic ?

5) Recuperare clock. Aici cred ca se refera la detectia ratei baud. In cazul meu 50 bps. Mai exact sincronizare pe bit sau pe

jumatea bitului. Care e metoda de calcul ?

6) Extragere date. Aici sunt refacuti bitii, mai exact, stiind rata baud si fiind sincronizat pe jumatea ( sau inceputul sau frontul

crescator la fiecare bit ) se pot extrage datele. Iarasi, aici vreau, te rog mult si frumos, metoda de calcul.

 

Un fisier .m cu cei 0-6 pasi m-ar ajuta mult.

 

Cu deosebita stima, Dan *

Editat de mircang9
Link spre comentariu

Salut,0) Nu cred ca are rost sa folosesti Audacity. De fapt nu cred ca este posibil; nu cunosc Audacity suficient. Cum o sa generezi FSK in functie de datele pe care vrei sa le transmiti? Sa presupunem ca vrei sa transmiti sirul"123abc" modulat FSK. Cum bagi cei 6 octeti in modulator? Mai vroia cineva pe-aici sa demoduleze FSK. Mondan parca si i-am lasat un wav cu un measj modulat FSK sa-l demoduleze, dar nu am mai primit nicio veste de la el pe tema asta. Eu am generat FSK cu Matlabul. E bun la toate :)1) Oki.2.a) Algoritmul se referea la ceea ce vine pe linia telefonica. Tie iti vin pe linie nshpe purtatoare. Trebuie sa filtrezi una dintre ele din tot snopul care vine pe linie, apoi il demodulezi. Ca la radio. In antena sunt o gramada de posturi, dar tu il filtrezi si il demodulezi pe ala pe care vrei sa il asculti.2.b) Functia pondere a filtrului este TF inversa a caracteristicii de frecventa sau raspunsul la impulsul Dirac. E acelasi lucru. Coeficientii filtrului tau sunt exact asta: functia pondere a filtrului. Fa TF a functiei pondere si o sa vezi caracteristica in frecventa a filtrului. Cum crezi ca am analizat coeficientii pusi de tine in celalalt post? Exact, le-am facut TF. Cauta pe Gogu "functie pondere"3) Cred ca e prea devreme sa discutam de PLL numeric. Ti-as propune ca deocamdata sa ne limitam la demodulare prin metoda aia cu defazaj cu pi/2.4) Calculeaza semnul diferentei dintre valoarea de intrare si pragul de decizie. Matematic este functia "signum". E acelasi lucru cu un comparator hardware.5) Recuperarea clockului se face prin multe metode. Doua imi vin in minte: ridicare la patrat, filtrare de banda ingusta, ajustarea fazei sau bucla Costas ( cauta pe Gogu ce e aia). Dar cred ca punem caruta inaintea cailor. Mai ai pana la recuperare clock. Si daca bagi datele intr-o seriala hardware, ai scapt de recuperarea clockului. Stie seriala sa se sincronizeze pe bitii de start si de stop.6)Avand doua semnale, unul de clock si unul de date, ambele dreptungiulare, ptr ca le-ai trecut prin comparator (data slicer), calculezi derivata clockului si o compari cu o valoare de prag. In momentul in care derivata are o valoare mare, inseamna ca esti pe front. Exact in momentul ala citesti valoarea datei. Este echivalent cu functionarea unui bistabil de tip D.

Link spre comentariu

Cred ca ma specializez in codecuri :rade: Azi, dupa ce am comandat Si3000 m-am uitat mai bine pe placa dsPIC DSC Starter Kit 1 si citind mai bine in manual, peste ce crezi ca dadusi ? ... peste un codec frumusel chiar pe placutza asta de pe masa mea pe care o am din 2011. Stiam ca am un CODEC pe placa, dar ce face si cate de bun e nu m-am documentat prea mult. In 2011 foloseam numai iesirea de la PWM+FTJ. Azi, venind de la munca ma gandi sa ma uit putzin mai bine peste manual, si incet incet "mi s-a aprins LED-ul" ( beculetzul e la electricieni ). E vorba de CODECUL numit WM8510. Are DAC si ADC si in plus are viteza de esantionare de maxim 48 kHz , adica e de 4 ori mai rapid decat Si3000 si comunicatia cu dsPIC o face cu dsPIC prin I2C pentru control si DCI pentru date. Atasez si schema bloc a placii demo. Adineaori am sunat daca se poate sa anuleze comanda. Daca nu se poate anula, platesc un Si3000. In CD-ul pentru placa demo am si exemple cum pot comunica cu WM8510. Placutza asta si CODECUL "au strigat la mine in tacere 4 ani" ca sa termin proiectul cu filtrarea trece banda si demodularea FSK. Acum sunt mai hotarat sa duc pana la capat proiectul asta. .... Pana la urma cumpar si acel Si3000. O sa lucrez cu ambele CODEC-uri. Asa invat mai multe. La ce vreau sa fac nu am nevoie de stereo pentru ca filtrez si demodulez un canal ( un fir ) adica mono. S-ar putea ca la WM8510 sa am o oarecare reductie de viteza, fiind cu I2C adica half-duplex, fatza de SPI cu full-duplex de la Si3000.

post-181251-0-45616700-1485964773_thumb.png

Editat de mircang9
Link spre comentariu

Si3000 e cam de 4 ori mai scump decat WM8510 pe piata de electronice din Romania, insa cu toate acestea pentru a garanta mai mult reusita demodularii FSK o sa vad cum se comporta ambele CODEC-uri la demodularea FSK. CODEC-ul care va sluji cel mai bine scopului demodularii FSK pe acela il voi alege in cele din urma ca prototip final. WM8510 lucreaza si la temperaturi negative ( -40 grade Celsius ). Si3000 are si el o varianta pentru temperaturi negative.

Editat de mircang9
Link spre comentariu

Salut Cirip,

 

Mesajul demodulat FSK din fisierul "Mondan_fsk.wav" este urmatorul: "Felicitari Mondan, ai reusit sa demodulezi! cirip, elforum" :dffe

 

Mesajul demodulat arata ca in figura. Acolo rezultatul filtrarii FTJ trece sub zero pe axa Y.

 

Vreau, te rog frumos, sa-mi dai si cum generez in Matlab un mesaj modulat FSK. Pentru ca in Audacity este mai greu.

 

Raman deocamdata doar la codecul WM8510. Comanda pentru Si3000 a fost anulata. Daca va functiona bine demodularea FSK cu WM8510 nu voi apela si la Si3000.

 

Multumesc Cirip *

 

Cu deosebita stima, Dan *

post-181251-0-48806400-1486133075_thumb.jpg

post-181251-0-00184400-1486133088_thumb.jpg

Editat de mircang9
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