rePhase, a loudspeaker phase linearization, EQ and FIR filtering tool

Administrator
Joined 2004
Paid Member
OK, how does one proceed? I think I understand the basics, let's see.
  • Passive filter
  • I know that my acoustic slopes are L/R 4th @ 825Hz (measured)
  • My box is vented, low Q, 35Hz
  • I enter those values in the Filters Linearizion tab
  • Export the impulse to use in a convolver.
  • I can check this impulse in HOLM to see how well it matches my measurements.
Are those the basic steps?
 
Hi Peter,
To do so you will only need to dial the filters you are using in your DCX in the "filter linearization" tab in rePhase, and generate an impulse for these (ideally you will want to dial your acoustical filters, not only the electrical ones...).
This is similar to phase arbitrator (which happen to have a user manual ;) )

Can this be done in a single impulse, or will there have to be phase correction for each channel separately?

I use J River's convolver but am having issues with their loopback using multi-channel convolution (I used rePhase to generate linear filters for my 3-ways), but others report that 2 channel convolution works fine. I'd like to build my crossovers in JR's PEQ and do the phase linearization if possible with a single impulse.
 
(moving rePhase and related phase linearization discussion over from the Hypex DCLP thread)

Interesting software! Have you implemented a real-time version?
It would be similar to Phase Arbitrator in its implementation I think (inverted overlapped buffers).
Arbitrator doesn't overlap the buffers, just emits them sequentially with whatever discontinuity in the output may result. If you grab the demo and measure THD with it in the loop with HOLMImpulse (or whatever; an audio interface with loopback is pretty useful here) you'll see the resulting distortion at low frequencies. I asked Jan about fixing this back in 2010 and he never responded. PLParEQ does overlap and window the buffers to produce very small and soft discontinuities but, as a result, uses quite a lot of CPU. It's also pretty expensive and that's after a 40% price drop when David sold Refined Audiometrics to Acudora.

I don't anticipate implementing a real time version of Cross Time DSP. The required window length in time reversed IIR goes to infinity as the center frequency of the correction goes to zero just like the number of taps in a phase correcting FIR goes to infinity. Time reversed IIR scales more poorly in terms of storage than FIR since with FIR there's only one window whereas IIR has to have multiple ones---actually quite a few of them if you're trying to make the merging between windows gentle enough to keep the numerical THD low enough that the platform's performance limits on -100 to -120dB THD in the DAC. So you tend to end up wanting something like a SHARC with an external RAM to run it on, though some applications fit in a single Cortex M4 with external RAM. I'm entirely capable of DIYing that but the VisualDSP++ license for the SHARC costs more than my entire stereo system and all of my instruments combined and a rackmount Atom still entails the overhead of keeping one's PC patched and having an audio interface for it. A multi-core M4 board would be kind of fun but, given how easy it is to do the reverse time pass once on my laptop at burn time and avoid the need for overlapping windows and computation, it's a low priority project. I have years' worth of higher priority projects...

1024 taps should be enough to correct even a LR 48khz at 100Hz with only minor phase deviation down low (and of course any other additional filter at higher frequencies).
The phase corrections on my subwoofers are LR4 at 40Hz and LR6 at 200Hz---the speaker build is documented in this thread. Blackman seemed to be the best window for doing the phase linearization, 200Hz LR6 XO, and dipole and driver EQ in a single filter at 44.1kHz (redbook). I agree rectangular's a better choice for phase linearization alone but of course it produces unhappy stopband attenuation on an XO. I didn't look especially hard at two FIR filter approaches but I didn't find any that resulted in a reduced number of taps. Probably the best way to go about it would be high precision IIR for XO and EQ and FIR for phase linearization. That seems to want around 2000 taps, more or less in line with your estimate.

fft convolution lead to much more taps available, still with less rounding errors than biquads
Well then, sir, you need better biquads. You can find a basic implementation here. :)

I think FIR has a bad reputation because it is always associated with semi-automated correction tools (which are sometimes really good, but require far more knowledge than it seems to operate correctly and not introduce more problems than solutions), steep filters (brickwall...), and delay.
For me it's mainly FIR CPU and storage requirements that shift the optimum solution IIR, though I have applications where delay is a factor as well. For cost effective, simple forward time phase correction FIR is certainly hard to beat and the miniSHARC is quite interesting as a way of enabling corrections at lower normalized frequencies. 800MMACs is somewhere around 18,000 total taps which is enough to run even my fairly demanding low frequency phase corrections, XO, and EQ all in FIR on redbook. Which is no bad thing as miniDSP probably isn't going to support biquads wth 64 bit coefficients and feedback. However, there are some things I want to explore which require more control over the platform than miniDSP has historically provided and that, in turn, leads me to choose less powerful hardware which can't crunch the FIRs I require. So I'm in IIR space for the time being, though the amount of taps a SHARC can get through with 1.2W of dissipation is pretty cool.
 
Last edited:
OK, how does one proceed? I think I understand the basics, let's see.
  • Passive filter
  • I know that my acoustic slopes are L/R 4th @ 825Hz (measured)
  • My box is vented, low Q, 35Hz
  • I enter those values in the Filters Linearizion tab
  • Export the impulse to use in a convolver.
  • I can check this impulse in HOLM to see how well it matches my measurements.
Are those the basic steps?

yes,to check the phase linearization,export from rephase with .txt file.
import impulse.txt with holm,you can see the opposite curve applied in the convoluton engine.

only a single stereo convolution is needed in front of crossover (analog,IIR,passive)
a better way is to make a mic measurement of loudspeaker,aplly theoritical phase rotation and adjust with the phase EQ tab in rePhase.

