Sari la conținut
ELFORUM - Forumul electronistilor

Filtrarea digitala a spectrlui de frecvente


Mondan

Postări Recomandate

de ce difera valorile din coloana "sin + zgomot" din foaia sin + zgomot de valorile din coloana "sin + zgomot" din foaia filtrat? (ma refer la cele 512 valori)

Pentru ca in foaia in care sunt generate folosesc functia RANDOM si la fiecare recalculare a foii, in caz ca schimbi ceva prin vreo casuta, se genereaza din nou valorile aleatoare. In foaia filtrat am facut un copy/paste la valorile pe care le-a avut la un moment dat, dar sunt numai valorile numerice, nu functiile.

Acum daca ai putea sa faci si un exemplu pe aceeasi linie metodologica cu un filtru IIR:

He he! Da, o sa-i vina randul, dar nu acum imediat, ci cand oi avea timp. O sa postez tot aici.
Link spre comentariu
  • 3 săptămâni mai târziu...
  • Răspunsuri 53
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • cirip

    16

  • mircang9

    15

  • nr4

    3

  • Mondan

    3

Top autori în acest subiect

Imagini postate

Salut, Cirip. Te-am gasit.

 

Vezi si subiectul cu demodulator FSK cu PIC16F887 pe care l-am reactivat.

 

Putini constientizeaza importanta acestui subiect. De exemplu daca avem sa zicem o instalatie de telecomanda la distanta prin unde radio in loc sa folosim mai multe abonamente pentru fiecare post telecomandat trecem toate telecomenzile pe un canal pe frecvente diferite si asa se economisesc niste bani. As comanda un dsPIC sa-l programez

cu PICKit 2 si sa incerc sa fac cum ai facut tu cu dsPIC-ul ala. Zici ca ti-a mers. Daca esti dragut, poate imi trimiti pe [email protected] algoritmul cu formulele de convolutie ( transformata Fourier, etc ... ) ca sa-l implementez in C si sa-l compilez pentru un dsPIC. Inca nu m-am gandit la un dsPIC anume. Poate imi recomanzi tu unul. :freaza:

Link spre comentariu

Salut,

 

Am citit si postarea de la PIC. E prea mult de scris. Exista mai multe metode de demodulare FSK prin DSP, dar niciuna nu numara intervale.

-O varianta e sa faci produsul dintre semnalul initial si o replica intarziata cu aprox 90 de grade, apoi rezultatul sa il filtrezi trece jos. Metoda seamana cu demodulatorul MF din cipanele de sunet TV vechi: TAA661, TBA120.

-Alta varianta e sa faci un PLL digital cu NCO (Numerically Controlled Oscillator) si sa extragi semnalul demodulat din nivelul de comanda al NCOului.

 

Cred ca e bine sa citesti macar o carte adevarata de DSP. Eu stiu doua tari: una e scria de Oppenheim si Schaffer, iar a doua e scrisa de John Proakis. Ar mai fi Rick Lyons, care cica e mai digerabila. Fii pregatit cu un lighean cu apa rece in care sa bagi picioarele cand te apuca bazdacii. E greu!

 

Formula convolutiei discrete se gaseste aici: http://en.wikipedia.org/wiki/Convolutio ... onvolution

 

Ptr dsPIC, instaleaza MPLAB C30 si ai acolo functii specifice DSP optimizate ptr arhitectura dsPICului.

 

Cirip

Link spre comentariu

Salut Cirip,M-am gandit sa-mi iau un dsPIC starter kit ca inceput pentru a face filtrare FIR bandpass filter. Cu C Compiler MPLAB Lite pot programa si face un astfel de filtru ? Am gasit dsPIC FD Lite si manualul pentru el. Problema e ca pe dsPIC starter kit e un dsPIC33F. Mplab 30 programeaza sidsPIC33F ?

Link spre comentariu

Cu C Compiler MPLAB Lite pot programa si face un astfel de filtru ?

Cred ca da, dar mai bine folosesti C30. Am scris mai sus. Pe de alta parte, compilatorul e doar o parte. Fara sa intelegi aritmetica din spatele filtrarii, e foarte dificil. Strict vorbind, un filtru se poate scrie in orice limbaj, inclusiv in asamblare :)

Mplab 30 programeaza si dsPIC33F ?

Da.
Link spre comentariu

