WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Implementierung eines Tiefpass 1.Ordnung

 

akki
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2013, 12:08     Titel: Implementierung eines Tiefpass 1.Ordnung
  Antworten mit Zitat      
Hallo Matlab-Freunde,

Ich muss in Matlab einen Tiefpassfilter 1.Ordnung implementieren.

Dazu habe ich eine Schaltung eines Tiefpassfilter 1.Ordnung (siehe "Schaltung.jpg").

Zunächst habe ich die Übertragungsfunktion aufgestellt (siehe "Schaltung.jpg").
Anschließend habe ich diese in Matlab implementiert.

Siehe dazu meinen nachfolgenden Codeteil.

Mein Problem/Frage ist, dass meine Eingangswerte nicht richtig geglättet werden. Ich erhalte schwachsinnige Ausgangswerte die zur keiner Dimension zu meinen
tatsächlichen Eingangswerte stehen.

Könnt Ihr bitte Sagen, "wo der Hase im Pfeffer begraben ist"^^?
Was habe ich übersehen?


Falls Ihr Fragen habt, könnt Ihr diese selbstverständlich stellen.

Vielen Dank!!!


Code:

function[outWerte] = Tiefpassfilter_func(inWerte)

     


k=1;
alpha_Koeffizient = 8.012;
beta_Koeffizient = 7.012;
outWerte=zeros(20,1);






while(k<=19)
outWerte(k:k+1,1) = (1/alpha_Koeffizient)*inWerte(k,1)-(beta_Koeffizient/alpha_Koeffizient)*outWerte(k,1);
   
k=k+1;
end

outWerte=outWerte
end


 



Meine inWerte:
0.861452852491214
0.289527325376026
0.289527325376025
0.176618076724451
0.176618076724450
0.129356932981007
0.129356932981007
0.104071160106514
0.104071160106513
0.088885167760750
0.088885167760749
0.079270030482127
0.079270030482126
0.073157602739520
0.073157602739520
0.069509360996062
0.069509360996062
0.067797809839995
0.067797809839995

In_und_Out_Werte.jpg
 Beschreibung:

Download
 Dateiname:  In_und_Out_Werte.jpg
 Dateigröße:  75.63 KB
 Heruntergeladen:  1065 mal
Schaltung.jpg
 Beschreibung:

Download
 Dateiname:  Schaltung.jpg
 Dateigröße:  1.54 MB
 Heruntergeladen:  1195 mal
Private Nachricht senden Benutzer-Profile anzeigen


Napomleb
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 27.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2013, 10:17     Titel:
  Antworten mit Zitat      
Hallo,

also ich hab mal deine Übertragungsfunktion
mal so erstellt und die Impulsantwort und Bode angeschaut, und das Ergebnis sieht schonmal vernüntig aus.

Code:
sys = tf(1,[alpha_Koeffizient beta_Koeffizient], 0.1,'Variable','z^-1')
impulse(sys)
figure
bode(sys)
grid
 


Das heißt dein Fehler müsste in der eigenen Implementierung sein.

Was stellen deine inWerte dar?
Soll das ganze kontinuierlich gerechnet werden oder wie soll die Funktion verwendet werden?
Private Nachricht senden Benutzer-Profile anzeigen
 
akki
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2013, 10:25     Titel:
  Antworten mit Zitat      
Guten morgen,

danke für deine Antwort.

Bei den inWerten handelt es sich um Stromwerte.

Es soll kontinuierlich berechnet werden.
Die Zeitkonstante des Filters ist 1.5 s.
Private Nachricht senden Benutzer-Profile anzeigen
 
Napomleb
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 27.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2013, 11:29     Titel:
  Antworten mit Zitat      
Ok hab meine Frage falsch formuliert, deshalb nochmal.

1. Bekommst du deine inWerte blockweise oder immer einen nach dem anderen?