An externally hosted image should be here but it was not working when we last tested it.
 
Last edited:
two small feature requests

It's not well known, but the ES9016 and ES9018 DACs support user specified antialiasing filters. One interesting use of rePhase is to explore what sort of constrained phase response filters could be programmed into these DACs. However, this is difficult with the 0.9.2 build as it's limited to a maximum sampling rate of 192kHz and a maximum frequency in the response graph of 30kHz.

pos, if you could

1) add 352.8kHz, 384kHz, 705.6kHz, 768kHz, 1.4112MHz, and 1.536MHz to the list of supported sampling rates
2) add an option to select or specify the graph's maximum frequency (a checkbox for 30kHz versus Nyquist would be sufficient, though more granular control would be nice)

checking out these design possibilities would be quite a bit easier since the relevant sampling rate could be specified and the response seen. I'd make this change but I don't see source code available at sourceforge.
 
Great job on this pos.
I set up my Foobar configuration (foo convolver) a few weeks back to implement a simple three-way with the "Filters Linearization" portion and it really does work well.

Dave.
Thank you Dave!
Would you care to elaborate on your configuration and the gain you hear with phase linearization?
From the feedbacks I have so far it looks like it is more noticeable for low frequency crossovers (for example the subwoofer crossover), but I would be curious to have your opinion in a 3 way. What are your crossover frequencies?
 
OK, how does one proceed? I think I understand the basics, let's see.
  • Passive filter
  • I know that my acoustic slopes are L/R 4th @ 825Hz (measured)
  • My box is vented, low Q, 35Hz
  • I enter those values in the Filters Linearizion tab
  • Export the impulse to use in a convolver.
  • I can check this impulse in HOLM to see how well it matches my measurements.
Are those the basic steps?

Correct :)

When the motivation comes back I will try add a measurement import feature in a next version, to alleviate the need to check the impulse with HOLM (or REW) and be able to see the effect of a correction in realtime.
In the meantime you will have to use the C=A*B feature in either HOLM or REW...
 
Can this be done in a single impulse, or will there have to be phase correction for each channel separately?

I use J River's convolver but am having issues with their loopback using multi-channel convolution (I used rePhase to generate linear filters for my 3-ways), but others report that 2 channel convolution works fine. I'd like to build my crossovers in JR's PEQ and do the phase linearization if possible with a single impulse.

As Thierry pointed out only a stereo convolution with phase-only correction in front of an IIR filter should be enough if your (acoustical) filters are phase coherent.

If you use JRiver you can do the whole filtering with rephase without resotring to IIR filtering. Here is a small tutorial written by Jimmy Thomas that describe how to do it:

http://jimmy.thomas.free.fr/Jriver/Tuto-Jriver-RePhase-HolmImpulse.pdf

It is in French but here is an automated translation (the picture are missing so it needs to be read alonside the opriginal version...) :
Google Translate

(in french only, sorry, but maybe some online translation tool will be able to
 
It's not well known, but the ES9016 and ES9018 DACs support user specified antialiasing filters. One interesting use of rePhase is to explore what sort of constrained phase response filters could be programmed into these DACs. However, this is difficult with the 0.9.2 build as it's limited to a maximum sampling rate of 192kHz and a maximum frequency in the response graph of 30kHz.

pos, if you could

1) add 352.8kHz, 384kHz, 705.6kHz, 768kHz, 1.4112MHz, and 1.536MHz to the list of supported sampling rates
2) add an option to select or specify the graph's maximum frequency (a checkbox for 30kHz versus Nyquist would be sufficient, though more granular control would be nice)

checking out these design possibilities would be quite a bit easier since the relevant sampling rate could be specified and the response seen. I'd make this change but I don't see source code available at sourceforge.

Ok I will try to add these in the next version!
What format would you need? 32 bits IEEE754? txt file?
What are the exact frequency values in Hz?
Extending the graph range will be more difficult (it is fixed right now), but I will work on it.
I need to find some time and motivation to work on rephase again.

I would also like to add an oversampling feature to reduce the ripples Barleywater has noted.

As for the source code, it is not clean enough to be published yet I'm afraid :eek:
It was a test bench as well as a software, and adding features (and A GUI!) over and over in this configuration rapidly leads to something no one would be proud of :p
 
Know the feeling; I have some binaries in the public domain I hope people never see the sources for. They were written early in my career and have some embarassing noob things in the code. :rolleyes:

Thanks for the sampling rate adds. Those are the exact frequency values---they're just 8, 16, and 32x in the usual 44.1 and 48 series. The output formats already supported should be fine.
 
Administrator
Joined 2004
Paid Member
I just know that JRiver asks for a 1 second impulse length - but it works with less. Maybe it's not a frequency requirement, but a room EQ thing.
FWIW, I can never get an exact match in the bass, say below 30Hz, when exporting and re-importing an impulse in HOLM. Even at +/- 10K samples and seeing nothing out that far.
 
I just know that JRiver asks for a 1 second impulse length - but it works with less. Maybe it's not a frequency requirement, but a room EQ thing.
FWIW, I can never get an exact match in the bass, say below 30Hz, when exporting and re-importing an impulse in HOLM. Even at +/- 10K samples and seeing nothing out that far.

Yes, 10k samples at 48k sampling only gibe 4.8 Hz resolution and, as you note, you are probably not going to get the kind of accuracy needed from a measurement where the noise floor is maybe -50 or 60dB at best. That is a problem and it gets worse as the sample rate goes up.