partial tracking for noise reduction

    Aug 11 2010 | 11:21 am
    Hello everybody,
    I face a very difficult question. To sum up a very long story in short, I want to "denoise" (remove the blower noise) pipe organ samples . See file attached.
    I have tested quite all possible NR tools (Izotope RX, Waves VST, and lots of others, etc.) and I'm sure it is possible to do better.
    Now I would like to test new things . 1) first to do some "partial tracking", and separate partials from noise in Max/MSP with less artifacts possible 2) to be able to deal separately the "partial part" and the "noisy part"
    Could someone help me in order to do first partial tracking + resynthesis in max/msp ?
    I can't make fiddle~ or sygmund~ work in my Windows environment.
    PS : This question in general, is a very difficult problem that face all organ "sample-set makers". I do some tests with lots of softwares since at least 2 years. I'm sure it's possible to find a solution , so I continue searching about that question ...

    • Aug 11 2010 | 1:36 pm
      The sigmund~ help file has an example of partial tracking / resynthsis. Otherwise - try the CNMAT objects for this, or gabor from IRCAM. Those are the well known examples.
      In terms of your task more generally, without meaning to be too discouraging I would say that I don't believe you will find it at all easy to beat the tools you are talking about, and to do so in max msp would be very hard indeed without a large amount of experience. I say that as someone who is at this time writing a plug-in (in C++) for noise reduction, and examining various up-to-date techniques, as well as looking for new improvements to add. Partial awareness (if not tracking) is on the consideration list. However, the nature of your material is quite sinusoidal, so separating the parts may improve things....
      The main problem you have is the low SNR of your recording. Even the best NR algorithms don't tend to work that wonderfully under these conditions.
      On a more positive note, you might try using already available software to separate deterministic and noise based content and then treat them with the tools you described, followed by recombining the results. YOu should note that it isn't necessary to do full partial tracking / resynthesis to separate the sound in this way.
      You could look at wavethresh here which does other stuff but I believe can be used for the separation (it is also possible to denoise using wavelets in wavethresh, but I've never used it as I am not windows-based)
      You could also try analysing and re-synthesing the most prominent partials using a program like SPEAR (making sure you resynthesize with phase and then subtracting from the original to obtain the noise part.
      I believe stefan tiedje developed some java tools for MAxMSP that did the separation by median filtering the spectrum and picking content above the filter (times a threshold) as an indicator of noise or sinusoid. That work was public - some googling may well turn it up.
      Finally, you may get somewhere with manually reducing the process around partials in the frequency editor of your noise reducer. Obviously, that is long and tedious for many samples, but it might get better results than other techniques...
    • Aug 11 2010 | 1:51 pm
      Also - be great to know how you get on, and if you find an approach that does work well...
    • Aug 11 2010 | 5:45 pm
      I know that is possible to have good results, because I know people who achieved to do it with impressing results, even if the SNR is low (this is because the signal is close to something very constant, sinusoidal). (Unfortunately, their method is not available for property reason.)
      > you might try using already available software to separate deterministic > and noise based content and then treat them with the tools you > described, followed by recombining the results. Which software are available to do such a separation, for windows ? (wavetresh doesn't seem to work on my host!).
      > YOu should note that it isn't necessary to do full partial tracking / > resynthesis to separate the sound in this way. Could you explain ? Do you mean that harmonic/noise separation doesn't use partial tracking ? I thought partial tracking was needed in order to do a sinusoidal/noise separation...
      Thanks again for all , jebb
      Ps: On windows, I haven't found any ready-to-use example of partial tracking and/or resynthesis. It would be useful because I'm really new to MaxMsp. Does someone know if sygmund~ is available for windows ?
    • Aug 11 2010 | 6:06 pm
      Are the people making a commercial product? If so, is it possible to check out their results, or tools at all?
      Harmonic / Noise separation may not require 'tracking' - it may be enough to find the peaks, without joining them into tracks ( that's how wavethresh does it).
      I think it's also possible to do some kind of median filter based separation without peak finding at all (but it's been a while since I looked at this, so I might be wrong). The median filter is used to estimate the spectral noise floor
      There is some stuff you could look at here:
      There are a couple of other partial tracking / resynthesis options
      Gabor is available for windows:
      CNMAT objects are also available for windows:
    • Aug 11 2010 | 6:37 pm
      Turns out gabor.devoice in the examples can do the separation.
    • Aug 11 2010 | 6:48 pm
      Hi, I just had tested gabor.devoice, between your two last posts. I tested with the bourdon8.wav file that I've posted.
      And the problem is that, even if I choose "1" partial, it constantly jumps between one partial to another... Resulting in a highly artefacted sound ! Do you have an idea of what to do in order to force the resynthesis of only the harmonics of a constant pitch (which can be given by text input) ?
      (Example : for the file bourdon8.wav it is 444hz.)
      Thanks a lot again
    • Aug 11 2010 | 6:58 pm
      I don't know how (or even if you can) do this with gabor.
      The jumping is precisely because it is not tracking - so whichever peak is biggest will probably be chosen. I'd advise using a few more partials than that. I doubt you'll acheive perfect separation, because of the low SNR and semi-pitched character of the noise content (which will also be chosen as peaks)...
    • Aug 11 2010 | 8:32 pm
      Also - if you know the frequencies you are interested in and they are static, why not try filtering everything else using some kind of FFT filter and then apply noise reduction to deal with any pre/post noise or other residual?
    • Aug 11 2010 | 8:40 pm
      I'm so new to MAX/MSP that I would even be unable to do a simple patch in order to do that. Would you help me ?
    • Aug 13 2010 | 5:03 pm
      Let f0 be the fundamental frequency. How would you do a patch in order that I can separate a soundfile in :
      FIRST PART = All the harmonics of f0 , i e : all the frequencies in the range [f0-eps, f0+eps] union [2*f0-eps, 2*f0+eps] union [3*f0-eps, 3*f0+eps] union [ ... ] etc. (where eps=epsilon is a small value)
      SECOND PART = Original file - FIRST PART (this will be easy by substraction).
      Thanks a lot in advance, I don't know how to design this in Max/Msp.