Biblioteka DSP dla mikrokontrolerów LPC1700 i LPC1300 firmy NXP

 

Firma NXP opracowała bibliotekę DSP dla mikrokontrolerów z rdzeniem Cortex-M3: LPC1700 oraz LPC1300. Biblioteka ta jest zbiorem często używanych funkcji służących do cyfrowego przetwarzania sygnałów. Większość funkcji została zaimplementowana w języku asembler (instrukcje Thumb-2), o ile tylko zysk wydajności okazywał się wystarczający. Biblioteka jest dostarczana jako projekt biblioteki statycznej w kodzie LPCXpresso (Code Red), wersjach Keil i IR, a także może być zlinkowana w łańcuchu narzędzi ARM-EABI jako biblioteka binarna.

 

 

Funkcje DSP:

  • filtr bikwadratowy
  • Szybka transformata Fouriera (FFT)
  • Iloczyn skalarny
  • Operacje na wektorach
  • Filtr FIR (o skończonej odpowiedzi impulsowej)
  • Rezonator
  • Regulator PID
  • Generator liczb losowych

Każda zmienna i funkcja zawiera prefiks z liter wskazujących na typ. Niektóre przykłady zostały przedstawione poniżej:

  • vF – funkcja typu void
  • iF – funkcja zwracająca liczbę całkowitą
  • pi_x – wskaźnik na liczbę całkowitą
  • psi_x – wskaźnik na liczbę całkowitą ze znakiem
  • si_x – liczba całkowita ze znakiem
  • i_x – liczba całkowita
  • pS_x – wskaźnik na strukturę

Cortex-M3 ma kilka właściwości, dzięki którym oferuje doskonałą wydajność w przetwarzaniu sygnałów:

  • Mnożenie dwóch 32-bitowych liczb ze znakiem odbywa się w jednym cyklu
  • Operacja mnożenie z dodawaniem (MAC) liczb 32-bitowych ((32×32)+32) wykonywana jest w dwóch cyklach
  • Cortex-M3 ma architekturę Harvard, posiada zatem oddzielny dostęp do pamięci danych i pamięci instrukcji

 

Uwagi:

  • Każdy odczyt z rejestrem bazowym, taki jak LDR <rt>,[<rn>],#<imm8>   trwa dwa cykle z powodu konfliktu przy zapisie do banku portu i zapisem do rejestru w kolejnej instrukcji. Nieliczne wyjątki mogą wystąpić, gdy kolejna instrukcja nie zapisuje wyniku do banku rejestrów.
  • W bibliotece występują wersje 16- i 32-bitowe wielu algorytmów. Ponieważ Cortex-M3 jest zasadniczo architekturą 32-bitową, wykorzystanie wersji 16-bitowej daje niewielki lub wręcz żaden wzrost wydajności. Niektóre rdzenie ARM mają rozszerzenia DPS 'E’ lub rozszerzenia V6 SIMD, które skutecznie pozwalają wykorzystywać rejestry 32-bitowe jako pary rejestrów 16-bitowych.
  • Jedną z korzyści dla wydajności w wersji 16-bitowej mogłoby być zmniejszenie zajętości pamięci przez współczynniki i dane algorytmu, a także zmniejszenie przepustowości systemu, które pozwoli przynajmniej zaoszczędzić nieco mocy.
  • Algorytmy zostały zaimplementowane przy użyciu natywnych typów C, ’ int ’ oraz ’ short int ’. Mnożenie 32×32 spowoduje przepełnienie 32-bitowego wyniku, jeśli argumenty nie zostały odpowiednio przeskalowane przez użytkownika biblioteki.

 

Filtr bikwadratowy

Filtr bikwadratowy jest powszechnie używana jako filtr rzędu 2, który może być łączony kaskadowo w celu zbudowania filtru dowolnego rzędu. Bikwadratowa funkcja czasu dyskretnego:

 

 

 

 

Transmitancja w dziedzinie zmiennej zespolonej Z:

 

 

 

 

Implementacja została dokonana w postaci bezpośredniej typu II, która korzysta ze współdzielonego dwuelementowego wektora stanów.

Wywołanie funkcji:

void vF_dspl_biquad32(int *pi_Output, int *pi_Input, tS_biquad32_StateCoeff *pS_StateCoeff, int i_NSamples);

typedef struct

{

short int psi_Coeff[5];

short int psi_State[2];

}tS_biquad32_StateCoeff;

psi_Coeff to wartości ułamkowe w formacie '2.14′.

psi_State to wartości ułamkowe w formacie '2.14′, które mogą zostać zainicjalizowane zerem przy pierwszym wywołaniu, ale w trakcie procedury są uaktualniane, co pozwala na przetwarzanie przez filtr ciągu danych.

Wydajność filtru bikwadratowego przedstawiono w tabeli 1.

 

Tab. 1. Filtr bikwadratowy

Sekcja Mnożnik zegara pamięci 1 Mnożnik zegara pamięci 2 Mnożnik zegara pamięci 3
bikwadratowa (20 MHz maks.) (40 MHz maks.) (26 MHz maks.)
  Cykle Czas (μs) Cykle Czas (μs) Cykle Czas (μs)
32 próbki 626 31,300 631 15,775 636 10,600
Sekcja            
bikwadratowa 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.)
32 próbki 641 8,013 648 6,480 648 5,400

 

Do pobrania

O autorze