ich bin neu hier im Forum und daher weiß ich leider nicht ob ich hier richtig bin :/
Zu meinem Problem.
Ich soll als Aufgabe einen Echtzeit Fir-Filter in MatLab realisieren.
Ich habe mir natürlich schon viel Gednaken darüber gemacht und stundenlang den Kopf zerbrochen. Irgendwo muss ich einen Denkfehler haben, da das Ergebnis was ich von meiner Funktion zurückgegeben bekomme nicht der Erwartung entspricht.
Hier erstmal das .m-file mit der Funktion myFIR_1810811
Code:
% Ergebnis : y = b0*x[k] + b1*x[k-1] + b2*x[k-2] + b3*x[k-3] + ... + bn*x[k-n] % -- % Übergabe Parameter : % --> b ist ein Vektor der transversalen Filterkoeffizienten ! % --> x ist aktueller Eingangssignal-Wert x[k] % --> zi ist Vektor / initialer Verzögerungspuffer mit Eingangssignal-Werten der Vergangenheit => zi = ( x[k-1], x[k-2], x[k-3], ... , x[k-(N-1)] ) % RückgabeWerte : % --> y ist AusgangsSignal % --> zf ist Vektor. Diskrete Eingangssignal-Werte => zf = ( x[k], x[k-1], x[k-2], ... , x[k-(N-2)] ) % function[y, zf] = myFIR_1810811(b, x, zi)
y = b .*[x, zi]'; %%% .* -Operator anstatt * -Operator
zf = [ x, zi(1:end-1)];
% Unit-Test % Folgende Beispiele wurden getestet und Anschauungsmaterial befindet % sich im Ordner Anhang. Im folgenden bedeutet '^^' soviel wie 'und / mit' % -- % Beispiel 1. b = [ 1 1 ] ^^ x = [ 1 2 3 ] --> Ergebnis y = [ 1 3 5 3 ]
ich habe gerade auf Deinen Beitrag gestoßen, da ich Infos zum Echtzeitfilterprogrammierung suche.
Meine Aufgabe lautet: "Programmieren Sie ein echtzeitfähiges FIR-Filter und ein Hauptprogramm zum Testen der Funktion."
Konntest Du deine Programmierung des Echtzeitfilters erfolgreich realisieren? Hat es geklappt?
Ich wäre Dir sehr dankbar, für einige Infos oder Deine Lösung.
Dies wird mir sicherlich bei Bearbeitung meiner Aufgabe weiterhelfen.
habe es damals noch mehr oder weniger hinbekommen.
Leider habe ich nicht mehr die Lösung, aber sollte ungefähr so gewesen sein:
% Übergabe Parameter :
% --> b ist ein Vektor mit N transversalen Filterkoeffizienten !
% --> x ist aktueller Eingangssignal-Wert x[k]
% --> zi ist Vektor / initialer Verzögerungspuffer mit Eingangssignal-Werten der Vergangenheit => zi = ( x[k-1], x[k-2], x[k-3], ... , x[k-(N-1)] ). ( Das sind insgesamt N-1 Werte).
% RückgabeWerte :
% --> y ist AusgangsSignal
% --> zf ist Vektor. Diskrete Eingangssignal-Werte => zf = ( x[k], x[k-1], x[k-2], ... , x[k-(N-2)] ) ´. Sozusagen der Buffer nach dem Filtern.
if length(b) > 1
y=[x,zi]*b'; % Hier wird gefiltert
zi=[xk,zi(1:end-1)]; % Hier wird der neue Buffer initialisiert.
zf = zi;
else
y = xk*b;
end;
Probier mal einen einfachen Differenzierer aus. also b=[1 -1]; und einen EingangsVektor = [ 0 0 0 0 1 1 1 1 1 0 0 0 0 ];
Der sollte die 0 1 bzw. 1 0 Übergänge erkennen und wenn du ein subplot mit stem machst sollte ein positiver und ein negativer Dirac als Ergebnis heraus kommen.
Hoffe ich konnte dir helfen.
Viel Erfolg bei deiner Aufgabe
Hi,
danke für die hilfreichen Hinweise! Mein echtzeitfähiges FIR-Filter funktioniert.
Ich habe jetzt ein adaptives FIR-Filter realisiert.
Weiß du, wie man ein Programm zum Testen erstellen kann?
y = zeros(size(x));
e = [];
N = length(w);
d = [zeros(1, N+v-1), x]; % desired Signal
w = fliplr(w);
for k = 1:length(x)
xk = d(k:k+(N-1));
y(k) = w * xk';
e(k) = x(k) - y(k);
w = w + s * e(k) * xk;
end
Wünsche noch eine gute und gesunde Woche!
Viele Grüße
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.