Grenzwerte sinc(x) bei float, bzw. double



  • krümelkacker schrieb:

    Nee, er meint die Berechnung des Kaiser-Fensters. Das ist schon ekelig. Wenn man danach googelt, findet man hier und da ein paar Polynome für Approximationen der entsprechenden Besselfunktion.

    Aber Kaiser brauchst du auch nicht. Nuttall wär ja auch okay. Das ist auch viel leichter zu berechnen
    http://en.wikipedia.org/wiki/Window_function#Nuttall_window.2C_continuous_first_derivative

    Mit Ordnung meinte Tachyon die Länge des FIR filters in Samples (ggf minus eins). Ihr redet also gerade aneinander vorbei.

    Jo, da hätte ich auch drauf kommen können, dass er die Ordnung der Besselfunktion meint.

    @TO:
    Wenn Du keinen Bock hast, die Besselfunktion selbst zu schreiben:
    Die gibt z.B. fertig in boost. Hier kannst Du das mal nachlesen. Wenn man die Besselfunktion fertig hat, ist die Berechnung der Fensterkoeffizienten ein Klacks.

    Edit:
    Oder libsamplerate :p



  • krümelkacker schrieb:

    Nee, er meint die Berechnung des Kaiser-Fensters. Das ist schon ekelig. Wenn man danach googelt, findet man hier und da ein paar Polynome für Approximationen der entsprechenden Besselfunktion.

    Aber Kaiser brauchst du auch nicht. Nuttall wär ja auch okay. Das ist auch viel leichter zu berechnen
    http://en.wikipedia.org/wiki/Window_function#Nuttall_window.2C_continuous_first_derivative

    Mit Ordnung meinte Tachyon die Länge des FIR filters in Samples (ggf minus eins). Ihr redet also gerade aneinander vorbei.

    Habe ich mir fast gedacht, okay. Jetzt wenn ich mir die Grafik reinpress
    http://en.wikipedia.org/wiki/File:Window_function_(comparsion).png habe ich die einzelnen Sperrbanddämpfungen. Sollte ich nicht ein Fenster nehmen, welches direkt nach 1 steil nach unten geht? Bzw. was ist die normalisierte Frequenz in dem Zusammenhang?

    Ich hätte schon Bock alles selber zu machen, aber es wird Bestandteil einer Bachelorarbeit und ich will nicht alles herleiten, also würde ich gerne auch den Bessel rauslassen. Ich schreibe nicht über Filterdesign, aber in meinem Bachelorarbeitbeispiel möchte ich einen Faltungshall mit VST einbauen und da wäre die Theorie ganz gut. Als kleines Beispiel davor wollte ich mir eben erst einen Resampler bauen.

    Boost wäre da für mich wieder so ein großer Klotz am Bein und ich habe keine Erfahrung damit. Lieber möchte ich alles selber implementieren. Auch andere Bibliotheken sind eher tabu, weil alles von mir implementiert sein soll.



  • PhilippHToner schrieb:

    reinpress
    http://en.wikipedia.org/wiki/File:Window_function_(comparsion).png habe ich die einzelnen Sperrbanddämpfungen. Sollte ich nicht ein Fenster nehmen, welches direkt nach 1 steil nach unten geht? Bzw. was ist die normalisierte Frequenz in dem Zusammenhang?

    Die Grafik zeigt den Zusammenhang zwischen der Verminderung des Leckeffektes (verbessert die Sperrdämpfung) und der Breite des Transitionsbandes (Flanke). Wenn Du eine Fensterfunktion wählst, mit der Du eine hohe Sperrdämpfung erzielst, dann geht das, bei gleichbleibender Ordnung des Filters, auf Kosten der Breite des Transitionsbandes (das wird dann breiter wodurch Du mehr von Deiner Nutzbandbreite "verschwendest").
    Das "Rechteckfenster" (also die pure Si-Funktion) hat das schmalste Transitionsband, jedoch auch die geringste Sperrdämpfung.
    Willst Du bei größer werdender Sperrdämpfung das Transitionsband schmal halten, dann musst Du die Ordnung (also die Koeffizientenzahl) Deines Filters erhöhren (=mehr Rechenaufwand).
    Der Trick beim Filterdesign ist es, einen guten Kompomiss zwischen Güte (=hohe Sperrdämpfung und schmales Transitionsband) und dem nötigen Rechenaufwand zu finden. Das Kaiserfenster hat den Vorteil, dass man relativ einfach eine variable Sperrdämpfung erhält. Außerdem gibt es relativ einfache, empirische Formeln, mit denen man die Filterparameter durch Vorgabe von Wunschsperrdämfpung und Transitionsbandbreite ermitteln kann.

    PhilippHToner schrieb:

    Ich hätte schon Bock alles selber zu machen, aber es wird Bestandteil einer Bachelorarbeit und ich will nicht alles herleiten, also würde ich gerne auch den Bessel rauslassen. Ich schreibe nicht über Filterdesign, aber in meinem Bachelorarbeitbeispiel möchte ich einen Faltungshall mit VST einbauen und da wäre die Theorie ganz gut. Als kleines Beispiel davor wollte ich mir eben erst einen Resampler bauen.

    Dann musst Du entweder ein einfacheres Fenster nehmen, oder selbst die Besselfunktion implementieren. Du könntest z.B. das Blackman-Nuttal-Fenster nehmen. Das ist recht einfach zu berechnen und hat für Audio-Anwendungen hinreichend gute Sperrdämpfung.



  • Ich berichtige, ich brauche für Faltungshall keine Fensterung (nur so nebenbei):

    y[n] = x[n] * h[n] \ \stackrel{\mathrm{def}}{=} \ \sum_{m=-\infty}^{\infty} h[m] \cdot x[n-m] = \sum_{m=1}^{M} h[m] \cdot x[n-m], \,

    => 'cicular convolution theorem'
    y\_k[n] = \textrm{IFFT}\left(\textrm{FFT}\left(x\_k[n]\right)\cdot\textrm{FFT}\left(h[n]\right)\right)

    , s. http://en.wikipedia.org/wiki/Overlap-save_method#Extending_Overlap-Save



  • PhilippHToner schrieb:

    Ich berichtige, ich brauche für Faltungshall keine Fensterung (nur so nebenbei):

    y[n] = x[n] * h[n] \ \stackrel{\mathrm{def}}{=} \ \sum_{m=-\infty}^{\infty} h[m] \cdot x[n-m] = \sum_{m=1}^{M} h[m] \cdot x[n-m], \,

    => 'cicular convolution theorem'
    y\_k[n] = \textrm{IFFT}\left(\textrm{FFT}\left(x\_k[n]\right)\cdot\textrm{FFT}\left(h[n]\right)\right)

    , s. http://en.wikipedia.org/wiki/Overlap-save_method#Extending_Overlap-Save

    Ob Du im Freqzenzbereich oder im Zeitbereich arbeitest ist völlig egal, da beides identisch ist. Du kannst das auch ganz wunderbar hin- und her transformieren.



  • PhilippHToner schrieb:

    Aber ich habe ehrlich gesagt keine Ahnung, was für Kriterien ein "guter" Resampler eingebaut bekommt.

    Das ist auch ein bisschen Geschmackssache. Wie gesagt, die Sperrdämpfung sollte mindestens 100dB sein, wobei ich 180dB wieder als Overkill bezeichnen würde. Im Durchlassbereich sollten die Übertragungsamplituden von 1 nicht mehr als 0,1 dB abweichen. Je weniger desto besser. Bei windowed-sinc-Filtern ergibt sich diese Abweichung aber aus der Sperrdämpfung (aufgrund von Symmetrien) und ist bei einer Sperrdämfung von 100dB echt schon winzig klein, also kleiner als 0,0001 dB -- wenn ich mich nicht verrechnet habe. Dann bleibt eigentlich nur noch die Position und die Breite der Flanke, welche Du jeweils über die Grenzfrequenz und die Fensterlänge kontrollieren kannst.

    Andere Filter-Design-Methoden lassen dich Sperrdämpfung und Durchlassband-Abweichungen getrennt voneinander regeln. Das erlaubt dir noch eine weitere Verkürzung der Impulsantwort des Filters. Es wird nur leider sehr schnell kompliziert (weighted least squares oder mini-max-Optimierung im Spektrum)...

    PhilippHToner schrieb:

    Ich finde das Gespräch gerade sehr interessant, obwohl wir jenseits von C++ gelandet sind 😃 ! Danke

    Meiner Meinung nach, eine wilkommene Abwechselung zu "wie übergebe ich ein 2D array an eine Funktion?". 😉

    Vielleicht ist der Thread besser in "Rund um die Programmierung" oder im Mathe-Forum besser aufgehoben... (?)



  • PhilippHToner schrieb:

    Ich berichtige, ich brauche für Faltungshall keine Fensterung (nur so nebenbei):

    y[n] = x[n] * h[n] \ \stackrel{\mathrm{def}}{=} \ \sum_{m=-\infty}^{\infty} h[m] \cdot x[n-m] = \sum_{m=1}^{M} h[m] \cdot x[n-m], \,

    => 'cicular convolution theorem'
    y\_k[n] = \textrm{IFFT}\left(\textrm{FFT}\left(x\_k[n]\right)\cdot\textrm{FFT}\left(h[n]\right)\right)

    Die schnelle Faltung ist im "DSP guide"-Buch auch schön erklärt. Du hast recht: die "FFT-Blöcke fenstert man da nicht". Aber Du fensterst immer noch deinen sinc wie gehabt!

    Allerdings ist die schnelle Faltung für Resampling nur bedingt interessant, da man ggf viele Samples berechnet, die man hinterher eh wieder wegschmeißt. Für einen Hall-Effekt ist das aber prima.



  • OT: Was muss ich eigentlich machen, damit das TeX-Gemüse bei mir richtig angezeigt wird?



  • Tachyon schrieb:

    PhilippHToner schrieb:

    reinpress
    http://en.wikipedia.org/wiki/File:Window_function_(comparsion).png habe ich die einzelnen Sperrbanddämpfungen. Sollte ich nicht ein Fenster nehmen, welches direkt nach 1 steil nach unten geht? Bzw. was ist die normalisierte Frequenz in dem Zusammenhang?

    Die Grafik zeigt den Zusammenhang zwischen der Verminderung des Leckeffektes (verbessert die Sperrdämpfung) und der Breite des Transitionsbandes (Flanke). Wenn Du eine Fensterfunktion wählst, mit der Du eine hohe Sperrdämpfung erzielst, dann geht das, bei gleichbleibender Ordnung des Filters, auf Kosten der Breite des Transitionsbandes (das wird dann breiter wodurch Du mehr von Deiner Nutzbandbreite "verschwendest").
    Das "Rechteckfenster" (also die pure Si-Funktion) hat das schmalste Transitionsband, jedoch auch die geringste Sperrdämpfung.
    Willst Du bei größer werdender Sperrdämpfung das Transitionsband schmal halten, dann musst Du die Ordnung (also die Koeffizientenzahl) Deines Filters erhöhren (=mehr Rechenaufwand).
    Der Trick beim Filterdesign ist es, einen guten Kompomiss zwischen Güte (=hohe Sperrdämpfung und schmales Transitionsband) und dem nötigen Rechenaufwand zu finden. Das Kaiserfenster hat den Vorteil, dass man relativ einfach eine variable Sperrdämpfung erhält. Außerdem gibt es relativ einfache, empirische Formeln, mit denen man die Filterparameter durch Vorgabe von Wunschsperrdämfpung und Transitionsbandbreite ermitteln kann.

    PhilippHToner schrieb:

    Ich hätte schon Bock alles selber zu machen, aber es wird Bestandteil einer Bachelorarbeit und ich will nicht alles herleiten, also würde ich gerne auch den Bessel rauslassen. Ich schreibe nicht über Filterdesign, aber in meinem Bachelorarbeitbeispiel möchte ich einen Faltungshall mit VST einbauen und da wäre die Theorie ganz gut. Als kleines Beispiel davor wollte ich mir eben erst einen Resampler bauen.

    Dann musst Du entweder ein einfacheres Fenster nehmen, oder selbst die Besselfunktion implementieren. Du könntest z.B. das Blackman-Nuttal-Fenster nehmen. Das ist recht einfach zu berechnen und hat für Audio-Anwendungen hinreichend gute Sperrdämpfung.

    Ich sehe schon, mir fehlt noch ein wenig Theorie, aber ich hab mir gerade ein Buch gekauft.

    Nochmal allgemein:
    Ich möchte von x Hz nach y Hz samplen. Dann brauche ich einen LPF bei y/2 oder? Der Sinc cutted doch automatisch bei der halben Abtastfrequenz. Wie kann ich das beeinflussen? AUch auf Wiki wird immer vom idealen LPF gesprochen, aber bei welcher Frequenz ist dieser denn angelegt?
    Wie realisiere ich einen LPF bei 120Hz für das Subwoofer Signal und einen HPF bei 120 Hz für die anderen Boxen zum Beispiel?

    Ich habe meine Samples "in" und meine ausgehenden Samples "out".
    Ich kann also das Filter so darstellen als Faltung:
    [in]*[filter]=[out]

    Ist [filter] die gefensterte sinc Funktion habe ich eine LPF bei der Nyquist-Frequenz?



  • Tachyon schrieb:

    OT: Was muss ich eigentlich machen, damit das TeX-Gemüse bei mir richtig angezeigt wird?

    Schau Dir mal Browser-Compatibility-Charts an: http://www.mathjax.org/help/user/ Vielleicht geht da etwas nicht!



  • Wo die Grenzfrequenz liegt, hängt davon ab, ob Du rauf- oder runtertasten willst.
    Bei rauftasten musst Du das Band auf die ursprüngliche Abtastfrequenz begrenzen (sogenanntes Glättungsfilter). Bei runtertasten musst Du auf die Zielabtastfrequenz begrenzen (Antialiasing-Filter).

    Die Grenzfrequenz kannst Du beeinflussen, indem du das x für Deine si-Funktion mit der gewünschten normierten Frequenz streckst.
    Simpel gesagt sinc(fg/fs*x). Als Tip zur Recherche: Du musst das Filter noch normieren, damit des Pegelneutral wird.


Anmelden zum Antworten