Forum: Digitale Signalverarbeitung / DSP / Machine Learning Frequenzgang berechen digitahler Filter


von Joachim J. (felidae)


Lesenswert?

Ich habe mir einen einfachen Tiefpassfilter gebastelt.
1
#define C 8 // ein wert zwischen 0 und 10
2
3
int Y; // Gefilterter Messwert
4
int X; // wert der vom ADC gewandelt wird und in einen Messwert umgerechnet wurde
5
...
6
Y=(X*(10-C)+Y*C)/10;
7
...

Mit C stelle ich die Grenzfrequenz ein(glaube ich).
Der Messwert ändert sich nur sehr langsam, im Bereich von kleiner 0,25 
Hz
Alles darüber wollte ich weg filtern.

soweit so gut. bis hier hin läuft alles.

jetzt zur Theorie: ich möchte den Filter Dokumentieren und 
Charakterisieren

ich habe mir daher folgende Übertragungsfunktion überlegt:


Hier komme ich nicht weiter.
wie berechne ich jetzt aus dieser Übertragungsfunktion den Frequenzgang?
Kann ich diese diskrete Übertragungsfunktion in eine kontinuierliche 
umwandeln G(s)?


ps ich habe Octave zur Simulation

von Markus B. (russenbaer)


Lesenswert?

Du hast einen Rechenfehler:

mit


Weiters kannst du, für deinen Bodeplot
setzen und Dir
 und
für
 ausrechnen.
Pi entspricht Abtastrate-halbe.
Diese Gleichsetzung bedeuted die Auswertung der Übertragungsfunktion am 
Einheitskreis.


Das ganze funktioniert in MATLAB und Octave auch mit dem Befehl
freqz(b,a).

In deinem Fall:

freqz(1-C/10, [1 -C/10])


lg
Markus

von Joachim J. (felidae)


Lesenswert?

kann man das so machen?
wenn ja dann müste das hir ja auch gehen:

ich glaube dann mus ich das nämlich so eingeben:
1
freqz([1-c/10 0],[1 -C/10])

von Markus B. (russenbaer)


Lesenswert?

joachim j. schrieb:
> kann man das so machen?
>
> wenn ja dann müste das hir ja auch gehen:
>
>
>
>

Diese Umrechnung stimmt, allerdings wird für den freqz Befehl mit der 
Darstellung gearbeitet die 1/z beinhaltet.
Siehe:
http://dali.feld.cvut.cz/ucebna/matlab/toolbox/signal/freqz.html
[Diese Seite ist die Hilfe einer älteren freqz Version in MATLAB - ist 
aber für Octave (zumindest die Polynomkoeffizienten) gleich]

Der Befehl, so wie du ihn angegegeben hast, stimmt. Allerdings kenne ich 
deine Gedankengänge dazu nicht.

Weiters ist der Befehl mit dem aus meinem ersten Post ident, da alle 
b_i=0 für i>0. Da muß dann kein Vektor angegeben werden.

lg
Markus

von Joachim J. (felidae)


Lesenswert?

ok das sind die infos die ich haben wollte. ich kann jetzt sowol mit

1
 G=tf([a,0][1,-b],ta);bode(G);step(G)
oder
1
 freqz(1-C/10, [1 -C/10])

mir einen Frequenzgang anzeigen lassen.

: Bearbeitet durch User
von Joachim J. (felidae)


Lesenswert?

Herzlich dank Markus

von Joachim J. (felidae)


Lesenswert?

so da bin ich wieder, mit dem selben Filter und einer neuen Frage.
ich möchte in meiner Arbeit herleiten wie ich von der Grenzfrequenz zu 
den Filter Koeffizienten komme. Hier also mein Ansatz:

Die Voraussetzung damit ich mit dieser Formel b errechnen kann ist das 
ich einen Komplexe Frequenz für fg vorgebe. Wie muss ich vorgeben, wenn 
ich nur die Frequenz habe aber keinen Winkel habe? muss ich hier den 
Betrag ermitteln?

von Markus B. (russenbaer)


Lesenswert?

Servus,

Der Betragsfrequenzgang muß sich um den Faktor unterscheiden!

Dann bekommst Du auch keine komplexe Frequenz.

Hast Du weiter unten anscheinend vermutet.

lg
Markus

von Joachim J. (felidae)


Lesenswert?

ok das Hilft mir weiter.
hier mein überarbeiteter Lösungsansatz:





von Joachim J. (felidae)


Lesenswert?

jetzt mit zahlen:


  

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.