使用matlab / octave制作灰色音频噪音

时间:2018-06-06 00:24:57

标签: matlab octave noise noise-generator

我可以通过选择下面使用的其他 invfnorm 变量,使用以下代码段创建粉红色,棕色,蓝色音频噪声,但是如何创建灰度噪声?

%https://en.wikipedia.org/wiki/Colors_of_noise

mean_amp=mean(yamp_orig.^2); %get mean of all freq amplitudes
amt_of_freq=size(xfreq_orig,1); %number of freq

%invfnorm=1./[1:amt_of_freq]; % 1/f creates pink noise
%invfnorm=[1:amt_of_freq]; % f creates blue noise
invfnorm=1./[1:amt_of_freq].^2; % 1/f^2 creates brown noise

amp_1f_new=sqrt(mean_amp*invfnorm/sum(invfnorm))(:); %new noise amplitudes to use

在链接https://en.wikipedia.org/wiki/Colors_of_noise中,他们给出了粉红色,棕色,蓝色音频噪声的公式,但对于灰色噪声,他们只是说它是“倒A加权曲线”没有显示配方,我只需要配方。 见下面的频谱。

Grey noise 我获得这些信息的网站位于grey noise

Ps:我使用的是Octave 4.2.2,类似于matlab

1 个答案:

答案 0 :(得分:1)

正如您所提到的,灰色噪声是通过应用反a加权曲线创建的。

以下代码段是Matlab example(感谢W. Owen Brimijoin),用于生成灰色噪音:

%values from the ISO 66-phon Equal-loudness contour (adjusted for
        %optimal spline interpolation):
        freqs = [1 5 15 36 75 138 235 376 572 835 1181 1500 2183 2874 3718 ...
            4800 5946 7377 9051 10996 13239 15808 18735 22050].*sample_rate/44100;
        dB_vals = [61 61 56 40 25 17 11 7 5 4 6 8 3 1 1 4 9 14 17 16 10 5 2 1];

        %create level vector for use in inverse Fourier transform:
        freq = linspace(0,sample_rate/2,floor(num_samples/2));
        spl = spline(freqs,dB_vals,freq); %upsample 
        levels = [spl,fliplr(spl)]; %reflect vector
        levels = 10.^(levels'./10); %change to power
        levels(levels==inf) = 0; %remove infinite values
        phase_vals = rand(length(levels),1); %generate random phase vals
        %now apply an inverse fft:
        wave = real(ifft(sqrt(levels).*(cos(2*pi*phase_vals)+1i*sin(2*pi*phase_vals))));
        wave = wave./max(abs(wave));

levels = the inversed a-weighting array

此示例创建一个灰度噪声振荡器,并在将信号转回时域之前将频域滤波器应用于信号。

正如你所提到的,你说你只需要公式,所以也许这条特定的线有助于最多(一旦你已经计算出反向的a加权曲线):

wave = real(ifft(sqrt(levels).*(cos(2*pi*phase_vals)+1i*sin(2*pi*phase_vals))));

如代码开头所述,这是使用66 phon曲线,因此如果您想使用不同级别的phon,则可能需要调整dB_vals数组。

如果有必要,我发现this function对于计算加权的各种phon曲线非常有用。