1
$\begingroup$

When I used a simple FDN(Feedback Delay Network) to generate an impulse response, it sounded like a vibrate sound, and using FDN to process the pop music also had a distinctly unnatural and empty room feel. My code:

function y = fdn4(x)
    gain=[0.90 0.88 0.86 0.84];
    a = [0, 1, 1, 0; -1, 0, 0, -1; 1, 0, 0, -1; 0, 1, -1, 0]/1.414;
    b = [1 1 1 1] *1;
    c = [1 1 1 1] * 0.75;
    m=[743,1061,1297,1657];%1.25s

    y = zeros(size(x));
    mm = 2^nextpow2(max(m));
    z1 = zeros(1, mm);
    z2 = z1; z3 = z1; z4 = z1;

 for n = 1:length(y)
    tmp = [z1(m(1)) z2(m(2)) z3(m(3)) z4(m(4))];
    y(n) = c(1) * tmp(1) + c(2) * tmp(2) ...
        + c(3) * tmp(3) + c(4) * tmp(4) ;
    z1 = [(x(n) * b(1) + tmp * a(1, :).' * gain(1)), z1(1:m(1) - 1)];
    z2 = [(x(n) * b(2) + tmp * a(2, :).' * gain(2)), z2(1:m(2) - 1)];
    z3 = [(x(n) * b(3) + tmp * a(3, :).' * gain(3)), z3(1:m(3) - 1)];
    z4 = [(x(n) * b(4) + tmp * a(4, :).' * gain(4)), z4(1:m(4) - 1)];
    
 end
y=y.';

end

Is there a method to optimize FDN with a lower computation amount,so that it can sound more natural.

$\endgroup$

1 Answer 1

1
$\begingroup$

Is there a method to optimize FDN with a lower computation amount,so that it can sound more natural.

Sure, but it's a fair bit of work and requires careful tuning. A few pointers

  1. Your feedback matrix isn't dense enough. There should be no zeros in there.
  2. There is no spectral shaping into your delay lines. Natural reverbs have almost always lower reverb times are higher frequencies.
  3. Your implementation is very inefficient. Delay lines can be implemented much more efficiently with circular addressing (instead of copying data). Frame based processing can also speed things up a lot
  4. Consider adding some discrete early reflections
$\endgroup$
1
  • $\begingroup$ Thank you very much for your answer. For the first two points, I am experimenting with time-varying feedback moments and reasonable low-pass filters. The last two points have been optimized and improved. $\endgroup$ Feb 22, 2022 at 3:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.