2013-10-14 55 views
2

我想生成包含随机生成的粉红噪声的任意大小的二维图像。 Wikipedia suggests粉红噪声的二维推广将有能量下降为1/f^2。我发现some code on the MATLAB File Exchange计算一维粉红噪声矢量。但我不知道如何正确地将它推广到两个维度 - 我对fft不是很熟悉,当我计算ifft时,下面的天真尝试会产生复杂的向量。在Matlab中创建粉色噪声图像

function pink = pinkNoiseImage(nrow,ncol) 

rnrow = 2.^(ceil(log2(nrow))); 
rncol = 2.^(ceil(log2(ncol))); 
r = randn(rnrow,rncol); 
rf = fft(r); 
rnup = rnrow/2+1; 
cnup = rncol/2+1; 
frf = kron(1./sqrt(1:cnup),1./sqrt(1:rnup)'); 

rf(1:rnup,1:cnup) = rf(1:rnup,1:cnup).*frf; 
rf(rnup+1:rnrow,1:cnup) = real(frf(rnrow/2:-1:2,1:cnup))-1i*imag(frf(rnrow/2:-1:2,1:cnup)); 
rf(1:rnup,cnup+1:rncol) = real(frf(1:rnup,rncol/2:-1:2))-1i*imag(frf(1:rnup,rncol/2:-1:2)); 
rf(rnup+1:rnrow,cnup+1:rncol) = real(frf(rnrow/2:-1:2,rncol/2:-1:2))-1i*imag(frf(rnrow/2:-1:2,rncol/2:-1:2)); 

pink = ifft(rf); 

如何生成包含粉红噪声的2D矩阵?

回答

3

首先,不要总是相信维基百科告诉你什么。或者,仔细阅读,因为粉红噪声的定义对2D来说不是一对一的。 其次,您可以使用以下FEX file生成1/f^beta空间噪声,并具有正常的错误分布。在该文件的文档中阅读更多信息。

+0

感谢FEX参考。事实证明,由该文件计算的布朗噪声可能比粉红噪声更有用。 – nhowe