1
$\begingroup$

Follow up to the question here

This is a screen shot of an intermediate step in the middle of my calculation enter image description here

The dotted line called MY is supposed to be a smoothed version of db pow y db pow y is the magnitude squared represented in base 2 log scale, of the first half of a 128 point FFT In the every next iteration, I can see that db pow y changes drastically (it is the sound input data, so it may be anything at every step) while the graph for MY changes very very slightly

my question is , since MY is a smoothed version of db pow y, shouldn't it be running close to the graph of db pow y? I know that it will definitely not be closer to db pow y as it changes drastically at each iteration and MY changes very slightly, but I still do not understand exactly how this is supposed to work

Also, at points such as A in the graph above, the dotted line seems to "ignore" sharp variations in db pow y (as I would expect, since MY is smoothed version of db pow y), but then again, at positions such as B, the dotted line is the one changing drastically

Then, could you please explain to me how this is supposed to work?

This is the smoothing equation used:

    pDashS(i) = 0.2 * pDashS(i) + 0.8 * ((db_pow_y(i)-pres_minima(i)) > diff_between_db_pow_y_and_pres_min);
    alphaDTildS(i) = 0.95 + 0.05 * pDashS(i);
    MY(i) = alphaDTildS(i) * pastMY(i) + (1- alphaDTildS(i)) * db_pow_y(i);
    pastMY(i) = MY(i);

where i ranges from 1 to 64, half of a 128 point FFT

the actual line performing the smoothing is

MY(i) = alphaDTildS(i) * pastMY(i) + (1- alphaDTildS(i)) * db_pow_y(i);

which, from what I understand from answers to my previous questions, this is an example of a low pass IIR filter which performs smoothing on db_pow_y and alphaDTildS is the smoothing parameter

Please help

Thank you

(PS: code is in Matlab)

$\endgroup$

1 Answer 1

2
$\begingroup$

Your recursive smoothing equation will respond slowly to sudden fluctuations (that's why it's called smoothing!).

Try and change to:

alphaDTildS(i) = 0.7 + 0.3 * pDashS(i);

That should make it closer to the underlying signal - but also less "smooth"

$\endgroup$

Your Answer

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

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