» über uns

8-fach Weiche mit BruteFIR

Druckbare Version

  • 27.09.2011, 20:24
    usul
    Hmm, jetzt fangen die Schwierigkeiten doch an. Ich habe das ganze auf 8 Kanäle erweitert.

    Code:

    ## DEFAULT GENERAL SETTINGS ##

    float_bits: 64;            # internal floating point precision
    sampling_rate: 48000;      # sampling rate in Hz of audio interfaces
    filter_length: 8192,16;        # length of filters
    overflow_warnings: true;    # echo warnings to stderr if overflow occurs
    show_progress: true;        # echo filtering progress to stderr
    max_dither_table_size: 0;  # maximum size in bytes of precalculated dither
    allow_poll_mode: false;    # allow use of input poll mode
    modules_path: ".";          # extra path where to find BruteFIR modules
    monitor_rate: false;        # monitor sample rate
    powersave: false;          # pause filtering when input is zero
    lock_memory: true;          # try to lock memory if realtime prio is set


    ## LOGIC ##

    logic: "cli" { port: 3000; };

    ## INPUT, OUTPUT ##                                                       

    input "left", "right" {
            device: "jack" {  ports: "alsa_pcm:capture_1", "alsa_pcm:capture_2";};
            sample: "AUTO";
            channels: 2/0,1;
           
    };

    output "lsub", "llow", "lmid", "lhigh", "rsub", "rlow", "rmid", "rhigh" {
            device: "jack" { ports: "alsa_pcm:playback_1", "alsa_pcm:playback_2", "alsa_pcm:playback_7", "alsa_pcm:playback_8",
                                    "alsa_pcm:playback_3", "alsa_pcm:playback_4", "alsa_pcm:playback_5", "alsa_pcm:playback_6";
    };
            sample: "AUTO";
            channels: 8/0,1,2,3,4,5,6,7;
            delay: 0,0,0,0,0,0,0,0;
    };

    coeff "subleft" {
            filename: "XOSubL48.pcm";
            format: "FLOAT_LE";
    };

    coeff "lowleft" {
            filename: "XOLowL48.pcm";
            format: "FLOAT_LE";
    };

    coeff "midleft" {
            filename: "XOMidL48.pcm";
            format: "FLOAT_LE";
    };

    coeff "highleft" {
            filename: "XOHighL48.pcm";
            format: "FLOAT_LE";
    };

    filter "ls" {
            inputs: "left";
            to_outputs: "lsub";
            coeff: "subleft";
    };

    filter "ll" {
            inputs: "left";
            to_outputs: "llow";
            coeff: "lowleft";
    };

    filter "lm" {
            inputs: "left";
            to_outputs: "lmid";
            coeff: "midleft";
    };

    filter "lh" {
            inputs: "left";
            to_outputs: "lhigh"/1;
            coeff: "highleft";
    };

    Und nun habe ich das seltsame Phänomen, dass der Mitteltöner dem Hochtöner hinterherläuft. Die Verzögerung ist gut hörbar und dürfte deutlich über 100ms betragen.

    Dummerweise kann ich mir nicht erklären, woher die kommt. Ich hatte die 4-Wege-Filter in Verdacht, aber selbst wenn ich die bisherigen 2-Wege-Filter nehme, passiert das. An denen liegt es also nicht.

    Irgendwelche Ideen?
  • 27.09.2011, 22:29
    slacky
    Ich hatte bisher noch nichts mit BruteFIR zu tun aber vielleicht braucht er länger um tieferfrequente Sachen zu filtern.

    Schonmal versucht mittels Messsystem den genauen Versatz festzustellen und mit einem delay zu korrigieren?
  • 28.09.2011, 06:09
    gr33n
    Die Filterlänge ist ja eigentlich 16*8192 für alle Filter.
    Versuch doch mal Sub und MIDLOW jeweils auf rechts und links von dem selben Subdevice zu legen.
    Vielleicht hinkt ja nur der DAC hinterher.
    Ändert sich was wenn du das output plugin auf alsa umstellst?
  • 28.09.2011, 07:37
    The Alchemist
    Hallo,

    100 ms Nachhinken wäre schon der Hammer wenn es soviel wäre.

    Eventuell handelt es sich aber um ein psychoakustisches Phänomen, da der Hochtöner und der MT nicht den richtigen Pegel haben; da hab ich mir grad mal auf der bpa Seite die Messung vom Coax angesehen.

    Du senkst den Pegel des Hochtöners nur um 1 db ab, wenn ich das beim überfliegen richtig gesehen habe.

    Um diesen Effekt aus zu schließen hilft nur Messen wie groß der Zeitversatz tatsächlich ist, das einer vorhanden ist, ist unstrittig.

    Nach der Messung dann Pegel und Delay anpassen.

    Wenn ich deine Konfiguration richtig im Kopf habe, möchtest Du eine Blackbox betreiben, das heißt Du gibst ein Signal von aussen in deinen Faltrechner.

    In diesem Fall ist die Benutzung von Jack nicht notwendig, auch auf das Sound-Loopback-Device würd ich verzichten...

    Gruß

    Elmar
  • 28.09.2011, 09:22
    usul
    Zitat:

    Zitat von gr33n Beitrag anzeigen
    Versuch doch mal Sub und MIDLOW jeweils auf rechts und links von dem selben Subdevice zu legen.
    Vielleicht hinkt ja nur der DAC hinterher.

    Das Problem habe ich mit mid/high und die laufen auf dem gleichen DAC. Selbst wenn ich die auf die Kanäle 0/1 lege, habe ich das Problem. Es scheint aufzutreten, wenn ich die Konfiguration von 2 auf 8 Kanäle erweitere.

    Zitat:

    Ändert sich was wenn du das output plugin auf alsa umstellst?
    Noch nicht probiert.
  • 28.09.2011, 09:24
    usul
    Zitat:

    Zitat von The Alchemist Beitrag anzeigen
    Um diesen Effekt aus zu schließen hilft nur Messen wie groß der Zeitversatz tatsächlich ist, das einer vorhanden ist, ist unstrittig.

    Nach der Messung dann Pegel und Delay anpassen.

    Das wäre die am wenigsten wünschenswerte Lösung. Ich vermute noch irgendwo ein Konfigurationsfehler (vielleicht nicht direkt bei BruteFIR, sondern bei der Systemkonfiguration oder bei JackD), der hierfür verantwortlich ist. Ich möchte erstmal versuchen, den zu finden.
  • 28.09.2011, 10:50
    The Alchemist
    An dieser Stelle habe ich nun ein Verständnisproblem.

    Der riesengroße Vorteil von Brutefir ist doch, dass man Laufzeitunterschiede , egal wodurch sie bedingt sind, einfach ausgleichen kann.

    Auch der Pegelunterschied ist zwingend anzugleichen, sonst gibt es nie eine klingende Box.

    Um das Messen kommst Du also auf keinen Fall drum herum.

    Desweiteren würde ich linke und rechte Ausgänge immer auf einen Soundkartenausgang legen, also beide Subs auf 0/1 beide Lows auf 2/3 usw..

    Die Konfig würde ich auch mal so umschreiben, dass auch alle 8 Ausgänge arbeiten müssen.

    Gruß
    Elmar
  • 28.09.2011, 12:13
    usul
    Zitat:

    Zitat von The Alchemist Beitrag anzeigen
    An dieser Stelle habe ich nun ein Verständnisproblem.
    Der riesengroße Vorteil von Brutefir ist doch, dass man Laufzeitunterschiede , egal wodurch sie bedingt sind, einfach ausgleichen kann.

    Nun, da haben wir wohl wirklich ein unterschiedliches Verständnis. Ich setzte Brutefir nicht ein, um Software- oder Konfigurationsfehler durch zusätzliche Delays zu umschiffen. Eine Signallaufzeit über 100ms ist für mich generell zu viel.

    Dass gemessen und die Pegel angepasst werden müssen ist natürlich klar.

    Die gleichen Kanäle auf den gleichen DAC zu legen, ist sicher sinnvoll, dafür brauche ich dann aber erst noch Adapterkabel. Aber das ist dann eh "Feintuning".
  • 28.09.2011, 12:33
    The Alchemist
    Ich betreibe 6 Kanäle mit Brutefir und einer Asus D2, die Laufzeitunterschiede zwischen Ht und Tiefmitteltöner liegen im einstelligen Samplebereich (pro Kanal), mit gehörmäßigen Schätzungen im Millisekundenbereich tu ich mich immer etwas schwer :D.



    Dennoch habe ich die Laufzeit aller 6 im Betrieb befindlichen Chassis angegelichen, wird auch in der Anleitung zu DRC empfohlen, was bei mir die Entzerrung übernimmt.

    Im DIY Audio Forum hat sich aber schon einmal jemand über unverhältnismäßige große Unterschiede bei einer Asus Karte beklagt, von daher hilft nur messen. ;)


    Gruß

    Elmar
  • 15.10.2011, 15:14
    usul
    Zitat:

    Zitat von gr33n Beitrag anzeigen
    Die Filterlänge ist ja eigentlich 16*8192 für alle Filter.
    Versuch doch mal Sub und MIDLOW jeweils auf rechts und links von dem selben Subdevice zu legen.
    Vielleicht hinkt ja nur der DAC hinterher.
    Ändert sich was wenn du das output plugin auf alsa umstellst?

    So, heute komme ich mal wieder dazu, etwas zu testen. Die Umstellung als ALSA ändert nichts.

    Ich habe mal versucht, den zeitlichen Versatz zu messen. Es sieht so aus, als sei der eine Filterlänge. Bei mir sind das im Moment 65536 Taps, also so 1,2 Sekunden bei 48kHz. Wenn ich die Samplerate auf 96kHz erhöhe, sinkt der Versatz auf die Hälfte.

    Irgendwo ist da also noch ein Fehler bei Brutefir. Hat jemand sonst noch eine Idee?
  • 15.10.2011, 15:52
    usul
    :mad::mad::mad::mad::mad:

    Wollte gerade mal Brutefir auf die neueste Version updaten - da ist das Filesystem voll. 2GB reichen wohl nicht aus :-( So richtig schlank sind aktuelle Linux-Systeme wohl doch nicht mehr. Also geht es jetzt an eine Neuinstallation auf einem grösseren USB-Stick...
  • 15.10.2011, 17:08
    The Alchemist
    Über 2 GB ohne ein grafische Benutzer Oberfläche ist schon heftig.

    Meine Version mit Ubuntu 10.04 und LXDE als Oberfläche hatte glaube ich installiert 1,5 GB verbraucht. (CD Iso war so knapp unter 400MB)

    Kannst Du Brutefir in einer Konsole starten und die Meldungen posten?

    Gruß
    Elmar
  • 15.10.2011, 17:10
    usul
    Den Fehler bei Brutefir habe ich vermutlich gefunden. Ich habe da ein kleineres Durcheinander von minimal- und linearphasigen Filtern veranstaltet (sieht zumindest so aus).

    Jetzt wird aber erstmal neu installiert.
  • 18.10.2011, 07:41
    slacky
    Zitat:

    Den Müll beim Hochtöner unterhalb der Trennfrequenz (immerhin noch etwa -30dB Pegel) kann ich noch nicht so recht identifizieren. Ich vermute, dass das am Filter liegt, bin aber nicht sicher, dass es nicht am Messaufbau liegt. Ist aber nicht so wichtig, denn bei den Filtern liegt eh noch Arbeit vor mir.
    Hast du hier schon etwas rausgefunden? Ich selbst habe auch ein wenig rumexperimentiert mit BruteFIR und bin auf Ähnliches gestoßen..

    http://img828.imageshack.us/img828/5708/mit3.png


    Das sind elektrische Frequenzgänge die schnell zusammengeschustert wurden. Wirklich zusammen passen die Flanken nicht, das ist mir klar. :rolleyes:
    Der Bandpasseffekt an den Enden des Spektrums kommt von den beiden Soundkarten (im Moment will nur Analog Line IN funktionieren)
    Bei mir läuft alles über ALSA und laut Matlab sollten meine Filter im "linken" Stopband bei -60dB sein (bei Tiefpässen klappt es wie man sieht )

    http://img689.imageshack.us/img689/8440/fdaf.png
  • 18.10.2011, 07:51
    Uli.Brüggemann
    Wenn, wie im Beispielbild gezeigt, das linearphasige Filter 871 taps hat, dann müssen für eine richtige Messauswertung mindestens 435 Samples links vom Pulspeak vorhanden sein. Vermutlich entstehen die -30 dB schlichtweg durch Abschneiden von Samples vor dem Puls.
    Zumeist wird die Bedeutung von Samples mit kleiner Amplitude eben wegen der geringen Amplitude gewaltig unterschätzt.
  • 18.10.2011, 14:30
    slacky
    Vielen Dank! Da ich mit Arta nur 300 samples Vorlauf bekomme werde ich mal einen Test mit 600 Taps veranstalten um dem Phänomen nach zu gehen.


    EDIT:

    @Uli: Ein schneller Test bestätigt deine Vermutung! Erschwerend kam allerdings hinzu, dass ich wie gewohnt den Cursor sogar noch bei sample 300 als Startwert stehen hatte. Sonst schafft es die Hochpassflanke bei gleichem Filter auch fast ganz runter. Die Phase wird nun auch "richtiger" dargestellt. Das hatte vorher übergaupt nicht gestimmt wie ich jetzt im Vergleich feststellen musste
  • 18.10.2011, 16:15
    gr33n
    Slacky was für Filter Design Programm hast du da?
    Das Toolbar sieht schwer nach Wine aus.

    Grüße
    Sebastian
  • 18.10.2011, 18:01
    slacky
    Zitat:

    Zitat von gr33n Beitrag anzeigen
    Slacky was für Filter Design Programm hast du da?

    Siehe Post #19. Das ist das Filter Design and Analysis Tool aus der Signal Processing Toolbox für Matlab
  • 18.10.2011, 18:28
    gr33n
    Danke :)
    Ich werde mit die Demo mal bei Zeiten zu Gemüt führen.
  • 18.10.2011, 20:32
    usul
    So, mein Brutefir setup läuft mal. Auf dem neuen Memorystick ist auch noch genügend Platz :-)

    Jetzt habe ich aber wieder ein Problemchen mit dem Timing. Die beiden Bandpässe in meinem 4-Wege-Setup haben jetzt wieder einen (kleineren) zeitlichen Versatz zum Hoch- und Tiefpass.

    Die Filter sind mit Maxo generiert (8. Ordnung) und sind linearphasig. Ich hab es auch nochmal angeschaut und es sind auch wirklich linearphasige Filter, der Impuls sitzt bei allen Filtern genau in der Mitte.

    Ich habe den Eindruck, dass das irgendwie mit dem Bandpass zu tun hat, im Moment weiss ich aber noch nicht, wo mein Denkfehler ist.
Powered by vBadvanced CMPS v4.3.0