Biblioteka DSP dla mikrokontrolerów LPC1700 i LPC1300 firmy NXP

Wydajność obliczeń filtru przedstawiono w tabeli 9.

 

Tab. 9. Filtr FIR

  Mnożnik zegara pamięci 1 Mnożnik zegara pamięci 2 Mnożnik zegara pamięci 3
  (20 MHz maks.) (40 MHz maks.) (60 MHz maks.)
  Cykle Czas (μs) Cykle Czas (μs) Cykle Czas (μs)
32 próbki i współczynniki 3433 171,650 3455 86,125 3470 57,833
  Mnożnik zegara pamięci 4 Mnożnik zegara pamięci 5 Mnożnik zegara pamięci 6
  (80 MHz maks.) (100 MHz maks.) (120 MHz maks.)
  Cykle Czas (μs) Cykle Czas (μs) Cykle Czas (μs)
32 próbki i współczynniki 3495 43,688 3520 35,200 3520 29,333

 

Rezonator (oscylator)

Funkcja rezonatora jest bardzo ekonomicznym sposobem generowania sygnału sinusoidalnego – bez potrzeby korzystania z tablic lub przybliżeń funkcji trygonometrycznych. Co istotne, algorytm ten jest jedynie specjalnym przypadkiem wykorzystania sekcji bikwadratowej, jednak ze współczynnikami licznika równymi zero i dwoma biegunami leżącymi na okręgu jednostkowym, dzięki czemu układ oscyluje.

Wzór opisujący rezonator za pomocą funkcji czasu dyskretnego:

 

 

 

 

Reprezentacja w dziedzinie zmiennej zespolonej Z:

 

 

 

 

Odwoływanie się do rezonatora:

typedef struct

{

int i_C oeff_a1;

int i_yn_1;

int i_yn_2;

}tS_ResonatorStateCoeff;

void vF_dspl_resonator(int *psi_Output, void *pS_ResonatorStateCoeff, int i_NSamples);

Ponieważ algorytm rezonatora jest rekurencyjny, należy zwrócić szczególną uwagę na skalowanie parametrów. Współczynniki i stan rezonatora należy ustawić następująco:

i_Coeff_a1 = 2.0 * cos(Omega) * pow(2.0,14)

By rozpocząć oscylacje, należy ustawić następujący stan początkowy:

i_yn_1 = 0;

i_yn_2 = -Amplitude * sin(Omega) * pow(2.0,14)

gdzie:

Omega – częstotliwość jako ułamek częstotliwości próbkowania
Amplitude – zadana amplituda sygnału. Musi być mniejsza od 2,0 z powodu stosowania arytmetyki '2.14′.

Format liczbowy '2.14′ został użyty, ponieważ współczynnik a1 jest większy, niż 1, a pojedynczy cykl mnożenia gwarantuje brak przepełnienia tylko, jeśli mnożnik i mnożna są 16-bitowe.

Wydajność obliczeń przedstawiono w tabeli 10.

 

Tab. 10. Rezonator

  Mnożnik zegara pamięci 1 Mnożnik zegara pamięci 2 Mnożnik zegara pamięci 3
Rezonator (20 MHz maks.) (40 MHz maks.) (60 MHz maks.)
  Cykle Czas (μs) Cykle Czas (μs) Cykle Czas (μs)
512 próbek 5153 257,650 5157 128,925 5161 86,017
  Mnożnik zegara pamięci 4 Mnożnik zegara pamięci 5 Mnożnik zegara pamięci 6
Rezonator (80 MHz maks.) (100 MHz maks.) (120 MHz maks.)
  Cykle Czas (μs) Cykle Czas (μs) Cykle Czas (μs)
512 próbek 5166 64,575 5172 51,720 5172 43,100

 

Kontrola PID

Algorytm PID (’ Proportional, Integral, Differential ’) jest powszechnie wykorzystywany, gdyż zapewnia bardzo umiarkowane zużycie procesora.

Równanie czasu dyskretnego PID:

 

 

 

 

Wywoływanie funkcji kontroli PID:

typedef struct

{

short int Kp;

short int Ki;

short int Kd;

short int IntegratedError;

short int LastError;

}tS_pid_Coeff;

short int vF_dspl_pid(short int si_Error, tS_pid_Coeff *pS_Coeff);

Do pobrania

O autorze