es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo generar ruido de color 2D

Estoy intentando generar sin éxito una matriz 2D de ruido rosa. ¿Alguien puede explicarme cómo hacerlo? Si no es posible, ¿existe alguna biblioteca de Python que permita generar ruido de color (ruido 1/f) en 2D (o en dimensiones superiores)?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El ruido rosa también conocido como ruido 1/f, tiene una densidad espectral que disminuye a medida que la frecuencia aumenta. Para generar una matriz bidimensional de ruido rosa, se pueden seguir los siguientes pasos:

    1. Genera una matriz bidimensional de ruido blanco, que tiene una densidad espectral plana en todas las frecuencias. Para esto, se puede utilizar la función numpy.random.rand().
    2. Aplica un filtro a la matriz de ruido blanco que genere la densidad espectral deseada. Para el ruido rosa, se puede utilizar un filtro que genere una ley de potencia 1/f. Una forma sencilla de hacerlo es dividir la matriz de ruido blanco por la raíz cuadrada de la frecuencia en cada punto en el dominio de Fourier, y luego tomar la transformada inversa de Fourier para obtener la matriz de ruido rosa filtrada.

    Aquí hay un código de muestra que demuestra este proceso:

    import numpy as np
    from scipy import fftpack

    Genera una matriz bidimensional de ruido blanco.

    shape = (512, 512)
    white_noise = np.random.rand(*shape)

    Calcula la transformada de Fourier bidimensional de la matriz de ruido blanco.

    f = fftpack.fftfreq(shape[0])[:, None] + 1j * fftpack.fftfreq(shape[1])[None, :]
    white_noise_fft = fftpack.fft2(white_noise)

    Genera el filtro 1/f en el dominio de Fourier.

    pink_noise_filter = 1 / np.sqrt(np.abs(f))
    pink_noise_filter[0, 0] = 0

    Aplica el filtro a la matriz de ruido transformado por Fourier.

    pink_noise_fft = white_noise_fft * pink_noise_filter

    Calcula la transformada inversa de Fourier de la matriz de ruido filtrado para obtener el ruido rosa.

    pink_noise = np.real(fftpack.ifft2(pink_noise_fft))

    Alternativamente, se puede usar la biblioteca “colorednoise” en Python, la cual proporciona funciones para generar ruido rosa, azul y marrón en una o más dimensiones. Para instalar la biblioteca, simplemente escribe “pip install colorednoise” en la terminal. Aquí hay un ejemplo de cómo generar una matriz bidimensional de ruido rosa utilizando esta biblioteca:

    import colorednoise as cn

    shape = (512, 512)
    pink_noise = cn.powerlaw_psd_gaussian(1, shape)

    En este ejemplo, la función “powerlaw_psd_gaussian” genera una matriz bidimensional con una función de densidad espectral rosa. El parámetro “1” especifica el exponente de la ley de potencia de la densidad espectral, que determina el grado de rosa. Especificar 1 da verdadero ruido rosa. Aumentar este valor se acerca al ruido blanco, mientras que disminuirlo se acerca al ruido marrón.

    Se debe tener en cuenta que el ruido rosa generado por el paquete colorednoise no es verdadero ruido rosa 1/f, sino simplemente un ruido de ley de potencia, por lo que existe una ligera diferencia en el cálculo.

Comments are closed.