[LAU] Re: How do I create a FIR-filter with opensource tools?
Fons Adriaensen <[email protected]>
| Newsgroups | gmane.linux.audio.users |
|---|---|
| Message-ID | <Z+Z6NdBTv/[email protected]> |
On Fri, Mar 28, 2025 at 12:47:06AM +0100, Michael Jarosch wrote: > Steps missing? Or am I totally wrong, here? What tools can I use? So you want both crossover and room correction filters. The first thing to do is to separate the two problems: 1. First implement the crossover processing. 2. Once you have that in place, measure the speakers and/or room and implement the correction filters. One reason is that (1) will affect (2), the other is that combining the two from the start is more complicated and a sure recipe for errors. When you have both, it would be possible to combine the two into a single FIR filtering operation, but there is nothing gained by doing this and I would advise strongly against doing this. 1. For the crossover you can use zita-lrx wich will provide 2, 3 or 4 way Linkwitz-Riley filters along with configurable gain and delay for each band. Zita-lrx is a command line Jack application. Once you have the correct configuration file you can run it with a single command which will also to care of Jack connections. 2. For speaker/room correction the best open-source solution is DRC (Digital Room Correction) by Denis Sbragion. <https://drc-fir.sourceforge.net/> DRC uses some quite sophisticated methods to 'invert' the measured responses. Doing this correctly is not as simple as you may imagine. For example you will need frequency- dependent windowing - at low frequencies you can correct both the room and the speakers, while for higher frequencies only the 'direct' sound should be corrected. The DRC manual goes into a lot of detail to explain all of this and you'll need some time to absorb and understand all of it. But AFAIK this is the only tool that gets it right. To measure the speaker/room response you can use the tool provided by DRC, or e.g. Aliki, or zita-jacktools (more about that later). To do the actual filtering you can use jconvolver. 3. An alternative approach is to use zita-jacktools for everything. This is a collection of DSP processsors. Each of them is a Jack application and also a Python class (the actual DSP is of course all done in C++). It has both crossover filters and convolution processors, and a lot more. Using this you could create a simple Python script that combines all the processing. One advantage is that since everyhing is controlled by Python, you can easily add a GUI (using e.g. PyQt) or remote control. You could also use zita-jacktools to automate all the measurements, so you can repeat them easily. Just write if you need more help. -- FA _______________________________________________ Linux-audio-user mailing list -- linux-audio-user-cunTk1MwBs/[email protected] To unsubscribe send an email to linux-audio-user-leave-cunTk1MwBs/[email protected]