Da, asa e fara a intelege aritmetica este imposibil. Pentru asta incep si eu sa fac simulari in MATLAB si EXCEL pana imi soseste placuta cu dsPIC33FJ256GP506 ce are un codec, o memorie 4 MB ( unde cred ca pot memora un fisier mp3 sau wav, o intrare audio, o iesire audio. Pe intrarea de microfon o sa bag canalele si pe iesirea audio sa iasa doar un canal, sau iesirea in interior o si decodific FSK si integrez astfel si filtrarea si demodularea FSK si prelucrarea datelor receptionate si actionarea diferitelor relee pe pinii de iesire ai unui port. Sau bag fisierul wav in memoria EEPROM si fac de acolo filtrare demodulare. Defapt o sa lucrez cu modulul ADC din dsPIC care face esantionarea la 8KHz ( sau mai sus ) si prelucrarea matematica a esantioanelor furnizate de convertorul analog digital.Am vazut ca dsPICu are un set de instructiuni DSP specifice ce face operatii specifice de genul: A = A + (x * y); A = A + x2; A = A + (x – y)2; unde A este registrul acumulator de 40 biti, din motorul DSP. Sunt curios sa vad ce o sa-mi iasa. La partea aceea cu demodularea FSK cu PIC ar mai fi ceva: cand leg iesirea din filtru la PIC mi se cam strica forma semnalului de la iesirea din filtru ( semnalul sinusoidal modulat FSK ) si nu stiu ce sa mai interpun intre filtru receptie si PIC ca sa nu mi se strice forma semnalului chiar daca la iesirea din comparator semnalul dreptunghiular este frumusel ( palierele de zero si +5V sunt destul de curate ).Acum intre filtru si PIC este doar rezistenta de 5K pe intrarea de + a comparatorului cu AO, iar intrarea de - este legata la masa.

Link spre comentariu

...

Cred ca e bine sa citesti macar o carte adevarata de DSP. Eu stiu doua tari: una e scria de Oppenheim si Schaffer, iar a doua e scrisa de John Proakis. Ar mai fi Rick Lyons, care cica e mai digerabila. Fii pregatit cu un lighean cu apa rece in care sa bagi picioarele cand te apuca bazdacii. E greu!

...

Chiar aveam mare nevoie de niste trimiteri pentru ca saptamana trecuta mi-a sosit un kit de dezvoltare (TMDX5535EZDSP) cu un DSP low cost (TMS320C5535, e fixed-point DSP) de la Texas Instruments. Ma cam pierdusem printre atatea carti si tutoriale online.

 

Acum rasfoiesc Understanding Digital Signal Processing, Second Edition de Richard G. Lyons si imi place foarte tare. Insista mai mult pe concepte si corespondenta lor cu realitatea decat pe aparatul matematic.

E exact ce-mi trebuia, deja mi-a clarificat niste nelamuriri legate de convolutie! :dans:

Multumesc pentru recomandari.

Link spre comentariu

Pe asta il stiam, multumesc. La http://www.dspguide.com/ ajunsesem mai demult, inainte sa comand kit-ul DSP. Bantuiam pe net incercand sa pricep convolutia si cineva de pe edaboard recomanda dspguide. Am download-at toate capitolele in format PDF dar m-am uitat doar pe 2-3 dintre ele, in fuga. Deocamdata imi place mai mult cartea lui Richard G. Lyons.

 

Necazul meu acum e altul. S-au adunat prea multe dintr-o data: si teorie despre DSP, si un MCU de la TI cu care n-am mai lucrat, si librariile specifice lui, si un RTOS, si multe detalii cum ar fi IDE-ul sau alte tool-uri specifice TI, si lipsa de exemple pentru kit-ul meu, si alte maruntisuri cum ar fi display-ul sau codec-ul de pe placa, si un C cu care n-am mai lucrat serios cam demult, si lipsa unei teme de proiect...

Am cumparat kit-ul doar asa, ca nu ma jucasem niciodata cu un DSP. :57

 

Nici nu stiu, cu ce sa incep mai intai?

Care e "Hello World!"-ul pentru DSP-uri?

Link spre comentariu

Nici nu stiu, cu ce sa incep mai intai?Care e "Hello World!"-ul pentru DSP-uri?

Salut,Intr-adevar, materia este foarte vasta si mai ales seaca, daca nu poti sa asociezi imediat cu ceva practic. Nu stiu care este "Hello World" ptr DSP, dar pot sa-ti spun cum am inceput eu.Intai si intai am inceput foarte greu. M-am apucat de 3 ori pe cont propriu si tot de atatea ori am abandonat. Pur si simplu nu intelegeam o iota. Asta pana cand am avut sansa sa ma uit pe niste note de aplicatie de la TI si atunci ...Primul softulet desepel adevarat facut de mine a fost un oscilator. Atentie, nu se foloseste functia sinus, ci o formula recursiva. Primul oscilator a fost real (adica o singura iesire), apoi am facut oscilator complex (in cuadratura, adica sin si cos riguros defazate cu 90 de grade). Oscilatorul, numit si NCO este un element foarte utilizat in desepeala. De exemplu, printre primele proiecte pe care mi le-am dat ca tema a fost un inversor de spectru vocal, in care practic am mimat principiul generarii SSB din transceiverele de scurte.Ca sa incepi, nu cred ca trebuie sa te legi de vreun limbaj sau kit. Ar trebui sa inveti prea multe dintr-o data. As face intai in Excel sau Matlab si numai dupa ce algoritmul este stabil, as trece la implementare. Implementarea are problemele ei, cum ar fi precizia reprezentarii, eficienta accesului la memorie ... O povara de care nu ai nevoie la inceput.Un exemplu foarte dragut in sensul asta este chiar cu oscilatorul. Sa zicem ca vrei sa faci un oscilator. Ptr asta, functia ta de transfer trebuie sa aiba o pereche de poli complex conjugati situati exact pe axa imaginara a planului s (Laplace). Numai ca datorita preciziei finite a reprezentarii, polii pot sa nu pice exact pe axa. Efectul este acela ca fie amplitudinea creste lent in timp, daca polii sunt in semiplanul drept sau se stinge daca polii au alunecat usor in semiplanul stang. Si experimentele cu deplasarea intentionata a polilor sunt haioase.Inca ceva. Formula recursiva am invatat sa o deduc singur. Face apel la transformata Z. Iti pot da o mana de ajutor in limita timpului disponibil.Cirip
Link spre comentariu

Salut Cirip,

 

In Dig_Noise_Filt_Elforum.zip in "FTB_coef" vad ca functia de transfer a FTB este:

 

h[n]FTB = |h[n]FTJ|+|h[n]FTS|. Dar nu inteleg de unde ai luat semnele pentru h[n]FTB in urma adunarii valorilor normate ( valorile modul fara semn ).

 

In "Sin+zgomot" cu ce ai generat sin1 si sin2 si zgomotul si cum ai preluat ( generat ) acele valori ( esantioane ) ?

Care este formula pentru cplx FFT ? Valorile f[Hz] dupa ce formula le-ai calculat ? si f[Hz] din care

imagine: din sin+zgomot sau magFFT ? Ce este mag FFT ? Esantioanele per global ( sin1 + sin 2 +zgomot ) daca ar fi un caz real cu dsPIC pot fi defapt esantioanele preluate prin convertorul ADC

de 12 biti ? Cine e a1 si a2 ? Vad ca ai esantionat cu frecventa de 500 Hz >>> 2 * 90 Hz.

 

In "FTB_coef" cu ce formule si cum ai obtinut valorile din fiecare coloana ? La fel si graficul ?

In "filtrat" cum ai obtinut valorile pentru sin+zgomot ( presupun ca de la iesirea filtrului ) si Windowed h si valorile pentru iesirea din filtru ?

 

La fel pentru "FFT(filtrat)" cum ai obtinut valorile din fiecare coloana ? cu ce formula ?

 

Pentru ca aplicatia sa functioneze sa zicem intr-un caz real cu dsPIC: inteleg ca valorile

acelea pentru sin1 si sin2 si zgomotul sunt de fapt doar patternuri de test, nu ? Ai obtinut un

FTB prin insumarea a doua filtre FTJ+FTS. Din cate am vazut, FTS si FTJ pentru un filtru

FTB trebuie aplicate in mod paralel ( in acelasi timp ) si nu succesiv pentru a obtine FTB

din FTJ+FTS, adica defapt FTB=FTS||FTJ in cazul de fata. Vorbesc de o implementare

cu dsPIC a ceea ce ai simulat in Excel cu un dsPIC sau oricare alt procesor DSP.

Vreau sa fac asta chiar daca valorile esantionate de ADC pentru sin1 si sin2 si zgomot vor fi altele. Adica sin1 si sin2 si zgomotul le generez cu ceva. Sin 1 si sin2 dintr-un PIC cu PWM+FTJ sau retea de rezistente lead R/2R pe post de convertor DAC sau un integrat analogic ( CD4046 ) iar zgomotul nu stiu cu ce SAU mai usor le generez cu un program direct din calculator. Le unesc si le bag pe intrarea de ADC adica pe un canal de la ADC de la dsPIC sau pe intrarea de codec ( inca nu stiu exact diferenta intre codec si ADC pentru prelucrarea semnalelor ). Implementez formulele cu care ai calculat valorile din exemplul dat de tine. Apoi iesirile sau valorile calculate analoage cu cele din "filtrat" sau "FFTfiltrat" le convertesc invers adica DAC sau cu generatorul comparatorul PWM + FTJ ( metoda folosita in dsPIC starter Kit pentru exemplele demo )

pentru generarea semnalelor audio ce ies prin "speaker phone".

 

Deci asta vreau sa fac pentru inceput: sa implementez pe ceva concret adica pe dsPICul ce o sa-mi vina exact ce ai facut tu aici. Sa bag formulele in dsPIC in limbajul C al dsPIC-ului.

Poate chiar valorile pe care le-ai afisat in fisierul arhivat "Dig_Noise_Filt_Elforum.zip". Si desenele pe care le-ai afisat sa le vad cu osciloscopul si cu un vobuloscop ( pentru caracteristica spectrului de frecvente - analiza spectrala a ceea ce iese din dsPIC aplicand poate un pattern cu toate frecventele la intrarea in canalul ADC in dsPIC ). Adica generez toate frecventele intre 10 Hz si 100 Hz cu ceva si le vad care cum sunt atenuate la iesirea filtrului adica din dsPIC33Fxxxxx-ul din starterKit. Sau leg iesirea din starter Kit dsPIC cu intrarea placii audio din calculator si vad

semnalele pe un program din calculator ce figureaza un osciloscop si un vobuloscop ( asta ca sa nu ma mai complic cu atatea aparate ). Ma gandesc sa lucrez cat mai elegant si nu cu fire si lipituri si nervi in plus ( ca doar dezvoltarea/proiectarea in electronica s-a mai dezvoltat - au aparut o sumedenie de "design tool-uri " pe net si care pot fi testate fara bani - adica acele trilauri ). Si astfel lucrez doar cu placuta Kit cu dsPICU si calculatorul ( placa audio din calculator ).

 

Cu deosebita stima, Dan ****

 

:smt103:

Link spre comentariu

In Dig_Noise_Filt_Elforum.zip in "FTB_coef" vad ca functia de transfer a FTB este:

h[n]FTB = |h[n]FTJ|+|h[n]FTS|. Dar nu inteleg de unde ai luat semnele pentru h[n]FTB in urma adunarii valorilor normate ( valorile modul fara semn ).

Salut,

 

Sunt foarte, foarte, foarte multe intrebari si probabil ca mi-ar trebui cateva ore ca sa raspund pe indelete. O sa raspund in limita timpului, dar reciteste threadul, ca la cateva am raspuns deja.

 

Pe de alta parte, trebuie sa te uiti cu atentie la formulele din excel. Nu stiu de unde ai dedus formula cu modul a lui h[n], dar nu este corecta. Corect este h[n]=hFTJ[n]-hFTS[n], fara niciun modul si diferenta, nu suma. Relatia provine din faptul ca daca privesti filtrele trece jos in domeniul frecventa ca dreptunghiuri de amplitudine 1 si latime egala cu banda de trecere, atunci un filtru trece banda este format din scaderea amplitudinilor a doua filtre trece jos de frecvente diferite. Apoi pe baza proprietatii de liniaritate a transf Four, se trece in domeniul timp la diferenta functiilor pondere, adica h[n]. Exact asta am facut. Pe cinstitelea, hFTS este tot un FTJ, dar l-am denumit asa ca sa arat ca de acolo incepe FTB.

 

Cum am obtinut h[n]? Si asta e dat in tabelele excel, dar o sa spun si pe vorbe. h[n] este transf Fourier inversa (iFFT) a caracteristicii filtrului in domeniul frecventa. Pe aia am calculat-o analitic (adica cu creionul pe hartie), ptr ca excel nu are iFFT, apoi am introdus formulele coeficientilor in casutele excel. Mai e o functie de ponderare acolo, ca sa iasa mai frumos la vopsea. Este coloana Hamming. Cauta pe gogu "Hamming windowing function".

 

Octave se cheama o versiune "gratis" de Matlab. Nu l-am incercat personal, dar cica e utilizabil.

 

Cirip

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