Computing noise bands ("Albert Bregman, Tel: 514-398-6103" )


Subject: Computing noise bands
From:    "Albert Bregman, Tel: 514-398-6103"  <IN09(at)MUSICB.MCGILL.CA>
Date:    Wed, 2 Jun 1993 17:58:44 EDT

DEAR AUDITORY LIST MEMBERS: SOME TIME AGO, I ASKED THE LIST ABOUT METHODS FOR COMPUTING NARROW NOISEBANDS. HERE IS THE INFORMATION I RECEIVED. THERE IS A QUICK WAY TO FIND THINGS BY SEARCHING FOR THE KEYWORDS LISTED BELOW. (SECTIONS ON THE SAME TOPIC ARE SEPARATED BY A ROW OF #####. DIFFERENT TOPICS ARE SEPARATED BY A DOUBLE ROW OF ####.) - AL BREGMAN KEYWORD DESCRIPTION ------- ----------- $$DOSPROG PROGRAM THAT COULD WORK IN DOS, SENT BY STUART ROSEN (WRITTEN IN C). $$SUNPROG SAME AS ABOVE, BUT FOR SUN COMPUTER. $$SOFT-FILT SOFTWARE FILTERING OF RANDOM NOISE $$FREQ-DOMAIN METHODS INVOLVING SPECIFYING THE SIGNAL IN THE FREQUENCY DOMAIN. $$MATLAB METHOD USING MATLAB $$FORTAN USES FORTAN CODE TO DO ADDITIVE SYNTHESIS OF NOISE BANDS (ALSO FFT TO SUM THE SINUSOIDS $$ADDITIVE COMMENTS ON THE METHOD OF ADDITIVE SYNTHESIS (USING INVERSE FFT) $$LOWPASS MULTIPLYING LOW-PASS NOISE BY A SINUSOID $$REQUESTS PEOPLE WHO WANT TO BE TOLD WHAT I FIND OUT ################################################################# ################################################################# $$DOSPROG Date: Mon, 10 May 93 08:31:38 BST From: stuart(at)phonetics.ucl.ac.uk (Stuart Rosen) To: in09(at)musicb.mcgill.ca Re: Narrow bands of noise, III Sender: stuart(at)phonetics.ucl.ac.uk ----------------------------- Dear Al, Over the weekend I came across a DOS-able version of that program I sent you earlier. As I remember, it was the initial version, so I cannot be completely sure about what it does, and about how much the two versions differ. In essence, I would think they vary little. Anyway, here are the programs, with file names delimited by "????????". I used Turbo-C in developing this. I think everything is here, except the Numerical Recipes utilities. Give your programmer my address, and he can "talk" to me directly. But only until Friday. Good luck (again!). Yours - Stuart ?????? fluc_nz.c ??????? /********************************************************/ /* fluc_nz.c /* Generate noises that fluctuate on and off in any */ /* given band. */ /* Stuart Rosen /********************************************************/ #define PROGVERS "1.0" #define SAMP_FREQ 1000 #define RISE_TIME 0.0 /* These times in ms */ #define FALL_TIME RISE_TIME ETC. [FOR THE FULL PROGRAM, WRITE TO STUART] ################################################################# ################################################################# $$SUNPROG Date: Fri, 7 May 93 16:53:12 BST From: stuart(at)phonetics.ucl.ac.uk (Stuart Rosen) Message-Id: <9305071553.AA05312(at)pitch.phon.ucl.ac.uk> To: in09(at)musicb.mcgill.ca Re: Narrow bands of noise Sender: stuart(at)phonetics.ucl.ac.uk ----------------------------- Dear Al, Enclosed please find a C prgram to generate bands of noise. It actually is set up to generate waveforms which consist of an arbitrary number of noise bands, each of which can be modulated on and off. If you don't want modulation, just give a modulation rate of 0 when it asks. This version of the program was to run on a SUN or a MASSCOMP (labelled PDP12 here) and will certainly need some modification (but not much) for a PC. Certainly the clear_screen() command will need replacing with something simple. Also, you will need a number of the Numerical Recipes in C routines. If you don't have them, I can send the relevant ones. Below I have enclosed the relevant files, separated by a line of ?????'s. Good luck! Please let me know if you have any trouble, and I'll do what I can to help. It shouldn't take me too long to modify this for the PC, but I am in a bit of a rush for the ASA meeting in Ottawa. Still, I could give it a go! Yours - Stuart P.S. My luck with job searches seems to have taken a turn up recently. Have an offer from Iowa City, and the promise of one from Northwestern. See you in Ottawa? ????????????????????????????????????????????????????????????? /********************************************************/ /* fluc_nz.c */ /* Generate noises that fluctuate on and off in any */ /* given band. */ /* Stuart Rosen */ /* This version appropriate for Sun & Masscomp */ /********************************************************/ #define SUN 1 #define PROGVERS "1.0" #define SAMP_FREQ 1000 #define RISE_TIME 0.0 /* These times in ms */ #define FALL_TIME RISE_TIME ETC. [FOR THE FULL PROGRAM, WRITE TO STUART] ################################################################# ################################################################# $$LOWPASS Date: Fri, 7 May 93 15:22 BST From: BOB CARLYON <BOBC(at)EPVAX.SUSSEX.AC.UK> To: IN09 <IN09(at)MUSICB.MCGILL.CA> Subject: RE: Noise-band synthesis al, the easy way is to multiply a lowpass noise by a sinusoid. This will give a NBN with skirts in dB/Hz equal to that of the LPN, but as the NBN has a higher CF, this will be much steeper in dB/octave. The resulting noise will not be truly random, but for most purposes this doesn't matter bob We already did it this way. We'd like to be able to control the noise band more exactly. - Al ################################################################# ################################################################# $$FREQ-DOMAIN Date: Sun, 9 May 1993 15:31:50 +0200 From: Steve Mcadams <Steve.McAdams(at)ircam.fr> To: IN09(at)MUSICB.MCGILL.CA Subject: Re: Noise-band synthesis Al, Another way is to analyze a white noise signal with a phase vocoder which does a series of very short-term FFTs. You can then resynthesize the sound using inverse FFTs and set all off the frequency channels you don't want to zero. The resolution you get depends on a combination of the FFT window size and the sampling rate. E.g. if SR = 10240 Hz and the window is 512 points, you get each frequency channel having a width of 10 Hz. So your rolloff goes from maximum amplitude to zero in 10 Hz. There is a very fancy phase vocoder package here at IRCAM called SVP than allows such things. I could check into problems of distribution if you are interested. It runs in C primarily on DECStations, but they have made an effort recently for it to be portable to any other machine that runs UNIX. Steve ################################################################# ################################################################# $$SOFT-FILT Date: Fri, 7 May 93 00:07:55 -0700 From: Avery Wang <avery(at)gestalt.Stanford.EDU> To: "Albert Bregman, Tel: 514-398-6103" <IN09(at)MUSICB.MCGILL.CA> Subject: Re: Noise-band synthesis Reply-To: avery(at)ccrma.Stanford.EDU Hi Al- Well, you could make low-pass-filtered noise by injecting white noise into a tight elliptic filter and then frequency-modulating it up to your required center frequency by multiplying the resulting signal by cos(2 Pi i f0 t). You can design an elliptic filter (or a filter of any kind) using Matlab. How steep do the skirts need to be, how much ripple in the pass-band and stop band will you tolerate? What are your required bandwidths? What is your sampling rate? These are design parameters that a competent signal-processing engineer could take and derive filter coefficients for in less than 15 minutes. Would you know what to do if I gave you filter coefficients up to your design specs? In any case, the best way to get a band-pass filtered noise signal is to do the nasty stuff at a 0-center-frequency and then remodulate up. You could probably do this on a NeXT computer in real time on the DSP with 44.1 KHz output in stereo. What kind of computer are you running? Adding together sine waves bunched together with Schroeder phase is possible, but very inelegant and very computationally expensive. By the way, I'll still be around Stanford next year since I haven't been as fast as I thought I'd be in finishing my PhD after getting back from Germany. Since I'm sort of working on the cocktail party effect, it would be great to have you around. Do you know what kinds of things you'll be doing? I've been mostly working on DSP algorithms to extract multiple partials from mixtures of sounds, among other things. I'm also starting up a collaboration with Christoph Schreiner in auditory cortex physiology. cheers, Avery Wang Rains Apt. #15a 704 Campus Dr. Stanford, CA 94305 Tel: +1 (415) 497-7213 Fax: +1 (415) 723-8468 email: avery(at)ccrma.stanford.edu ################################################################# Date: Fri, 07 May 93 13:35:42 EDT From: "Albert Bregman, Tel: 514-398-6103" <IN09(at)MUSICB.MCGILL.CA> To: <avery(at)ccrma.Stanford.EDU> Subject: Re: Noise-band synthesis In-Reply-To: In reply to your message of THU 06 MAY 1993 13:07:55 EDT Avery, We tried designing an FIR filter because we have a program that will convolve it with a waveform (e.g., random noise. We used the Park-McLelland algorithm to design the filter but couldn't get very sharp skirts with a very narrow bandwidth, e.g., 30 Hz. I'm not sure how to filter using the coefficients for an elliptical filter. I do have some idea of how to transpose a band by AM. We need bandwidths from say 10 Hz up to a couple of hundred Hz with fairly sharp cutoffs (say not more than the bandwidth). We are running an IBM compatible 486 under DOS. It will be done offline, so computational time is not critical. ################################################################# Date: Thu, 6 May 1993 17:45:40 -0800 To: "Albert Bregman, Tel: 514-398-6103" <IN09(at)MUSICB.MCGILL.CA> From: Steve Saunders <saunders(at)interval.com> Subject: Re: Noise-band synthesis It sounds like you are interested in off-line, software synthesis -- true? Then another way to do what you ask is to make wideband noise (by any method) and filter it using a high-quality FIR or IIR bandpass filter. Some of the Macintosh sound-recording/modification programs can do this, I believe, if you supply the filter as a separate module. Some may even have very-sharp bandpass filters of high quality built in, but I can't attest to this. Try "Turbosynth", available in demo form in Internet ftp archives (I forget where I found it most recently -- not sumex-aim.stanford.edu). Steve ----- Steve Saunders Interval Research Corporation saunders(at)interval.com 1801-C Page Mill Road Palo Alto, CA 94304-1216 Thanks, Steve. We have tried FIR filters (designed by Parks- McLelland algorithm) but can't get the very narrow bands we need. That's why we want to take the synthesis approach. - Al ################################################################# To: IN09(at)musicb.mcgill.ca Subject: Re: Noise-band synthesis From: Les Niles <niles(at)parc.xerox.com> Sender: Les Niles <niles(at)parc.xerox.com> Date: Thu, 6 May 1993 13:30:39 PDT Another way would be to use an FIR digital filter with the spectral characteristics you want, and excite it with white noise (samples from a Gaussian distribution). I haven't tried this, but would think it would be an easier way to get something that really looks "noisy." -les niles(at)parc.xerox.com We've tried this method, but find it hard to control the shape of the spectrum with any precision. Also we have trouble getting sharp skirts on narrow bands. That's why I was looking for a synthesis method. - Al ################################################################# ################################################################# $$FORTRAN Date: 06 May 1993 16:07:49 -0400 (EDT) From: WSW(at)buenga.bu.edu Subject: Re: Noise-band synthesis To: IN09(at)MUSICB.MCGILL.CA Message-id: <01GXV07Q4WKM8WWHT3(at)buenga.bu.edu> X-VMS-To: IN%"IN09(at)MUSICB.MCGILL.CA" MIME-version: 1.0 Content-transfer-encoding: 7BIT Al, I have been making my noise bands using the method you mentioned, but with FORTRAN, not C. If you'd like the FORTRAN code I'll clean it up a bit and send it your way. Bill Woods ================================================= Date: 06 May 1993 16:22:02 -0400 (EDT) From: WSW(at)buenga.bu.edu Subject: Re: Noise-band synthesis To: IN09(at)MUSICB.MCGILL.CA Al, Again on the noise bands - because I have used FORTRAN and some canned FORTRAN inverse FFT routines, porting my code to what you need may be more than work than one would like to take on. I could, instead, e-mail the algorithm, describing what my code does and what it produces. The algorithm is basically as you described, summing up sinusoids with random phases and amplitudes, but uses the inverse FFT to do the summing up once the amplitudes and phases are specified. The skirts can be infinite, and one can do tricks with the amplitudes and phases other than creating infinite skirts (for example, make all the noise waveforms have exactly the same energy, or the same spectral profile, put in a constant phase shift across frequency, etc.). In these examples one does not necessarily obtain exactly Gaussian noise (as you may know, for Gaussian noise the amplitudes have a Rayleigh distribution, and the phases are uniformly distributed between pi and 2*pi), but one may not wish to. In any event, someone probably has the C code for exactly what you need. I just enjoy the convenience of this method, and talking about it. Bill Woods ################################################################# ################################################################# $$ADDITIVE To: "Albert Bregman, Tel: 514-398-6103" <IN09(at)MUSICB.MCGILL.CA> Subject: Re: Noise-band synthesis In-Reply-To: Your message of "Thu, 06 May 93 15:58:59 EDT." <9305062002.AA19877(at)media.mit.edu> Date: Thu, 06 May 93 16:18:34 -0400 From: "Bill Gardner" <billg(at)media.mit.edu> X-Mts: smtp Al, The method of using densly packed sine waves should work perfectly well. Another more efficient method might be to use a large inverse Fourier transform, initializing the spectrum to unit magnitude in the band of interest (0 elsewhere), with random phases, and making sure the spectrum is conjugate symmetric. The inverse Fourier transorm of this will be equivalent to evenly spaced sinusoids with random phase. You will probably want to use a pretty large transform size to keep the spacing of the sinusoids small. I don't have any code that does this particular synthesis method, but it is not difficult to write. Sincerely, Bill Gardner ################################################################# ################################################################# $$MATLAB Date: Thu, 6 May 93 18:48:03 EDT From: jba(at)spectrum.research.att.com (Jont Allen) To: IN09(at)MUSICB.MCGILL.CA Subject: Re: Noise-band synthesis The best way, I think, is to use matlab, and load the bins of an FFT, with the amp and phase of the tones, and then inverse fft. You can then trim it with windows if you like. Jont =================================== Date: Fri, 7 May 93 14:08:22 EDT From: jba(at)spectrum.research.att.com (Jont Allen) Message-Id: <9305071808.AA26089(at)spectrum.research.att.com> To: IN09(at)MUSICB.MCGILL.CA Subject: Re: Noise-band synthesis If you want to generate the noise in matlab, I can give you a program. Depending on the platform, you can also listen to it directly from matlab. This would make everything very simple. Matlab is about as easy as any programing language that you are ever going to learn. It is much easier than C. It also has built in graphics, and a lot of signal processing stuff, such as the fft, filter design, etc. Jont ################################################################# ################################################################# $$REQUESTS Date: Mon, 10 May 1993 16:14:37 -0500 From: Lippold Haken <lippold(at)cerl.uiuc.edu> Message-Id: <199305102114.AA25621(at)uinova.cerl.uiuc.edu> To: IN09(at)musicb.mcgill.ca Subject: Noise-band synthesis Hi! I would be interested in narrow-band noise algorithms, also! I am especially interested in table-driven algorithms, or other algorithms which are well suited for real-time implementation. Thanks! ----------- I'll post a list of available programs to the list when I get them. - Al ################################################################# Date: Fri, 7 May 93 08:52:46 -0500 From: arty(at)jetsam.psy.sunysb.edu (Arthur Samuel) To: IN09(at)musicb.mcgill.ca Subject: Me too Al, Hi. If you get a good program for doing the noise-band synthesis, I'd appreciate access to it too. As you say, this is a lazy man's way, but that makes a lot of sense -- why reinvent the wheel? I don't have an immediate application for the noise algorithm, but I can certainly envisage some (e.g., some restoration experiments with selected frequencies for the noise). Thanks, Arty You are welcome to have whatever I get. So far only one ready-to-go program has materialized, and I'm still exploring options. - Al #################################################################


This message came from the mail archive
http://www.auditory.org/postings/1993/
maintained by:
DAn Ellis <dpwe@ee.columbia.edu>
Electrical Engineering Dept., Columbia University