În acest articol, vreau să vorbesc despre experimentele mele privind crearea unui filtru simplu parametric digital FIR pe Verilog HDL. Până acum, am încercat să evit aceste procesări digitale de semnal pe site-ul nostru: este încă destul de dificil. Ei bine, atunci când este dificil, este nevoie de mult timp pentru a petrece pur și simplu un studiu independent al problemei. Chiar acum doar o saptamana am citit site-ul http://www.dsplib.ru/content/filters/ch10/ch10.html - o resursa foarte interesanta unde totul este destul de laconic si de inteles. După ce am citit mai multe articole de pe site-ul dsplib.ru, mi-am dat seama că mai bine nu scriu o teorie. Dar poate că pot să-mi ofer înțelegerea și implementarea filtrului pe Verilog.
Deci, filtrele digitale sunt dispozitive de procesare a semnalului digital.
Un semnal digital este o secvență de numere care reprezintă rezultatul măsurării unei cantități fizice în aceleași intervale de timp. Puteți măsura tensiunea, curentul, iluminarea, temperatura, unghiul, viteza și așa mai departe.
Cu toate acestea, există nuanțe.
În primul rând, ei spun că măsurătorile trebuie efectuate cu o frecvență mai mare de 2 ori mai mare decât cea mai mare frecvență prezentă în spectrul de semnal. Acest lucru este dovedit de teorema lui Kotelnikov. Consecința practică a acestui lucru - înainte de a măsura semnalul, trebuie să vă asigurați că spectrul său nu are componente armonice cu frecvențe mai mari de jumătate din frecvența de măsurare. Aceasta înseamnă că este necesar un filtru analogic adecvat în fața contorului. Dacă acest lucru nu se face, atunci în spectrul semnalului digitizat pot apărea frecvențe care nu au fost acolo înainte, semnalul original va fi distorsionat. Acest fenomen daunator este numit "aliasing".
În al doilea rând, lățimea dispozitivului de măsurare, ADC, convertor analogic-digital este importantă. Aici, din păcate, nu pot da nici o recomandare. Din anumite motive, în multe dintre articolele pe care le-am citit, este vorba de alegerea frecvenței de eșantionare de către teorema Kotelnikov, dar nu există nicio mențiune despre capacitatea de biți ADC. Acesta este un pic ciudat, deoarece teorema Kotelnikov însăși implică probele prelevate cu precizie absolută, care în viața reală nu poate fi. Încă trebuie să te uiți la nivelul de zgomot din semnalul de intrare, poate chiar să arate că cifrele junior ale ADC sunt "tremurând". Probabil, nu are nici un sens să luați un ADC cu o capacitate de biți care să permită jitterul mai multor biți de ordin scăzut din cauza zgomotului din semnalul de intrare.
Oricum, după ce semnalul de intrare este digitizat și este un flux de numere, acesta poate fi procesat prin metode numerice în microcontrolere sau în FPGA.
Una dintre sarcinile procesării semnalelor digitale este filtrarea. Filtrarea înseamnă suprimarea unor frecvențe în spectru și transmiterea / amplificarea altora. Despre spectru, am scris.
Există filtre low pass care trec numai prin frecvențe mai mici decât frecvența de cutoff specificată. Există filtre de trecere superioară, care, dimpotrivă, suprimă frecvențele sub frecvența cutoff. Există filtre de bandă care trec sau suprimau numai frecvențele într-o bandă dată (band-pass și band-stop filters).
Pe aranjamentul intern, mi se pare, cele mai simple sunt filtrele FIR. Filtrul FIR este un filtru cu răspuns impuls finit. În literatura engleză, FIR este FIR, adică un filtru cu impulsuri finite.
Structura acestui filtru este următoarea:
Aici, blocurile Z -1 sunt liniile de întârziere. În practică, lanțul blocurilor Z -1 este pur și simplu o secvență de registre pentru stocarea datelor. Pentru fiecare margine a frecvenței ceasului, care este frecvența de eșantionare, datele de intrare se deplasează de la primul registru la altul. Un filtru poate conține un șir de registre de lungime arbitrară. În plus, din fiecare bloc Z -1 există un transfer de date către multiplicatorul. Fiecare dintre multiplicatori își multiplă propriile date cu o anumită constantă. Apoi, toate rezultatele de multiplicare se adaugă și se obține un semnal filtrat. O știință specială este aceea de a calcula lungimea filtrului și coeficienții pentru multiplicatori. Caracteristicile filtrului depind de coeficienți.
Filtrul FIR are câteva caracteristici importante:
- comportamentul său este stabil și previzibil;
- dacă doriți, puteți implementa un filtru foarte rapid, deoarece în algoritmul său datele se deplasează numai înainte. Este destul de ușor să faci conducte.
Voi explica modul în care înțeleg amândouă aceste puncte.
Despre stabilitate și predictibilitate. Dacă vă uitați atent la structura filtrului, devine clară mișcarea datelor în el. Dacă datele de intrare sunt 16 biți și coeficienții pentru multiplicatori sunt 16 biți, atunci după înmulțire rezultatul devine 32 biți. Următorul este sumarea. Adăugarea a două numere pe 32 de biți oferă un număr de 33 de biți. Cunoscând lungimea filtrului, puteți spune exact ce capacitate de biți va fi rezultatul. Un filtru cu lungimea 4 va avea un număr de 34 de biți și un punct la ieșire. Operațiile matematice din interiorul filtrului nu acumulează o eroare, nu conduc la depășirea rezultatului. Unele alte filtre, cum ar fi IIR (filtru cu Infinit Impuls Response, IIR - filtru de răspuns infinit de impuls) conțin bucle de feedback. de exemplu, aici sunt următoarele:
Aici este diferit. Aici există un adder care adaugă semnalul de intrare cu un semnal întârziat și înmulțit cu un anumit coeficient cu semnalul de ieșire. Adderul are o capacitate fixă de biți. Este clar că un astfel de calculator poate depăși cu ușurință. Aici pentru a aplica pentru un astfel de circuit un semnal cu o componentă constantă, atunci după un timp, rezultatul depășirii bateriei va fi garantat. Ea este deja imprevizibilă și instabilă. Aplicați filtrele IIR cu prudență, cunoscând în prealabil natura intrării.
Acum despre viteza filtrului FIR. Datorită faptului că datele se deplasează doar înainte, este ușor să profitați de prelucrarea conductelor. De exemplu, în timp ce multiplicatorii înmulțesc următoarele date din registrele de întârziere, agregatul poate calcula suma din rezultatele multiplicatorului anterioare. Iar multiplicatorii înșiși pot folosi conducta internă, iar aglomeratorul poate folosi conducta internă. Da, rezultatul filtrului va fi întârziat de mai multe cicluri, dar numai de toate. Dacă vă uitați la legătura filtrului IIR, ca în figura de mai sus, este clar că datorită feedbackului pe care nu îl puteți adăuga până când multiplicatorul nu își calculează rezultatul.
Din schema bloc a filtrului FIR este de înțeles de ce se numește un filtru cu răspuns finit la impuls. În cazul în care fluxul de intrare de numere la toate zerouri edinichka întâlni unul, care este un singur impuls, răspunsul filtrului la acest impuls pentru a trece / final imediat ce pulsul părăsește ultima linie de întârziere. Filtrele IIR din contra - un singur impuls va fi returnat la intrare printr-o buclă de feedback pe termen nelimitat. Prin urmare, IIR este un filtru cu un răspuns infinit de impuls.
- http://www.micromodeler.com/dsp/
Utilizați instrumentul TFilter.
De exemplu, vreau să construiesc un filtru low-pass digital. Frecvența de eșantionare este de 20 MHz. Vreau la frecvențe mai mari de 2 MHz să suprime în mod semnificativ toate frecvențele, nu mai puțin de -40 dB.
Introduceți datele necesare în câmpurile de introducere din partea de jos a paginii și faceți clic pe butonul "Design Filtru". După câteva secunde, filtrul meu este calculat, iar rezultatul este pe dreapta în fereastra, ca lista de factori pentru multiplicatori: -510, -520, -625, -575, -287, 306, 1232, 2467, 3927, 5477, 6948, 8162, 8962, 9241 , 8962, 8162, 6948, 5477, 3927, 2467, 1232, 306, -287, -575, -625, -520, -510. Coeficienții totali de 27 - atunci aceasta este lungimea filtrului și va fi.
De exemplu, vreau să construiesc un filtru de bandă. Frecvența de eșantionare este de 20 MHz. Să presupunem că filtrul trebuie să suprime frecvențele sub 1 MHz și peste 4 MHz.
Introduceți date, fac calcule, am obține coeficienții de filtrare: -801, -1026, -210, 1914, 4029, 3905, 330, -5174, -8760, -7040, -152, 7700, 11130, 7700, -152, -7040 , -8760, -5174, 330, 3905, 4029, 1914, -210, -1026, -801. Aici lungimea filtrului a fost de 25 tapas.
Iată coeficienții de filtrare. Ce să faci cu ei? Ei bine, pentru a face un modul de parametri Verilog HDL, astfel încât să poată fi ușor de personalizat. În mod logic, parametrii modulului de filtrare - aceasta este lungimea sa, și anume numărul de linii de întârziere, date de biți de intrare și coeficienții pentru multiplicatorilor de biți.
Dacă lungimea cuvântul datelor de intrare - l IWIDTH, precum și numărul de registre din lanțul liniei de întârziere - l ROBINETTI, este destul de ușor să se descrie înregistrează lanțul:
module brad (clk, coefs, in, out);
parametrul IWIDTH = 16; // lățimea datelor de intrare (semnal)
parametru TAPS = 2; // numărul de robinete filtrante
cablu de intrare clk;
cablu de intrare în;
genvar i;
genera
pentru (i = 0; i
începe: atingeți
// face lanțul de registru de robinet
reg r = 0;
dacă (i == 0)
începe
// Primul atinge un semnal de la intrare
mereu @ (posedge clk)
r<= in;
capăt
altfel
începe
// apăsați reg recepționează semnalul de la robinet robinet reg
mereu @ (posedge clk)
apăsați [i] .r<= tap.r;
capăt
capăt
endgenerate
endmodule
Genera-genera construct a limbajului Verilog vă permite să creați dinamic numărul necesar de registre și să le îmbinați după cum este necesar în lanț. Acesta va arata astfel:
Astfel, lungimea filtrului poate fi specificată prin parametrul modulului Verilog. În mod similar, în cadrul for () buclă, multiplicatori sunt create în interiorul generate-endgenerate:
genvar i;
genera
pentru (i = 0; i
începe: atingeți
........
// obțineți coeficientul constant de multiplicare
sârmă c;
c = coefs [((TAPS-1-i) * 32 + CWIDTH-1): (TAPS-1-i) * 32];
// calculați multiplicarea și fixați-vă în registru
reg m;
mereu @ (posedge clk)
m<= $signed(r) * $signed(c);
............
Astfel, pe lângă registrele liniei de întârziere, multiplicatorii cu coeficienți proprii vor fi formați și conectați:
Am decis că coeficienții pentru multiplicatori pot fi transmiși la modulul conectat la magistrala (...) ca semnal de intrare, ca de exemplu:
brază # (. TAPS (27)) fir_lp_inst (
.clk (tb_clk),
.coefs (((
-32 "d510,
-32 "d520,
.......
32 "d575,
32 "d625,
-32 "d520,
-32 "d510
}),
.in (),
.out ()
);
Aici, fiecare coeficient de filtrare ocupă un număr fix de biți în magistrala 32 (sa decis că aceasta ar trebui să fie suficientă). Dar, din aceste 32 de biți, modulul va selecta numărul dorit de biți declarat pentru coeficienți. De exemplu, parametrul CWIDTH = 16; Amintiți-vă că numărul de biți din coeficientul de multiplicare depinde în cele din urmă de lățimea rezultatului.
Pentru simplificarea implementării, nu am realizat încă o conductă pentru adders. Acestea ar putea fi făcute rapid, de exemplu, adăugând valori de la multiplicatori în perechi, adăugând apoi perechi de rezultate ale adăugărilor de perechi anterioare și așa mai departe. Până acum am făcut un singur adder mare, ca o combinatorie mare și complexă. Cu siguranță în FPGA nu va fi capabil să lucreze la frecvențe înalte, dar în timp ce închid ochii la ea. Pentru ca doar să funcționeze.
Textul complet al modulului va arăta astfel:
Modul de brad (clk, coefs, in, out); parametrul IWIDTH = 16; // parametru de intrare a datelor (semnal) CWIDTH = 16; // atingeți lățimea datelor coefului (ar trebui să fie mai mică de 32 de biți) parametru TAPS = 2; // numărul de robinete filtru localparam MWIDTH = (IWIDTH + CWIDTH); // lățimea multiplă localparam RWIDTH = (MWIDTH + TAPS-1); // lățimea rezultatului filtrului sârmă de intrare clk; cablu de intrare în; cabluri de intrare; // tot coeficientul de intrare concatineted fir de ieșire; // ieșirea ia doar biții de vârf o parte din rezultatul genvar i; genera pentru (i = 0; i Dacă este timp, voi încerca să îmbunătățesc acest modul, să adaug o conductă de aditivi. Acum, întrebarea principală este cum să vă asigurați că funcționează în general? Ei bine, cum? Da, este simplu! - există un simulator Verilog. Voi scrie un testbench, care va simula semnalul de intrare la diferite frecvențe și va vedea răspunsul la ieșirea filtrului. Chiar mai mult. În cazul în care testbench va sintetiza semnalul de intrare ca o undă sinusoidală, și dacă schimbă frecvența într-un anumit interval fără probleme de frecvență joasă la un nivel superior, apoi observând răspunsul filtrului de ieșire, eu doar văd răspunsul său de frecvență! Structura programului testbench.v: Am arătat deja sinusoidul pentru testbench. Voi lua acel cod vechi, ajustați-l puțin și faceți o schimbare netedă a frecvenței de la 100kHz la 4MHz în pași de 1000Hz. In interiorul testbencha se va instala două instanțe ale unui modul brad () de filtrare, ci cu diferiți coeficienți pentru filtrul low-pass și un filtru de bandă. Toate codul testbench aici: `calendarul de timp 1ns / 1ns testbench (); reg tb_clk; inițial tb_clk = 0; întotdeauna # 25 tb_clk = ~ tb_clk; real PI = 3.14159265358979323846; real last_time = 0; // Sec real current_time = 0; // Sec unghi real = 0; // Rad frecvență reală = 100; // frecvență Hz freq_x100kHz = 0; // * 100kHz reg semnat sin16; // funcția care calculează Sinus (x) funcția real păcat; intrarea x; real x; reale x1, y, y2, y3, y5, y7, sumă, semn; începe semn = 1.0; x1 = x; dacă (x1<0)
begin
x1 = -x1;
sign = -1.0;
end
while (x1 > PI / 2.0) începe x1 = x1 - PI; semn = -1,0 * semn; capătul y = x1 * 2 / PI; y2 = y * y; y3 = y * y2; y5 = y3 * y2; y7 = y5 * y2; sum = 1.570794 * y - 0.645962 * y3 + 0.079692 * y5 - 0.004681712 * Y7; sin = semn * suma; capăt sfârșitul taskului set_freq; intrarea f; real f; începe frecvența = f; freq_x100kHz = f / 100000.0; capăt endtask întotdeauna @ (posedge tb_clk) începe current_time = $ realtime; unghi = unghi + (curent_time-ultima_time) * 2 * PI * frecvență / 1000000000,0; // $ afișare ("% f% f", timp curent, unghi); în timp ce (unghiul\u003e PI * 2.0) începe unghiul = unghiul-PI * 2.0; sfârșitul sin16 = 32000 * sin (unghi); last_time = actual_time; end // cablu filtru low-pass out_lowpass; brad # (. ROBINETTI (27)) fir_lp_inst (.clk (tb_clk), .coefs ((-32 "D510, -32" D520, -32 "D625, -32" d575, -32 "d287, 32" d306, 32 "d1232, 32" d2467, 32 "d3927, 32" d5477, 32 "d6948, 32" d8162, 32 "d8962, 32" d9241, 32 "d8962, 32" d8162, 32 "d6948, 32" d5477, 32 " d3927, 32 "d2467, 32" d1232, 32 "d306, -32" d287, -32 "d575, -32" D625, -32 "D520, -32" D510)), .in (sin16), .out ( out_lowpass)); sârmă // trece bandă out_bandpass ;. brad # (TAPS (25)) fir_bp_inst (.clk (tb_clk), .coefs ((-32 "D801, -32" d1026, -32 "D210, 32" d1914, 32 "d4029, 32" d3905, 32 "D330, -32" d5174, -32 "d8760, -32" d7040, -32 "D152, 32" d7700, "d11130, 32", 32 d7700, -32 „D152 , -32 "d7040, -32" d8760, -32 "d5174, 32" d330, 32 "d3905, 32" d4029, 32 "d1914, -32" D210, -32 "d1026, -32" D801)) ,. în (sin16), .out (out_bandpass)); integer i; real f; începe inițial $ dumpfile ("out.vcd"); $ dumpvars (0, testbench); f = 100.000; pentru (i = 0; i<4000; i=i+1)
begin
set_freq(f);
#1000;
f=f+1000;
end
$finish;
end
endmodule
Simulez în icarus verilog. Ca rezultat al simulării programului vvp, veți obține un fișier de ieșire cu diagrame de sincronizare a semnalelor out.vcd. Acestea pot fi vizualizate în programul GtkWave. Iată ce este vizibil: semnalul de intrare sin16 pentru ambele filtre schimbă frecvența, crește: În gama largă de frecvențe de la sute de KHz la mai multe megaherți pot fi văzute care frecvențele de filtru trece, și care a suprimat: Semnalul de intrare pentru sin16 este uniform în amplitudine pe întreaga bandă de frecvență. Semnalele „Torn“ la frecvențe joase - este doar atât de GtkWave atrage, cu o creștere (zoom) totul arată bine. Dar semnalele de ieșire, cum ar fi cele introduse pe ieșirea filtrelor. Filtrul low-pass începe de la 500kHz scădere lină amlitudy out_lowpass sinusoidă și după 2 filtru MHz are aproape nici o rateaza. Filtrul de bandă trece bine undeva în banda de 2-3 MHz, iar de-a lungul marginilor există căderi blânde (semnal de bandă de ieșire). Pentru a lua în considerare cu atenție imaginea rezultată, trebuie să utilizați capabilități speciale de vizionare în programul GtkWave. Iată câteva sfaturi utile: Un alt sfat: GtkWave poate afișa semnal analogic scalate în înălțime, cu toate probele de timp de simulare sau luând în considerare numai probe, care sunt plasate în fereastra. Dacă introduceți formatul de date =\u003e Analog =\u003e Redimensionarea =\u003e datelor pe ecran, care este, în cazul în care scalarea verticală este de a lua în considerare numai eșantionul este plasat în fereastra, puteți vedea lobii laterale ale caracteristicilor amplitudine-frecvență ale filtrului: Înapoi la început Filtre digitale (curs)
Prin tipul răspunsului la impuls, filtrele digitale sunt împărțite în două clase mari: ·
Compilez:
\u003e iverilog -o qqq testbench.v fir.v
Simt:
\u003e vvp qqq
Mă uit la diagramele timpului din GtkWave:
\u003e gtkwave out.vcd
Filtrele FIR se caracterizează prin expresia:
· Filtrele cu răspuns impulsuri infinite (filtre IIR, filtre recursive) utilizează una sau mai multe ieșiri ca intrări, adică formează un feedback. Proprietatea principală a unor astfel de filtre este că răspunsul lor la impuls are o lungime infinită în domeniul timpului, iar funcția de transfer are o formă fracțional-rațională.
Filtrele IIR se caracterizează prin expresia:
Diferența dintre filtrele FIR și filtrele IIR este că în filtrele FIR ieșirea depinde de semnalele de intrare, iar pentru filtrele IIR răspunsul la ieșire depinde de valoarea curentă.
Caracteristica impulsului Este răspunsul circuitului la un singur semnal.
E semnal dinichny este definit după cum urmează:
În acest fel, semnalul unic la un punct este egal cu unul la origine.
Deținuții e semnal dinichny este definit după cum urmează:
Astfel, deținutul un singur semnal de întârzierek.
Semnale și spectre
Dualitatea (dualitatea) reprezentării semnalului.
Toate semnalele pot fi reprezentate în planul de timp sau de frecvență.
În plus, există mai multe planuri de frecvență.
Planul timpului. |
Conversie. |
Frecventa avionului. |
Pentru a vedea semnalul în planul de timp, există un dispozitiv: Imaginați-vă că există un semnal sinusoidal suficient de lung (în 1 secundă de 1000 de ori se repetă valul sinusoidal): Să luăm un semnal cu o frecvență de două ori mai mare: Să combinăm aceste semnale. Nu avem un sinusoid, ci un semnal distorsionat: |
Transformările de la planul de timp la planul de frecvență sunt realizate folosind transformări Fourier. |
Pentru a vizualiza semnalul în planul de frecvență, există un dispozitiv: Frecvența ciclică sau circulară ( f ). Planul de frecvență va afișa o notă: Dimensiunea crestăturii este proporțională cu amplitudinea sinusoidului, iar frecvența: f 1 = Pentru al doilea semnal, domeniul de frecvență va afișa o altă notă: În domeniul temporal al semnalului total, vor apărea 2 crestături: |
Ambele reprezentări ale semnalului sunt echivalente și utilizează fie prima, fie o altă reprezentare, în funcție de care este mai convenabil.
Transformările de la planul de timp la planul de frecvență pot fi efectuate în mai multe moduri. De exemplu: folosind transformări Laplace sau folosind transformări Fourier.
Trei forme de înregistrare a seriei Fourier.
Există trei forme de înregistrare a seriei Fourier:
· Forma sinusoidală.
· Forma reală.
· Forma complexă.
1.) În forma sinuso-cosinus Seria Fourier are forma:
Frecvențele multiple din formula kω 1 sunt numite armonici; Armonicile sunt numerotate conform indicelui k; frecvența ω k =kω 1 este numit karmonic al semnalului.
Această expresie sugerează următoarele: orice funcție periodică poate fi reprezentată ca o sumă de armonici, unde:
unde
T - perioada de repetare a acestei funcții;
ω este frecvența circulară.
, unde
t- timpul curent;
T- perioada.
Pentru expansiunea Fourier, cea mai importantă este periodicitatea. Datorită acesteia există o discretizare în frecvență, unele armonice începe.
Pentru a stabili posibilitatea unei extinderi trigonometrice pentru o funcție periodică dată, trebuie să pornim de la un anumit set de coeficienți. Recepția pentru definirea lor a fost inventată în a doua jumătate a secolului al XVIII-lea de Euler și, independent de el, la începutul secolului XIX - Fourier.
Trei formule Euler pentru determinarea coeficienților:
; ;
Formulele lui Euler nu au nevoie de nici o dovadă. Aceste formule sunt precise pentru un număr infinit de armonici. Seria Fourier este o serie trunchiată de atunci nu există un număr infinit de armonici. Coeficientul seriei trunchiate se calculează cu aceleași formule ca și pentru seria completă. În acest caz, eroarea medie pătrată este minimă.
Puterea armonicilor scade odată cu creșterea numărului acestora. Dacă adăugați / picătură unele componente armonice, atunci restul membrilor (alte armonici) nu sunt recalculate.
Practic toate funcțiile sunt chiar sau ciudate:
FUNCȚIA VIITORĂ |
ALTE FUNCȚII |
Caracterizată de ecuația: De exemplu, funcția Cos: în care: t = -t Funcția uniformă este simetrică cu privire la axa de ordonate. Dacă funcția este uniformă, atunci toate sunt sine coeficienţii b kva fi zero și în formula seriei Fourier va fi numai cosinus termeni. |
Caracterizată de ecuația: De exemplu, funcția păcat: Funcția ciudată este simetrică față de centru. Dacă funcția este ciudată, atunci toți coeficienții cosinus a kva fi zero și în formula seriei Fourier va fi numai sinus termeni. |
2.) Forma reală din seria Fourier.
Unele inconveniente ale formulei sinus-cosinus din seria Fourier sunt că pentru fiecare valoare a indicelui de sumare k (adică pentru fiecare armonică cu frecvența kω 1) în formula există doi termeni - un sinus și un cosinus. Folosind formulele transformărilor trigonometrice, suma acestor doi termeni poate fi transformată într-un cosinus de aceeași frecvență cu o amplitudine diferită și o fază inițială:
, unde
;
În cazul în care S(t) este o funcție uniformă, faza φ pot lua doar valorile 0 și π , și dacă S(t) - funcția este impare, apoi valorile posibile pentru fază φ sunt egale + π /2.
3.) Forma complexă din seria Fourier.
Această formă de reprezentare a seriei Fourier este, probabil, cea mai frecvent utilizată în domeniul radiotehnicii. Se obține din forma reală reprezentând cosinusul sub forma unei jumătăți de exponențiali complexe (o astfel de reprezentare rezultă din formula lui Euler e jθ = Cosθ + jSinθ):
Aplicând această transformare la forma reală a seriei Fourier, obținem sumele de exponențiali complexe cu exponenți pozitivi și negativi:
Și acum vom trata exponenții cu un semn minus în exponent ca membri ai unei serii cu numere negative. În cadrul aceleiași abordări generale, summa constantă o 0/2 devine membru al liniei cu numărul zero. Ca rezultat, obținem o formă complexă a seriei Fourier:
Formula de calcul a coeficienților C k Seria Fourier:
În cazul în care S(t) este chiar funcție, coeficienții din serie C kva fi curat real, și dacă S(t) este o funcție ciudat, coeficienții seriei se dovedesc a fi pur imaginar.
Setul de amplitudini ale armonicilor seriei Fourier este adesea numit spectrul de amplitudine, și totalitatea fazelor lor - spectru de fază.
Spectrul de amplitudine reprezintă partea reală a coeficienților C k Seria Fourier:
Re ( C k) Este spectrul de amplitudine.
Spectrul de semnale rectangulare.
Luați în considerare un semnal sub forma unei secvențe de impulsuri dreptunghiulare cu o amplitudine A, durata τ și perioada de repetare T. Începutul numărării timpului va fi luat în mijlocul pulsului.
Acest semnal este o funcție uniformă, astfel încât pentru reprezentarea sa este mai convenabil să se utilizeze forma sine-cosinus din seria Fourier - numai termenii cosinus vor fi prezenți în ea a k, egală cu:
Din formula se poate observa că durata impulsurilor și perioada de urmărire nu sunt incluse în ea, ci exclusiv sub forma unei relații. Acest parametru - raportul perioadei la durata impulsurilor - este apelat ciclu de funcționare secvențe de impulsuri și notate cu litera: T/ τ. Introducem acest parametru în formula rezultată pentru coeficienții seriei Fourier și apoi reducem formula la forma Sin (x) / x:
Notă: În literatura străină, în locul ciclului de sarcină se folosește o valoare inversă, numită ciclu de sarcină și egală cu τ / T.
Cu această formă de înregistrare, se poate vedea în mod clar care este valoarea termenului constant al seriei: x → 0Sin ( x)/x → 1, atunci
Acum, putem scrie și reprezentarea secvenței impulsurilor dreptunghiulare sub forma unei serii Fourier:
Amplitudinile termenilor armonici ai seriei depind de numărul armonic în conformitate cu legea Sin ( x)/x.
Graficul grafic al funcției Sin ( x)/xare un caracter petale. Vorbind despre lățimea acestor lobi, trebuie subliniat faptul că pentru cele două posibile spectre de calibrare axa orizontală semnalelor discrete periodice ale graficelor - în număr de armonici și frecvențele.
În figură, gradarea axei corespunde numărului de armonici, iar parametrii de frecvență ai spectrului sunt reprezentați pe grafic folosind liniile dimensionale.
Deci, lățimea petalelor, măsurată în numărul de armonici, este egală cu ciclul de sarcină al secvenței k = ngnoi avem păcat (π k /g) = 0 dacă n≠ 0). Din aceasta rezultă proprietatea importantă a spectrului unei secvențe de impulsuri dreptunghiulare: nu există armonici cu multiplii zero (amplitudini zero) cu multipli multiplicitate.
Distanța de frecvență dintre armonicii învecinate este egală cu rata de repetare a impulsurilor - 2 π /T. Lățimea petalelor spectrului, măsurată în unități de frecvență, este de 2 π /τ , Ie invers proporțional cu durata impulsului. Aceasta este o manifestare a legii generale - cu cât semnalul este mai scurt, cu atât este mai larg spectrul.
concluzie : pentru orice semnal, sunt cunoscute extinderile din seria Fourier. cunoaștere τ și T putem calcula câte armonice sunt necesare pentru a transmite puterea.
Metode de analiză a sistemelor liniare cu coeficienți constanți.
Sarcina în producție:
Există un sistem liniar (nu depinde de amplitudinea semnalului):
Este necesar să notăm ecuația diferențială pentru acest sistem.
Aceasta este o sarcină tipică de inginerie electrică. Există o modalitate puternică de a rezolva această problemă în domeniul timpului.
Într-o viziune generală:
Ordinea ecuației depinde de numărul elementelor reactive.
Acesta poate fi scris sub forma unui sistem de ecuații de gradul I.
exemplu :
U R = IR
U C =
I = C
U R + U C = X (t)
RC +U C =X (t)
U C - este Y ieșire, prin urmare: RC +U OUT. =X (t)
Soluția ulterioară reduce la rezolvarea în primul rând a ecuației omogene și apoi a ecuației non-omogene.
Această soluție este ușor simplificată atunci când se trece de la un plan temporar la altul al unei variabile complexe. Traducerea de la planul de timp la planul complex este realizată printr-o transformare directă Laplace.
RCY " + Y = X(t)
Ecuația diferenței este calculată.
Transformarea directă Laplace.
Transformarea Laplace este o transformare integrală care leagă funcția S(p) unei variabile complexe ( imagine) cu funcție s(x) a variabilei reale ( originalul).
Transformările Laplace joacă un rol foarte important în investigarea sistemelor descrise de ecuațiile diferențiale liniare. Folosind transformarea directă Laplace, putem trece de la ecuații diferențiale la cele algebrice, le putem rezolva în formă algebrică și apoi vom folosi transformarea inversă pentru a obține rezultatul dorit. Un rezultat similar este obținut la rezolvarea ecuațiilor diferențiale liniare atunci când se utilizează aparatul de transformare Z.
Transformarea directă Laplace se realizează conform formulei: , unde este o variabilă complexă, unde σ - atenuarea.
exemplu :
Este apelat răspunsul sistemului la funcția delta introdus în intrare puls trăsătură sistem.
Este chemat răspunsul sistemului la funcția unui singur salt alocat la intrare caracteristică de tranziție.
Derivatul de timp al unei funcții este multiplicarea acestei funcții prin p:
Un element integrat al unei anumite funcții este împărțirea acestei funcții p:
În conformitate cu aceasta, expresia: RCY " + Y = X(t) vor fi scrise astfel: RCPY + Y = X(p)
Rezolvarea rudei Y, obținem: Y (RCP + 1)= X(p)
Coeficientul de transfer al acestei ecuații este:
În planul unei variabile complexe, aceasta este:
aici XP- luată ca funcție de unitate de testare. Deci, acesta este răspunsul impulsului din P-domain.
Nu există variabile în numărător. Rădăcinile numărătorului sunt numite zerouri funcții de transfer.
La zero puncte, funcția de transfer este zero, iar la punctele polilor funcția de transfer tinde spre infinit.
Frecvența complexă în planul unei variabile complexe este cea mai simplă modalitate de a testa stabilitatea unui sistem. Se numește sistemul stabil, dacă la semnalul de intrare zero semnalul de ieșire se descompune în orice condiții inițiale. Un sistem liniar este stabil dacă și numai dacă polii funcției sale de transfer se află în jumătatea planeă stângă complexă.
Transformarea Fourier.
Transformarea Fourier asociază un semnal, dat în timp, cu funcția sa spectrală. În acest caz, o tranziție de la domeniul de timp în frecvență.
Transformarea Fourier furnizează o bază pentru obținerea caracteristicilor frecvenței și fazei (dorim să obținem plicul spectrului). Transformarea Fourier este un caz special de transformare Laplace sub σ = 0.
De exemplu:
Obținem caracteristicile de frecvență și fază pentru lanțul simplu considerat mai sus, pentru care coeficientul de transmisie este:
Transformarea Fourier diferă de transformarea Laplace prin aceea că are: p = jω, astfel încât expresia noastră va avea următoarea formă:
Răspunsul la frecvență este dependența modulului coeficientului de transmisie de frecvență.
Înmulțim numitorul și numitorul acestei fracțiuni cu numărul complex (1- jωRC) (presupunând că valoarea fracțiunii nu se schimbă de la aceasta):
Prin urmare, modulul coeficientului de transmisie este dat de:
La zero, modulul coeficientului de transmisie este unitatea și cu frecvență în creștere începe să scadă:
Pentru două valori, PFC va arăta astfel:
Astfel, pentru analiza unui sistem, este necesar să se construiască toate caracteristicile.
Transformarea Laplace discret.
Totul considerat anterior - legat de funcțiile continue. Dacă într-o funcție continuă în loc de t substitut kT și în loc de înlocuitor integral suma, atunci există o transformare Laplace.
Transformarea Laplace este utilizată în domeniul sistemelor de control al computerului. Transformarea discrete Laplace poate fi aplicată la funcțiile de latură.O funcție lattice este o funcție a cărei valori sunt determinate numai la momente discrete ale timpuluikT, unde k este un număr întreg, și Tperioada de eșantionare.
Transformarea discretă Laplace face posibilă înregistrarea coeficientului de transmisie. distingeD - transformarea șiZ -Fourier.
D – transformare :
Z - conversie:
Transformarea Z transformă jumătatea avionului într-un alt plan Z. Z-transformare Aceasta este transformarea Laplace a funcției de zăbrere, care este produsă prin schimbarea variabilelor:
Înmulțirea cu Z -1 este o schimbare pentru o perioadă de eșantionare.
Să luăm expresia originală din care am pornit:
Prin urmare, procedura de calcul este redactată după cum urmează:
Conform proprietăților de z-transforma, secvența de întârziere discret de un ciclu de ceas corespunde multiplicării sale z transformata pe z elemente de memorie -1.Poetomu care transportă o astfel de întârziere, sunt indicate în diagrama bloc ca «z -1».
Este apelat numărul de eșantioane anterioare utilizate ordinea filtrului.
Un număr de eșantioane anterioare ale semnalului de intrare sunt stocate în celulele de memorie care formează o linie de întârziere discretă. Aceste probe se înmulțesc cu coeficienții bk și se sumează, formând o probă de ieșire y (n).
Deoarece calculele nu utilizează probele anterioare producție semnal, nu există feedback în circuit. Prin urmare, se solicită astfel de filtre non-recursivă. Când se aplică un singur impuls la intrare, acesta se va deplasa de-a lungul liniei de întârziere, se înmulțește cu coeficiențiib 0 , b 1 , b 2 ... și să treacă la ieșirea dispozitivului (la urma urmei, toate celelalte semnale de intrare ale agregatului sunt zero în același timp). Evident, într-un dispozitiv real, linia de întârziere conține un număr finit de elemente, deci răspunsul impuls al unui filtru nerecursiv este de asemenea final în funcție de durată. Acest lucru a dus la un alt nume pentru astfel de filtre: filtre cu răspunsul impulsului finit (Filtre FIR).
Structura software-ului pentru filtrul FIR:
Programul:
ORDFIL EQU 40; un filtru de ordinul 40.
BUFFER M, ORDFIL; verificați posibilitatea creării unui buffer circular.
COEFFS: DS b 0, b 1, b 3
DSb4, b5, b6
…………………
DS b 37, VVOD EQU: FFC 0; determină porturile de intrare.
PORT _VIVOD EQU: FFC 1; determină porturile de ieșire.
ORG P: 0; organizarea memoriei P.
RESET: START JMP; trecerea necondiționată la marca START.
P: 100; programul va începe cu celula sute.
START: MOVE BUF _X, R 0; Adresa inițială X este introdusă în R 0.
MOVE # ORDFIL ─1, M0; trecerea la mod.ariff (numărul de rezervă este 1 element decât ordinea acestui buffer).
MOVE # COEFFS, R 4; Organizarea unui ciclu de tampon pentru coeficienți. în memoria Y.
MOVE # M 0, M 4; deoarece lungimea trebuie să se potrivească, apoi reintroduceți. de la M 0 la M 4.
RM la CALR; resetați bateria.
REP #ORDFIL; repetați funcționarea lanțului.
Mutați A, X: (R4) +; incrementare automată și toate celulele sunt tamponate.
LOOP: MOVEP Y: PORT _VVOD, X ─ (R 0); octet Transferul citirilor (last.multivn b 0).
REP #ORDFIL ─1; rep. (de 39 de ori fără rotunjire)
MAC X 0, Y 0, A X: (R 0) +, X 0Y: (R4) +, Y 0, inteligent X 0 până la Y 0, podg.sl.oper.
MACRX0, Y0, A
MOVEP A, Y: PORT _VIVOD; byte transfer de conținut. baterie.
JMP LOOP; săriți necondiționat la eticheta LOOP.
Ordinea de proiectare a filtrelor digitale.
Procedura de proiectare pentru filtrele digitale este în primul rând legată de tipul de filtru de pe linia de caracteristici de frecvență. Una dintre problemele care apar adesea în practică este crearea de filtre care transmit semnale într-o anumită bandă de frecvență și întârzie frecvențele rămase. Există patru tipuri:
1.) Filtre low pass (LPF, termen englez -filtru trece-jos ), care transmit frecvențe mai mici decât o anumită frecvență de cutoffω 0.
2.) Filtre de înaltă trecere (HPF, termen de engleză -filtru de trecere înaltă ), care transmit frecvențe mai mari decât o anumită frecvență cutoffω 0.
3.) Filtre de bandă (PF, termen engleză -band-pass filtru ), frecvențele de transmisie într-un anumit intervalω 1…. ω 2 (ele pot fi, de asemenea, caracterizate printr-o frecvență medieω 0 = (ω 1 + ω 2 ω = ω 2 – ω 1 ).
4.) Filtre Notch (alte nume posibile - filtru de blocare, filtru de filtre, filtru de oprire, termen englez -band-stop filtru ), trecând la ieșire toate frecvență, cu excepția cazului situată într-un anumit interval ω 1…. ω 2 (ele pot fi, de asemenea, caracterizate printr-o frecvență medieω 0 = (ω 1 + ω 2 ) / 2 și lățimea de bandă a lui Δ ω = ω 2 – ω 1 ).
Forma ideală a filtrelor AFC a acestor patru tipuri:
Cu toate acestea, o formă ideală (dreptunghiulară) a AFC nu poate fi realizată fizic. Prin urmare, în teoria filtrelor analogice, un număr de metode aproximațierectangular de frecvență de răspuns.
În plus, prin calcularea LPF, este posibilă modificarea frecvenței sale de cutoff prin transformări simple, transformându-l în filtru HPF, bandă sau filtru cu parametri specifici. Prin urmare, calculul filtrului analogic începe cu calculul așa-numitului filtru prototip, care este un filtru trece-jos, cu o frecvență de cutoff egală cu 1 rad / s.
1.) Butterworth Filtru:
Funcția de transfer a prototipului filtru Butterworth (Butterworth filtru ) nu are nici un zer, iar polii săi sunt dispuși uniforms-plan în jumătatea stângă a cercului de rază a unității.Pentru filtrul Butterworth, frecvența de cutoff este determinată de nivelul 1 /. Filtrul Butterworth oferă maxim plat vertex în passband. |
|
2.) Filtru Chebyshev de primul fel:
Funcția de transmisie a filtrului Chebyshev de primul tip (Chebyshev filtru de tip I ) nu are, de asemenea, nici un zer, iar stâlpii ei sunt localizați în jumătatea stângă a elipseisavionul. Pentru filtrul Chebyshev de primul fel, frecvența de cutoff este determinată de nivelul de pulsații din banda de trecere.Comparativ cu un filtru de același ordin de filtru Butterworth, Chebyshev prevede scădere mai abruptă în răspunsul de frecvență în tranziția de la banda de trecere la stopband. |
|
3.) Chebyshev filtru de al doilea fel:
Funcția de transmisie a filtrului Chebyshev de tipul celui de-al doilea (Chebyshev filtru de tip II ), spre deosebire de cazurile anterioare, are atât zerouri cât și poli. Filtrele Chebyshev de tipul celui de-al doilea sunt de asemenea numite filtre inverse Chebyshev (filtru invers Chebyshev ). Frecvența cutoff a filtrului Chebyshev de al doilea tip nu este sfârșitul benzii de trecere, dar începerea benzii de reținere. Coeficientul de transmisie al filtrului la frecvența zero este egal cu 1, la frecvența de cutoff - la un nivel specific de rupere în banda de întârziere. la ω → ∞ coeficientul de transmisie este zero pentru ordinea impar a filtrului, iar nivelul de infasurare este egal. la ω = 0 Răspunsul filtru Chebyshev de cel de-al doilea tip este maxim plat. |
|
4.) Filtre eliptice:
Filtre eliptice (filtre Cauer, termeni englezi -filtru eliptic, filtru Cauer ) Într-un sens combină filtrele proprietățile Chebyshev ale primului si al doilea fel, ca filtru are un răspuns de frecvență ondulație eliptic o valoare predeterminată, atât în banda de trecere și în banda oprită. Datorită acestui fapt, este posibil să se asigure o înclinație maximă posibilă (pentru o ordine fixă a filtrului) a rampei AFC, adică zonă de tranziție între bandă de trecere și întârziere. Funcția de transmisie a filtrului eliptic are atât polii cât și zerouri. Zeros, ca și în cazul filtrului Chebyshev de al doilea tip, sunt pur imaginare și formează perechi complexe de conjugate. Numărul de zerouri ale funcției de transfer este egal cu numărul maxim de par, care nu depășește ordinea filtrului. |
Funcțiile MATLAB Pentru a calcula filtrele Butterworth, Chebyshev de primul și al doilea tip, precum și filtrele eliptice, este posibil să se calculeze filtrele analogice și discrete. Funcțiile de calcul al filtrului necesită setarea ca parametri de intrare a ordinii filtrului și a frecvenței sale cutoff.
Ordinea filtrului depinde de:
- de la inegalitatea permisă în lățimea de bandă
- din valoarea zonei de incertitudine. (Cu cât zona de incertitudine este mai mică, cu atât este mai scăzută scăderea răspunsului la frecvență).
pentru Filtrele FIR sunt câteva zeci sau sute, iar pentru filtrele IIR ordinea nu depășește mai multe unități.
Icoanele oferă posibilitatea de a privi toți coeficienții. Proiectarea filtrului se face într-o singură fereastră.
Un filtru cu un răspuns finit la impuls (filtru FIR, filtrul FIR, FIR-filtru) - un tip de filtre electronice liniare trăsătură caracteristică, care este timpul limitat al răspunsului la impuls (la un moment dat în timp devine exact egală cu zero). Un astfel de filtru este numit încă non-recursiv din cauza lipsei de feedback. Numitorul funcției de transfer a unui astfel de filtru este o anumită constantă. Filtre non-recursive. Pentru valorile zero ale coeficienților a m, ecuația (2.1.2) devine ecuația liniară discontinuă pentru funcția x (k) cu operatorul b n:
y (k) = b n x (k-n). (2.1.3)
Valorile numărului de ieșiri al convoluției (2.1.3) pentru orice argument k sunt determinate de valorile curente și "trecut" ale probelor de intrare. Un astfel de filtru este numit filtru digital non-recursiv (NCF). Intervalul de însumare pentru n este numit "fereastra" filtrului. Fereastra filtru este numărătoare N + 1, filtrul este cauzal unilateral, adică cauzate de valorile curente și "trecute" ale semnalului de intrare, iar semnalul de ieșire nu poate fi înaintea semnalului de intrare. Filtrul cauzal poate fi implementat fizic în timp real. Pentru k La procesarea datelor pe un computer, restricția privind cauzalitatea este eliminată. Software-ul poate fi în posesia filtru ca „trecut“ și „viitor“ valoare a secvenței de intrare a probelor în raport cu punctul curent de calcul k, în care ecuația (2.1.3) va avea forma: y (k) = b n x (k-n). (2.1.4) Atunci când N "= N, filtrul este denumit simetric față-verso." Filtrele simetrice, spre deosebire de filtrele cu sens unic, nu modifică faza semnalului care este procesat. Deoarece reacția NTSF intrarea unității de impuls (precum și orice semnal de intrare arbitrar) este întotdeauna finită și limitată de dimensiunea ferestrei de filtrare, aceste filtre sunt de asemenea denumite filtre cu răspuns finit la impuls (FIR filtre). Tehnica de efectuare a filtrării nu diferă de tehnica de realizare a convoluției discrete convenționale a două seturi de date. Setare: Pentru a studia principalele prevederi ale lanțurilor pe filtrele FIR. Faceți un calcul preliminar, răspundeți în scris la întrebări pentru auto-examinare. Efectuați un calcul preliminar. Asamblați circuitul 1, care include o sursă de impuls de tensiune, un filtru FIR cu trei legături. Construiți un AFC al unui filtru FIR de patru niveluri. (Schimbați formula H (z)) Construiți un AFC al unui filtru FIR cu cinci legături. (Schimbați formula H (z)) Se potrivesc graficele obținute în calculul preliminar cu graficele obținute în programul Micro-Cap. Pentru a trage o concluzie. Calcul preliminar: experiment: Vom colecta circuitul 1, care include o sursă de tensiune de comutare, un filtru FIR cu trei niveluri. Construiți un AFC al unui filtru FIR de trei niveluri. Construiți un AFC al unui filtru FIR de patru niveluri. Construiți un AFC al unui filtru FIR de trei niveluri. concluzie: În acest laborator, caracteristicile principale de timp și frecvență ale filtrelor cu răspuns impuls finit (filtre FIR) au fost obținute utilizând programul Micro-Cap. Pentru circuitul 1, incluzând o sursă de tensiune pulsată, filtrul FIR a fost obținut prin răspunsul filtrului, cu un număr diferit de legături. Curbele obținute experimental s-au dovedit a fi egale cu curbele obținute în calculul preliminar.