• Hallo zusammen,

    ich schreibe gerade VLC um und habe dabei schmerzhaft erfahren müssen, das die lustigen Graphen von damals im Matheunterricht später doch noch für irgendwas gut gewesen sein müssen :(

    Leider ist das bereits alles aus meinem Schädel, weil man "sowas ja nie wieder braucht".

    Konkret bin ich auf der Suche nach einer Formel um bei einem komprimierten Frame mit gegebenem Lambda+Größe, eine Größe aus einem beliebigem Lambda zu berechnen.

    Dazu hab ich zunächst ein paar Durchläufe mit einer Testsequenz gemacht und mir sämtliche Größen ausgeben lassen.

    Das ganze hab ich dann unter Access mit ein paar Repräsentativen Frames in eine Exceltabelle gepumpt um mir einen hübschen Responsegraph zu erstellen.

    Dann hab ich angefangen eine Funktion zu basteln, die mir die Beispielwerte berechnet.

    Das hat ganz gut geklappt, ist aber nicht genau, weil ich im Unterricht beim Thema "Kurvendiskussion" wohl gepennt habe ... oder es ist einfach zu lange her :rolleyes_:

    So wie ich das sehe, muss die Funktion so angepasst werden, das vor dem Nulldurchgang die Degression höher und nach dem Durchgang niedriger sein muss.

    Das erklärt dann zwar nicht die Punkte bei GP <0 aber dann hätt ich erstmal 'ne Basis zum weitermachen.

    Hier ist die Exceltabelle:

    ... neue Version weiter unten ...

    Die gesuchte Funktion ist in der Spalte [G] und um die Sache zu testen könnt ihr rechts den "Complexity Modifier" auf die jeweiligen Verhältnisse von Small/Medium/Large einstellen.
    Bei "Large" kann man schön sehen, wie sich die Fehler potenzieren.

    Wenn in der Spalte "error" überall 0% stehen würde, wäre ich überglücklich ... sehr nahe dran würde mir aber schon genügen.

    Die Idee zu der Formel hab ich übrigens aus dem Beitrag, der oben in der Exceltabelle steht ... aber wie gesagt ... irgendwas fehlt noch.

    Jemand 'ne Idee?

    P.S. Die leeren Zeilen zwischen den Markierungen könnt ihr erstmal ignorieren ... das sprengt jetzt wohl den Rahmen

    Einmal editiert, zuletzt von TheGenesis (5. Dezember 2013 um 01:42)

  • Mal gucken.
    Du hast einen Stapel Messdaten (Spalten A-D)
    berechnest Dir dann
    - QP als Quality/118 -0,5 (Macht das Sinn? negative QP-Werte ??)
    - Factor dadurch, dass Du den Wert in der C-Spalte (2 Medium) durch den Wert in C5 teilst. (vermutlich weil das der Encode mit QP 0 ist, was vermutlich wiederum lossless ist; wobei sich FF_QP2LAMDA auf den lambda Wert von Q2 beruft,...)

    Was Du jetzt willst ist eine Formel, welche dir zu einem gegebenen QP-Wert und dem Complecity Modifier den factor (Spalte G) berechnet. (wobei CM = 1 ist)

    Dein aktueller Ansatz dafür ist:

    factor = 2^(-QPWert/(2+ComplexityModifier)) * 2 + ComplexityModifier = 2 ^ (1 - QP/()2+CM) + CM

    Sehe ich das soweit richtig?

    Cu Selur

    Mal so etwas wie: Eureqa (http://www.nutonian.com/products/eureqa/quick-start/) ausprobiert?

  • QP als Quality/118 -0,5 (Macht das Sinn? negative QP-Werte ??)

    Ups ... da is schon der erste Fehler in der Formel ... hatte das schnell aus dem Source vom encoder kopiert und da das "optisch" dem Medium-Frame am nächsten kam, hab ichs gelassen.

    Was Du jetzt willst ist eine Formel, welche dir zu einem gegebenen QP-Wert und dem Complecity Modifier den factor (Spalte G) berechnet. (wobei CM = 1 ist)

    Ja ... und umgekehrt :)

    Dein aktueller Ansatz dafür ist:

    factor = 2^(-QPWert/(2+ComplexityModifier)) * 2 + ComplexityModifier = 2 ^ (1 - QP/()2+CM) + CM

    Fasst ... es heißt dort:

    factor = 2^(-QPWert/(2+ComplexityModifier)) * ComplexityModifier

    Mal so etwas wie: Eureqa (http://www.nutonian.com/products/eureqa/quick-start/) ausprobiert?

    Noch nicht ... grins ... wusste garnicht das es sowas gibt ... ich probiers mal aus ... aber dann weiss ich trotzdem nicht, wie man sowas "austüftelt".

    So ... hab die Exceltabelle erstmal um die 0,5 bereinigt ... man sollte nicht solange an sowas fummeln, wenn man müde ist :)

    hier ist der Update:

    QP bFrames.zip

    Mhmm ... sind das mehrere Kurven und kann man das überhaupt mit einer Formel darstellen?

    2 Mal editiert, zuletzt von TheGenesis (2. Dezember 2013 um 22:53)

  • Zitat

    Mein Gott ... das Tool ist echt der Hammer ... haha ... macht die Schule echt überflüssig ... ich sach nur "Dont feed the trolls"


    Ist zumindest praktisch um brauchbare Näherungslösungen zu finden.

    Zitat

    aber dann weiss ich trotzdem nicht, wie man sowas "austüftelt".


    bei einer Korrelatuin zwischen nur zwei Zahlen -> scharfes draufgucken ;)

    ----

    Ist QP wirklich der einzige Faktor den Du hast?
    Das Problem ist, dass ich aktuell bezweifele, dass man eine direkte Korrelation zwischen QP und dem Factor finden wird, welche wirklich genau ist.
    -> Wie nah sollte/muss denn die Schätzung der Werte sein?
    Nebenbei:
    Da es eh 'nur' um eine Korrelation zwischen QP und Factor geht, wäre es einfacher den Orginal Factor direkt mit dem errechneten Factor zu vergleichen im Graphen?

  • Ja, das hatte ich letzte Nacht schon angeworfen ... die Berechnung läuft noch und nähert sich wohl dem ende.

    Huaahh ... vorläufiges "Endergebnis":

    Code
    C = atan2(log(B*A^3 + B^2/A) + max((A^2 - B)/(A + B + A*asinh(B^2/sqrt(A))), atan2(sqrt(A), asinh(acosh(B)*max(B^2, B*A^3)))), A)

    A=QP, B=Size, C=Factor

    Wie soll ich das denn dem armen alten Excel von 2003 beibringen?

    Das ist übrigens auch nur der erste Schritt ... später brauche ich dann auch noch die Korrelation zwischen FrameX und FrameY (complexity).

    Genau hinschauen wird wohl eher eine "praktikable" Formel bringen, denn so wie ich das sehe, sind das 2 kurven, nämlich:

    entweder:

    a) parabel von lambda 1 bis 177
    b) hyperbel von lambda 295 bis ende

    oder:

    a) parabel von lambda 1 bis 59
    b) hyperbel von lambda 177 bis ende

    und dann natürlich noch die kurven zwischen den Intervallen.

    Aber ich weiss nicht, wie man die kurven an die werte ausrichtet, geschweige denn innerhalb der Formeln parameterisiert ... man müsste dann nämlich für die große hyperbel in abhängigkeit der complexity unterschiedliche Steigungen/Gefälle vor und hinter dem 0-Punkt einsetzen.

  • Nachtrag ... die Korrelation zwischen den Frames ist wurscht ... wenn der Faktor pro Frame jeweils korrekt ermittelt wird, kann ich auf die Größe von Lamda=1 hochrechnen und diese durch die Größe beim folgenden Frames teilen ... schwupps ... = complexity factor.

    Hochrechnen vom aktuellen auf das nächste muß ich nicht, weil ich in meinem Algo lediglich den trend zum vorangehenden Frame brauche.

    Hab gerade mal die folgende Formel auf mein Excelsheet angewandt:

    Code
    0,5% absolute error ... cost 53
    
    
    C=atan2(log(A )/A  + A ^2/(B  + A *log(B  + B ^2) - A ) + log(B *A ^3 + B ^2/A ), A )
    
    
    ... für Excel:
    
    
    ARCTAN2(log(E2)/E2 + E2^2/(D2 + E2*log(D2 + D2^2) - E2) + log(D2*E2^3 + D2^2/E2); E2)

    Aber der MS haufen spuckt alle möglichen Zahlen über 1 aus die nix mit dem Faktor zutun haben.
    Im Evalutionsplot in Eureqa funktioniert das übrigens recht gut ... wo ist der Fehler?

    Achso ... nochwas ... wie schwierig ist das, so eine Formel wie da oben so um zu formen, das ich daraus die Gleichungen für A= und B= ableiten kann oder sollte ich da lieber Eureqa mit der entsprechenden/umgestellten Fragestellung bemühen?

    4 Mal editiert, zuletzt von TheGenesis (5. Dezember 2013 um 02:04)

  • Ich finde diese Formel deutlich zu komplex. Vermutlich wird es eine einfachere Formel geben, die vielleicht etwas größere Abweichung zu den Messdaten hat, dafür aber leichter zu berechnen ist und möglicherweise auch näher an der "Ursache" ist. Kann man in Eureqa die erlaubte Komplexität verringern, vielleicht sich nur auf polynomiale oder trigonometrische Annäherungen mit wenigen Termen beschränken?

  • Zitat

    Kann man in Eureqa die erlaubte Komplexität verringern, vielleicht sich nur auf polynomiale oder trigonometrische Annäherungen mit wenigen Termen beschränken?


    Ja, man kann angeben was für Komponenten es verwenden darf. (sin, cos, usw. hätte ich weggelassen)

    Praktikable Formel erhält man i.d.R. nur wenn man mehr über das was man betrachtet weiß. ;)
    Wenn die Korrelation zwischen zwei Zahlen gefunden werden soll wird das Ergebnis oft nicht trivial sein, vor allem wenn man nicht weiß, was in den Daten Ausreißer sind und was nicht,.. ;)


    Nur mal zum Verständnis:
    QP steht wohl für einen konstanten Quantizer mit dem jeder Block des Frames komprimiert wurde. (also kein adaptive Quantization oder dergleichen)
    Aber, wofür soll der 'Factor' eigentlich anschaulich stehen?

    Cu Selur

  • Factor soll das Verhältnis zur Framesize bei Lambda=1 sein.

    Dann kann ich innerhalb des Frames lustig jeden anderen Lamdba nach meiner "Wunschgröße" wählen.

    Und ich kann die "maximale" Größe der niedrigsten Komprimierungsstufe mit dem nächsten Frame vergleichen um eine Tendenz zur komplexität zu bekommen und somit vorraussagen zu können, ob die nächsten Frames eher simpler oder komplexer werden.

    Ich verpasse VLC u.a. einen ordentlichen Rate-Limiter und mit meinem ersten (linearen) Ansatz ist das zu ungenau.

    Wieso hättest du die Winkelfunktionen weggelassen ... das müsste doch gerade damit eine simple Formel ergeben ... die Base-QP's sehen doch alle aus, als würden sie auf einer symmetrischen "Welle" liegen ... oder bin ich jetzt blind?

    Ich finde diese Formel deutlich zu komplex...

    Uahh ... die bisher genaueste Formel ist viel komlexer:

    Code
    C = B*erf(exp(asinh(logistic(A))))*gauss(exp(tanh(A)) + gauss(atanh(logistic(gauss(exp(logistic(A)) + erf(tanh(sqrt(exp(asinh(logistic(A)))))))))))

    Vermutlich wird es eine einfachere Formel geben, die vielleicht etwas größere Abweichung zu den Messdaten hat...

    Größere Abweichungen kann ich bei so kleinen Faktoren nicht gebrauchen ... die Produkte gehen dann direkt in die tausende.

    Mhmm ... auch wenn ich nicht ganz verstehe was Eureqa da treibt, kann ich jedoch leider erkennen, das er dabei ist den GP zu egalisieren und deshalb hab ich das Ding jetzt erstmal angehalten ... nützt mir nicht allzuviel, wenn das nachher nur mit diesem einen Frame funktioniert.

    Hab jetzt spaßeshalber mal alle 3 Frames gefüttert ... sieht nicht sehr vielversprechend aus ... er versucht seit 30 Minuten immernoch einen Median durch die 3 Kurven zu ziehen ... grrr ... hat doch grenzen so eine "Künstliche Intelligenz".

    4 Mal editiert, zuletzt von TheGenesis (5. Dezember 2013 um 23:35)

  • Ok ... neuer Ansatz ... ich fütter jetzt alle 3 Frames über die gesamte QP Bandbreite.

    Auch habe ich die Frage umformuliert ... sie lautet jetzt:

    B/C = f(A,B)

    Wobei:

    A = QP
    B = SIZE
    C = SIZE_Lambda1

    sind.

    Dann habe ich B gefiltert um das statistische Rauschen nach QP 51 zu egalisieren.
    Auch hab ich B und C jetzt normalisiert ... das macht die Sache wesentlich schneller ... hoffentlich nicht unpräziser.
    Und damit er nicht versucht den ganzen kram auf 42 zu konsolidieren hab ich Subtraktion und Addition verboten und dafür konstanten erlaubt.

    Nach bereits 5 Minuten zeichnet sicht eine präzise Lösung ab ... mal abwarten was ihm noch so alles dazu einfällt :D

    Achso ... die Reihenfolge in dem man die Werteliste füttert wirkt sich (zumindest in meinem Fall) ziemlich heftig auf die Entscheidungsfindung aus, da er bei der Lösungsfindung scheinbar gerne geometische Formen im Soloution-Fit-Plot produzieren will.

    ... das hier ist Interessant:

    Frame_Large_Lower_Floor.jpg

    Das ist der Ausschnitt im "unteren Bereich" von Frame-Large (im hohen QP Bereich) ... sah im ersten Moment aus wie irgendein "Rauschen" ... scheint aber was elektrisches zu sein, weil Eureqa das mit einem atan2() genau getroffen hat.

    8 Mal editiert, zuletzt von TheGenesis (7. Dezember 2013 um 00:54)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!