Anbieter zum Thema
Der Cortex-M4 verfügt über eine Reihe von Befehlen, die DSP-Algorithmen effizient unterstützen. Einige Befehle sind verfügbar für die sättigende Addition und Subtraktion von 8-, 16- und 32-Bit-Werten; QADD8, QSUB8, QADD16, QSUB16, QADD und QSUB. Die meisten DSP-Algorithmen hängen stark vom Additionsergebnis einer langen Serie von Multiplikationen ab.
Multiplikation und Addierung in einem einzigen Befehl
Dies trifft zu auf FIR- und IIR-Filter, aber auch auf komplexe Algorithmen wie FFT (Fast Fourier Transform) und DCT (Discrete Cosine Transform). Die Durchführung der Multiplikation und Addierung in einem einzigen Befehl ist der Schlüssel zu hoher Leistungsfähigkeit. Hier einige der Cortex-M4-MAC-Befehle:
- SMLA – für Q15-Berechnungen; erlaubt die Funktion 32Bit += 16Bit*16Bit
- SMLAL – für Q31-Berechnungen; erlaubt die Funktion 64 += 32*32. Möglich ist auch die Variante des SMLAL-Befehls zur Durchführung der Funktion 64 += 16*16
Die Verfügbarkeit von geeigneten Befehlen für die Implementierung von DSP-Algorithmen ist ein echter Vorzug des Cortex-M4. Für eine höhere Leistung ist es auch erstrebenswert, mehrere Funktionen gleichzeitig durchzuführen. So können MAC-Befehle in einem einzigen Zyklus gleichzeitig Multiplizieren und Addieren. Zusätzlich können mit Hilfe von SIMD (Single Instruction Multiple Data) mehrere identische Funktionen mit einem einzigen Befehl durchführt werden.
Die zwei gängigsten Digital-Filter sind FIR (Finite Impulse Response) und IIR (Infinite Impulse Response).
- FIR-Filter benötigen kein Feedback und sind daher eigenstabil.
- IIR-Filter benötigten Feedback und können daher instabil werden, wenn sie nicht richtig angelegt sind. IIR-Filter werden für die Implementierung bekannter Analog-Filter wie Butterworth, Chebyshev oder Bessel verwendet.
Die Transformation ist eine Funktion, die Daten von ihrem ursprünglichen Bereich auf einen anderen Bereich abbildet. Beispiele sind FFT und DCT. Transformationen sind rechenintensiv, insbesondere für große Input-Vektoren/Matrizen. Die Leistung kann aber durch den Einsatz von Cortex-M4 DSP-spezifischen Befehlen erheblich gesteigert werden.
Filter- und Transformations-Algorithmen
Der „ARM Cortex Microcontroller Software Interface Standard“ (CMSIS) ist eine Anbieter-unabhängige Hardware-Abstraktionsebene für alle Einrichtungen auf Basis eines Cortex-M-Prozessors. Die Idee der CMSIS ist es, ein konsistentes und einfaches Software-Interface für die Anbindung von Peripherie, Echtzeit-Betriebssystemen und Middleware an den Prozessor anzubieten, die Wiederverwendung von Software zu vereinfachen und den Lernprozess für neue Mikrocontroller-Entwickler zu verkürzen.
Jeder CMSIS-kompatible C-Compiler unterstützt die von ARM definierten Cortex-M4-Erweiterungen, d.h., dass durch den Einsatz eines CMSIS-kompatiblen Compilers die DSP-bezogenen intrinsischen Funktionen entsprechend dem Standard benannt werden und der Code zwischen verschiedenen Compilern portierbar ist.
Eine Möglichkeit zur Implementierung von DSP-Funktionen wäre, die Algorithmen im Assembler zu schreiben. Das kann zu einer sehr hohen Leistung führen, wenn es um eine schnelle und effiziente Ausführung geht, aber die Optimierung ist kompliziert und verlängert die Entwicklungszeit. Eine weitere Alternative ist die Implementierung von DSP-Algorithmen in C oder C++. Der Cortex-M4-Prozessor kann vollständig in C programmiert werden. Dieser Code ist einfach zu schreiben, zu pflegen und lässt sich auch einfach portieren.
Implementierung von DSP-Algorithmen
Die C-Programmiersprache verfügt über keinen speziellen Support, um sättigende Arithmetik auszudrücken, so dass INT_MAX + n = INT_ MAX und INT_MIN – n = INT_MIN sind. Der Vorgang kann wie folgt dargestellt werden:
uint16_t saturating_16bit_add(uint16_t a, uint16_t b)
uint16_t result = a + b;
if (((a ^ b) & 0x8000) == 0)
{
if ((result ^ a) & 0x8000)
{
result = (a < 0) ? 0x8000 : 0x7fff;
}
}
return result;
Lesen Sie weiter: Standardisierte DSP-Bibliotheken nutzen
Artikelfiles und Artikellinks
(ID:29059840)