2. Musst/möchtest du genau diesen Filter realsieren? Wenn du deine Werte einfach nur kontinuierlich glätten willst, könntest du einfach den "Gleitenden Mittelwert" bilden (ist auch ein TP).

3. Willst du den Filter auf einem DSP realisieren (sprich mit C- Code) oder nur in MatLab?

4. Das könnte dir weiterhelfen:
http://www.mathworks.de/de/help/mat.....g-data.html?s_tid=doc_12b
Private Nachricht senden Benutzer-Profile anzeigen
 
akki
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2013, 13:00     Titel:
  Antworten mit Zitat      
Zu 1: ich bekomme die intwerte als ein Block , d.h. In einem (19,1) Vektor
Zu 2: JA ich muss es nach dieser Schaltung es umsetzen ist mir so vorgeschrieben worden. Leider...
Zu 3 nein nur matlab Code
Zu 4 schau mir dein Link in Ruhe an

Danke erstmals
Ich denke es liegt irgendwie mit der zeitkonstante
Zusammen.
Ich muss ja eine bestimmte zeit laufen lassen, dass sich die werte daran
Annähern, aber genau dort hängt es
Weiß nicht wie das matlab sagen soll
Quasi als Code.
Private Nachricht senden Benutzer-Profile anzeigen
 
Napomleb
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 27.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2013, 13:47     Titel:
  Antworten mit Zitat      
Ah ok, also dir gehts ums Einschwingen des Filters?

Prinzipiell musst du dir irgendwie die alten Werte merken, weil der Filter sonst bei jedem Block neu einschwingt.

Entweder machst dus mit einem "Ringbuffer" oder du merkst dir einfach immer den letzten Wert, denn bei deiner Übertragungsfunktion brauchst du ja maximal den y(k-1) Wert um y(k) zu berechnen.

Übrigens wenn dus so schreibst
Code:

outWerte(k,1) = (1/alpha_Koeffizient)*inWerte(k,1)-(beta_Koeffizient/alpha_Koeffizient)*outWerte((k-1),1);
 

kannst du gleich die Übertragungsfunktion erkennen
y_{(k)}=\frac{1}{\alpha }\cdot x_{(k)}-\frac{\beta}{\alpha } \cdot y_{(k-1)}
Private Nachricht senden Benutzer-Profile anzeigen
 
Headbucket
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.12.13
Wohnort: Dresden
Version: R2007B
     Beitrag Verfasst am: 18.12.2013, 10:37     Titel:
  Antworten mit Zitat      
Mit dem Thema Zeitkonstante bin ich gerade nicht so fit. Wenn man es aber mit Grenzfrequenzen (lässt sich aus der Zeitkonstante berechnen) und Abtastfrequenzen (mit welcher Frequenz wurden die Stromwerte aufgenommen?) betrachtet würde ich es so umsetzen:

Code:
A = [0.861452852491214,
0.289527325376026,
0.289527325376025,
0.176618076724451,
0.176618076724450,
0.129356932981007,
0.129356932981007,
0.104071160106514,
0.104071160106513,
0.088885167760750,
0.088885167760749,
0.079270030482127,
0.079270030482126,
0.073157602739520,
0.073157602739520,
0.069509360996062,
0.069509360996062,
0.067797809839995,
0.067797809839995];

figure(1);
plot(A);
hold on;

fa = 1;                               % Abtastfrequenz = 1 Hz
fc = 1 / (2 * pi * 1.5);         % Grenzfrequenz. Zeitkonstante = 1,5 s

K = tan((2*pi*fc/fa) / 2);    % tan der normierten Grenzfrequenz
a = [1 (-(1-K)/(1+K))];       % Nenner-Koeffizienten
b = [(K/(1+K)) (K/(1+K))]; % Zähler-Koeffizienten

y_filt = filter(b,a,A);

plot(y_filt,'r');


Vllt hilft es ja irgendwie.

Grüße
Headbucket
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.