Werte harmonisch interpolieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

Hallo,

ich bin hier gerade am leichten verzweifeln da mich mein Mathematikverstand hier wieder völlig im Stich lässt...
(mann könnte auch sagen bin zu blöd dafür :wink: )

Ich habe also einen 31Band software EQ und möchte aber nur
8 Frequenzbänder einstellen. Die Frequenzen dazwischen muss ich
natürlich angleichen.

Linear ist es ja kein Problem - ich möchte aber gerne das sich eine
harmonische Sinusartige kurve ergiebt.
(wenns zu komliziert wird lasse ich es linear)

Nur um mal ausgedachte Werte in den Raum zu werfen:

(1.0 = +- 0dB )

Also vereinfacht:
17.0 : 1.0 : 1.0: 12.0 : 1.0 : 1.0 : 5.0 : 1.0 : 1.0 : 10.0 usw...
Linear (logo):
17.0 : 15.3 : 13.6 : 12.0 usw....

Aber wie ist denn der andere Ansatz?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Was ist denn jetzt dein konkretes Problem? Ist dir klar, dass die db-Skala selbst nicht linear ist?
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

ja is mir klar... vergiß einfach die db - Angabe.
Mein Problem vielleicht etwas allgemeiner:

Ich habe ein x/y Koordinatensystem auf dem ich ein paar Punkte
eingetragen habe und möchte ein paar Zwischenwerte haben.

Nun möchte ich nicht einfach -bildlich gesprochen eine gerade linie zwischen diesen Punkten ziehen
sondern das ganze so verbinden als ob ich ein Kurvenlineal angesetzt habe.

Nutzen wollt ich es halt für den EQ, allerdings interessiert mich das ganze
auch einfach...

Verständlicher?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

So würde es gehen
(f2-f1)*(sin(x-pi/2)+1)
mit f2 linker Frequenz, f1 rechter, x = pi/3 für 1. Mittenfrequenz, x=2pi/3 für 2. Frequenz.
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

uiii super danke, dann werd ichs mal testen...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ich verstehe nicht, wie das die Fragestellung beantwortet. *kopfkratz* Für mich klang die ganz nach gewöhnlicher Interpolation (wozu man scipy.signal nehmen kann). Kann mir jemand sagen, wie die Fragestellung besser zu verstehen ist? (bin neugierig)

Gruß,
Christian
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Ob der Sinus so schön ist? Du könntest ja mit numpy.polyfit ein Polynom durch die 8 Punkte berechnen. Mit numpy.poly1d erhälst Du dann die Werte in den Zwischenräumen auf dem Polynom.
MfG
HWK
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

Ich verstehe nicht, wie das die Fragestellung beantwortet.
Da bin ich mir auch noch nicht sicher... scipy.signal - interessant aber
da schnall ich ja erst recht ab.

Ich will einfach nur die (*) Punkte mit ner harmonischen Kurve verbinden
und jeden belieben Punkt ermitteln können.
(. musste ich nehmen damit die Formatierung funktioniert.)

- mach gerade etwas Nachhilfe in Mathe :wink:
Also nur um deine Frage nochmal zu beantworten.

Polynom? Wenn ich mir die funktion anschaue - dann muss ich wohl
noch viel nachlesen bis ichs kapiert habe.
@HWK: Hast Du da ein kurzes Beispiel?

|
|......*
|.......................*
|................*
|----------------------
|
|.........*
|
|
|*
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

HWK hat geschrieben:Ob der Sinus so schön ist? Du könntest ja mit numpy.polyfit ein Polynom durch die 8 Punkte berechnen. Mit numpy.poly1d erhälst Du dann die Werte in den Zwischenräumen auf dem Polynom.
Wieso mit Kanonen auf Spatzen schießen? Für die zwei Punkte auf einer definierten Funktion muss ich nichts fitten, das kann man einfach ausrechnen. Und erst recht nicht brauche ich dafür eine zusätzliche Abhängigkeit in Form von numpy oder scipy.

Und selbstverständlich hab ich mich dabei auch vertan:

Code: Alles auswählen

(f2-f1)/2*(sin(x-pi/2)+1)+f1
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

Das erklärt die komischen negativen Werte, thx.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Man müsste halt einmal ausprobieren, welche Variante bessere Ergebnisse liefert. Hier ein Beispiel zu den anfangs ausgedachten Werten:

Code: Alles auswählen

>>> from numpy import *
>>> x = array([0, 3, 6, 9])
>>> y = array([17, 12, 5, 10])
>>> z = polyfit(x, y, 3)
>>> p = poly1d(z)
>>> p([1, 2, 4, 5, 7, 8])
array([ 16.41975309,  14.58024691,   9.19753086,   6.69135802,
         4.64197531,   6.13580247])
MfG
HWK
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

Ja, Danke werd ich testen...
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

In diesem Fall hat Darii recht, langt völlig (für meine Zwecke).
Thema Erledigt - Danke nochmal.
Bin Happy!
:D
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

HWK hat geschrieben:Man müsste halt einmal ausprobieren, welche Variante bessere Ergebnisse liefert.
Warum sollte ein *Fit* mir irgendeinem dahergelaufenen Polynom bessere Ergebnisse liefern, als die exakte Lösung? Sorry, aber für das Bedürfnis irgendwas fitten zu wollen, was man auch einfach ausrechnen kann fehlt mir das Verständnis. Das kostet doch auch Rechenzeit...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Na ja, wenn es eine analytische Lösung gibt, klar, dann kann mans einfach berechnen. Aber bei "echten" Signalen, gibt es u. U. nur eine numerische Lösung. In diese Richtung zielte meine Frage. Dann nämlich muß man sich die Daten näher anschauen und auch wissen welche (physikalischen) Bedingungen herrschen. Sonst nämlich kann eine schöne und schnelle Lösung auch eine falsche sein.

Wie auch immer, wenn die Frage mit Deiner Antwort, Darii, beantwortet ist, ist ja alles in Butter.

Gruß,
Christian
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Darii hat geschrieben:Warum sollte ein *Fit* mir irgendeinem dahergelaufenen Polynom bessere Ergebnisse liefern, als die exakte Lösung? Sorry, aber für das Bedürfnis irgendwas fitten zu wollen, was man auch einfach ausrechnen kann fehlt mir das Verständnis. Das kostet doch auch Rechenzeit...
Ebenfalls sorry, aber für diese Überheblichkeit fehlt mir auch das Verständnis. Wie kommst Du darauf, dass der Sinus die exakte Interpolation zwischen zwei Frequenzen sein muss? Selbst, wenn dem so wäre, dann solltest Du nicht unnötig das math-Modul laden und Rechenzeit vergeuden, sondern die beiden Zwischenpunkte einfach so berechnen: :wink:

Code: Alles auswählen

dy = y2 - y1
y1_1 = y1 + 0.25 * dy
y1_2 = y1 + 0.75 * dy
MfG
HWK
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

HWK hat geschrieben:Wie kommst Du darauf, dass der Sinus die exakte Interpolation zwischen zwei Frequenzen sein muss?
Weil der Threadstarter das so wollte?
Selbst, wenn dem so wäre, dann solltest Du nicht unnötig das math-Modul laden und Rechenzeit vergeuden, sondern die beiden Zwischenpunkte einfach so berechnen: :wink:

Code: Alles auswählen

dy = y2 - y1
y1_1 = y1 + 0.25 * dy
y1_2 = y1 + 0.75 * dy
MfG
HWK
Wunderbar, das reicht doch.
Antworten