0
votes

making pink noise (1/f) using list of frequencies

I would like to see what type of noise I would get if I used just the frequency in my voice. I created a matlab/octave array using fft to get the [frequency,amplitude,phase] to reproduce my vocal signal.

I would like to take this file/data and use it to create pink noise (1/f). Of course when I use 1/f for the frequency the numbers become very small does anyone have any ideas how to use my own vocal frequencies that I get from doing a fft in matlab to create pink noise (1/f).

Thanks

2

2 Answers

1
votes

If I am correct, what you are doing is generating noise based on a 1/f frequency. However if you read the following article: http://en.wikipedia.org/wiki/Pink_noise the frequencies are the same except that the power spectral density is S is proportional to 1/f. Hence you should not be generating noise of frequency 1/f.

I would suggest reading this page for the necessary algorithms.

However if the problem you are facing is that the volume is too low, try amplifying the synthesized noise by multiplying the result by a factor ex.: pinkNoise = pinkNoise * 100

0
votes

This might do the trick: compute the mean power in your spectrum from the amplitude A = A(f), where f is the frequency.

P = mean(A.^2);

Spread that over your frequency range:

N = length(f);
invfnorm = 1./[1:N];
Anew = sqrt(P*invfnorm/sum(invfnorm));

Anew has the property of having the same total power density as the original spectrum, and power decaying as 1/f.

Substitute Anew for A and inverse FFT your new spectrum to generate the new waveform.