You are here

Projekt 27 - Qucs

Mit Hilfe von Qucs (Quite Universal Circuit Simulator) kann das Ergebnis einer Schaltungssimulation mit einer Scriptsprache nachverarbeitet werden. Somit kann man z.B. echte Messdaten eines Sensors mit dem Schaltungssimulator analog aufbereiten (verstärken, filtern, ...) und danach mit Hilfe der Scriptsprache direkt Controler-mäßig verarbeiten.

Die Programme findet man unter http://qucs.sourceforge.net/ und https://www.gnu.org/software/octave/. Qucs muss man nur entpacken und kann ohne Installation gestartet werden (qucs.bat). Der Projekt-Ordner wird automatisch unter "C:\Users\xxx\.qucs\" angelegt. Octave wird mit Hilfe des Installers installiert und legt danach ein Icon für die eigene Oberfläche am Desktop an. Damit Qucs die Octave Umgebung findet muss sie noch in den Einstellungen eingetragen werden. Dafür wird der Octave Pfad auf "C:\Octave\Octave-5.1.0.0\mingw64\bin\octave.bat" gesetzt.

Danach kann man bereits ein neues Projekt anlegen und den Schaltplan grafisch eingeben. Das Test-Projekt beinhaltet eine Datei basierende Spannungsquelle. Somit kann man das Signal durch die Daten einer csv-Datei vorgeben. Um die gewünschten Signale anschließend wiederzufinden werden noch Labels gesetzt.

Mit Hilfe des Data Displays können die Ergebnisse der Schaltungssimulation betrachtet werden.

Das Octave Post-Processing Script kann unter den Schematic Einstellungen (Rechts-Klick > Document Settings) eingetragen werden. Des Weiteren kann hier auch das automatische Abarbeiten des Scripts ausgewählt werden.

Mit Hilfe von Qucs Funktionen können die Simulationsergebnisse eingelesen werden (loadQucsDataSet, getQucsVariable). Die weitere Verarbeitung kann mit dem Octave-Syntax und Funktionen erfolgen (sehr ähnlich zu Matlab).

% testing of Octave post processing
 
function void = test()
    % threshold parameters
    thr_ris = 0.5;               % rising threshold
    thr_fal = 0.2;               % falling threshold
 
 
    data = loadQucsDataSet("test.dat");
 
    if isempty(data)
        printf("no data available");
    else
        %showQucsDataSet(data);
 
        time = getQucsVariable(data, "time");
        sgnl = getQucsVariable(data, "Uout.Vt");
 
        % show filtered signal
        figure(1)
        AH(1) = subplot(4,1,1);
        plot(time, sgnl);
        grid on
 
 
        %% tresholding of signal with hysteresis
        sgnl_length = size(sgnl, 2);
        sgnl_ris = double(sgnl > thr_ris);
        sgnl_fal = double(sgnl < thr_fal);
 
        sgnl_ris_edg = sgnl_ris - circshift(sgnl_ris, [0 1]);
        sgnl_fal_edg = sgnl_fal - circshift(sgnl_fal, [0 1]);
 
        % show thresholded signal
        AH(3) = subplot(4,1,2);
        plot(time, sgnl_ris_edg);
        ylim([-0.5 1.5])
        grid on
 
        AH(3) = subplot(4,1,3);
        plot(time, sgnl_fal_edg);
        ylim([-0.5 1.5])
        grid on
 
 
        sgnl_edges = double(sgnl_ris_edg > 0) - ...
                     double(sgnl_fal_edg > 0);
        sgnl_thr = cumsum(sgnl_edges);
 
        while((max(sgnl_thr) > 1) || (min(sgnl_thr) < 0))
            first = find(sgnl_thr > 1, 1, 'first');
            if (size(first,2) > 0)
                sgnl_thr(1, first:sgnl_length) = ...
                    sgnl_thr(1, first:sgnl_length) - 1;
            end
 
            first = find(sgnl_thr < 0, 1, 'first');
            if (size(first,2) > 0)
                sgnl_thr(1, first:sgnl_length) = ...
                    sgnl_thr(1, first:sgnl_length) + 1;
            end
        end
 
        % show threshoulded signal
        AH(3) = subplot(4,1,4);
        plot(time, sgnl_thr);
        ylim([-0.5 1.5])
        grid on
 
 
    end
endfunction

Nach Eingabe eines Fehlerfreien Scripts kann die Ausgabe betrachtet werden. Falls die Ausgabe aus irgendeinem Grund hängen bleibt, kann man das Ausgabe Toolkit ändern. Bei Eingabe von "graphics_toolkit" erhält man das aktuell verwendete Toolkit (bei mir z.B. "ans = fltk"). Mit "graphics_toolkit('gnuplot')" stellt man auf gnuplot um.

 

AttachmentSize
Package icon Test Projekt - Source Dateien154.17 KB