Hi Fons,
thanks for your comments! Sorry for replying so late ;)
On 5/21/2023 11:24 AM, Fons Adriaensen wrote:
On Sat, May 20, 2023 at 05:15:03PM +0200, Florian Paul
Schmidt wrote:
1. Are there any glaring oversights with this
approach?
The minimum phase step is not really necessary, you could just use the
linear phase version, the output of the IFFT rotated by half its size.
Yeah, I want to use this in a real-time context though, so the initial
delay in the linear-phase version is non-acceptable.
If you do the minphase operation, the best way to do
this using an FFT
that is at least 4 times as long as your IR. In other words, take the
linear phase version in the time domain, add zeros, then do the
minphase calculation.
Yeah, I will try and incorporate that!
This probably should not depend on the absolute
values, just on the
ratio, i.e. the calculated gain. If r = s2 / s1 you could impose a
smooth maximum:
g = r / sqrt (1 + M * r * r) with M in the range 1e-3 to 1e-2
Or you could even reduce the gain if r is really very high (which
probably means there is nothing of value in s1 at that frequency:
g = r / (1 + M * r * r * r) with M in range 1e-5 to 1e-4
Try this in gnuplot:
plot [0:100] x / sqrt (1 + 1e-2 * x * x), x / sqrt (1 + 1e-3 * x * x)
plot [0:100] x / (1 + 1e-4 * x * x * x), x / (1 + 1e-5 * x * x * x)
to get an idea of what these will do.
Looks good!
Average levels in the two input files should be more
or less
matched, before applying any of these.
Couldn't I just compute the sum of the squares of the fft bins to get
the total energy in both s1 and s2 and normalize both to e.g. 1?
Kind regards,
FPS
--
https://dfdx.eu