Berechnung einzelner Spektralwerte

Dieses Beispiel implementiert exemplarisch die Verwendungsmöglichkeiten des Funktionsbausteins FB_CMA_SparseSpectrum. Es werden verschiedene Fensterfunktionen und Skalierungen für die möglichen Berechnungen von DFT-, Magnituden- und Power-Werten vorgestellt. Numerische Effekte bei der Detektion werden in zwei Frequenzanteilen eines generierten Signals aufgezeigt: Die erste Frequenz entspricht einem Vielfachen der numerischen Auflösung im Spektralbereich, die Zweite liegt zwischen zwei solcher Werte.

Den Quellcode für das Beispiel können Sie hier herunterladen: SparseSpectrum_Sample.zip

Blockdiagramm

Berechnung einzelner Spektralwerte 1:

Programmparameter

Die Tabelle unten zeigt eine Liste mit den wichtigen Parametern für die Konfiguration der Funktionsbausteine.

FFT-Länge

2048 / 2048 / 2048

Fenstergröße

2048 / 2048 / 2048

Puffergröße

2048 / 1024 / 1024

Fenster Typ

eCM_RectangularWindow / eCM_HannWindow / eCM_HannWindow

Spaklierungsart

eCM_NoScaling / eCM_PeakAmplitude / eCM_PeakAmplitude

Typ der Spektralwerte

eCM_DFT / eCM_Magnitude / eCM_Power

Konfiguration der Frequenzbänder

In der GVL_Constants werden die zentralen Parameter für die Initialisierung des Algorithmus sowie die Eigenschaften des generierten Signals definiert.

VAR_GLOBAL CONSTANT
    cSampleRate   : LREAL := 10000;                                        // Sample rate of input signal.
    cWindowLength : UDINT := 2048;                                         // Internal buffer size with 50% overlapping
    cResolution   : LREAL := cSamplerate / cWindowLength;                  // Frequency resolution
    cBands        : UDINT := 2;                                            // Number of bands
    cSetFrequency : ARRAY[1..cBands] OF LREAL := [ 41*cResolution, 413 ];  // Frequency in Hz; [ exact, intermediate ]
    cSetAmplitude : ARRAY[1..cBands] OF LREAL := [ 1.0, 2.0 ];             // Peak amplitudes of sine signals
    cBandWidth    : UDINT := 5;                                            // Computed bins per frequency.
    cDFTBins      : UDINT := cBandWidth * cBands;                          // Number of spectral bins, cBandWidth bins per frequency
END_VAR

Das generierte Signal (MAIN.aBuffer) besteht aus zwei Frequenzkomponenten. Eine ist bezüglich der numerischen Auflösung gewählt, d.h. sie ist ein Vielfaches von f = 10000 Hz/2048 = 4,8828125 Hz. Die zweite ist so gewählt, dass der Peak zwischen zwei Spektralwerten liegt und somit nicht exakt dargestellt werden kann. Um die numerischen Effekte veranschaulichen zu können, werden um die jeweiligen gesuchten Spektralwerte weitere vier Werte berechnet. Die Konfiguration erfolgt in der MAIN_CM.

// Compute parameters, adjust if cDFTBins is changed.
FOR i := 1 TO cBands DO
    k := LREAL_TO_DINT(cSetFrequency[i] / cResolution);
    aDFTBins[(i-1) * cBandWidth + 1] := DINT_TO_UDINT(MAX(k-2,1));
    aDFTBins[(i-1) * cBandWidth + 2] := DINT_TO_UDINT(MAX(k-1,1));
    aDFTBins[(i-1) * cBandWidth + 3] := DINT_TO_UDINT(MIN(k+0,nyquist));
    aDFTBins[(i-1) * cBandWidth + 4] := DINT_TO_UDINT(MIN(k+1,nyquist));
    aDFTBins[(i-1) * cBandWidth + 5] := DINT_TO_UDINT(MIN(k+2,nyquist));
END_FOR

Visualisierung der Ergebnisse

Das Beispiel beinhaltet ein umfangreiches TwinCAT Measurement Projekt, in dem die berechneten Spektralwerte aus dem Baustein FB_CMA_SparseSpectrum den Referenzalgorithmen (FB_CMA_RealFFT, FB_CMA_MagnitudeSpectrum, FB_CMA_PowerSpectrum) gegenübergestellt sind. Es wird der Unterschied zwischen einer Anregung als vielfaches der numerischen Frequenzauflösung und einem Wert zwischen zwei solcher Werte verdeutlicht. Die visualisierten Frequenzbänder können als „Zoom“ auf den entspechenden Bereich angesehen werden.

Die folgenden Abbildungen zeigen die Ergebnisse für die Gegenüberstellung zu den Bausteinen FB_CMA_RealFFT und FB_CMA_MagnitudeSpectrum.

Berechnung einzelner Spektralwerte 2:

Spektrum des FB_RealFFT (oben) sowie die Spektralwerte der Bänder 1 (mitte) und 2 (unten).

Berechnung einzelner Spektralwerte 3:

Magnituden Spektrum des Bausteins FB_MagnitudeSpectrum (oben) sowie die Spektralwerte der Bänder 1 (mitte) und 2 (unten).

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken

TwinCAT v3.1.4022.25

PC or CX (x86, x64)

Tc3_CM, Tc3_CM_Base, Tc3_MultiArray