Gracias por comentar. Si exactamente, solamente hay que sumarlos. Los únicos cuidados a tener es que al estar generando un código y pretender sumar dos variables, tienen que tener la misma longitud. Esto se soluciona al crear el ruido asegurándose que tenga la misma duración total (desde la generación o cortando la cantidad de muestras). Por otro lado, es muy práctico definir dos constantes antes de sumar la variable que contiene al ruido con la señal de audio disponible, para probar distintas "mezlas". Ejemplo: supongamos que tenemos una variable denominada audio y otra ruido (de la misma longitud). audio2=a1*audio+a2*ruido; Si se desea poco ruido entonces a2 tiene que ser pequeño comparado con a1. Al utilizar la instrucción sound(audio2,fmuestreo) se escuchará la mezcla. Esta instrucción da por supuesto que audio2 tiene un valor máximo de amplitud 1. Al sumar el ruido podría darse el caso de que la suma total supere ese máximo y se provoque un sonido de distorsión. Solución 1: utilizar la instrucción soundsc(audio2,fmuestreo). Esta función autoescala el nivel sonoro. Solución 2: definir audio2b=audio2/max(audio2)*0.8; Donde 0.8 es un margen de seguridad (arbitrario, que puede cambiarse a gusto, siempre que no supere 1).
Entiendo que debería ser ruido blanco gaussiano, mejor que una distribución uniforme. Entonces la varianza que le pongas (la media debe ser nula) estará relacionada con la potencia de ruido que quieras tener.
Es un excelente comentario. Si bien en muchas áreas de ciencia e ingeniería se prefiere el ruido blanco gaussiano, no es común en audio, donde lo más típico es usar una distribución uniforme. Cuando el ruido incorporado pueda ser utilizado por ejemplo para análisis estadísticos más complejos, puede ser importante que sea gaussiano para no generar falsas alertas de autocorrelación donde no las hay. En audio, este tipo de finalidad es sumamente rara. Tu comentario me tentó a hacer un pequeño video al respecto para mostrar las diferencias desde distintos puntos de vista (subiré en los próximos días este video al canal, citando tu comentario como disparador). La idea de ese próximo video es analizar y comentar las semejanzas y diferencias de los distintos modos de obtener ruido blanco. En Matlab es posible obtener ruido gaussiano de dos maneras diferentes: con la función randn() y con wgn() por white gaussian noise. Generé también un segundo de ruido blanco en forma completamente controlada de dos modos diferentes. El primero fue sumando todas las componentes posibles en una muestra de un segundo con amplitud constante y con fase aleatoria. El segundo trabaja sobre el mismo principio pero además de las fases aleatorias se agrega amplitud aleatoria de cada componente. Por último generé ruido blanco con Audacity que es un programa de edición de audio de código abierto muy conocido y utilizado. El video compara todos estos "ruidos blancos". De hecho, si tu o cualquier otra persona que se haya atrevido a leer el comentario conocen un programa de edición de audio que utilice ruido verdaderamente gaussiano, me interesaría saberlo. (Dicho sea de paso, en el video que prepararé pienso explicar cómo analizar el tipo de distribución de un archivo de audio de ruido blanco que tengamos disponible).
@@JorgePetrosino Me parece fenomenal lo de los videos. Efectivamente, yo estaba pensando en señales de radar, no de audio, donde el AWGN es lo usual. Gracias por tu respuesta.
Tanto Matlab como Octave disponen de instrucciones muy sencillas para cargar y descargar audio. Supón que tienes un archivo de audio llamado "sonido.wav". Debe estar en el directorio que usas en Matlab. Tienes que escribir >> [y,fs] = audioread('sonido.wav') Esto leerá el audio y lo colocará en una variable llamada y. Luego defines el ruido (de la misma duración del sonido por ejemplo). Para eso, necesitas determinar la duración del sonido en muestras >> cantMuestras=length(y); >> A=0.1; % Amplitud del ruido elegido >> ruido=A*2*(rand(cantMuestras,1)-0.5); >> yConRuido=y+ruido; Si quieres exportar el resultado a un archivo wav debes usar >> audiowrite('sonidoConRuido.wav', y , fs);
El siguiente video del canal muestra cómo hacer una mezcla de audio monoaural con Matlab a partir de archivos de audio wav. Allí puede haber otras indicaciones que te resulten útiles. ruclips.net/video/Cqiiy_RKR20/видео.html
Gracias por la información! Justo a tiempo, saludos desde Guadalajara, México!
Me alegro que haya sido útil. Gracias por comentar. Retribuyo los saludos desde Buenos Aires, Argentina
Gracias por el video, una consulta, deseo que este ruido se agregue a una señal de audio previa, bastaría con sumarlo con esa señal no?
Gracias por comentar. Si exactamente, solamente hay que sumarlos. Los únicos cuidados a tener es que al estar generando un código y pretender sumar dos variables, tienen que tener la misma longitud. Esto se soluciona al crear el ruido asegurándose que tenga la misma duración total (desde la generación o cortando la cantidad de muestras). Por otro lado, es muy práctico definir dos constantes antes de sumar la variable que contiene al ruido con la señal de audio disponible, para probar distintas "mezlas". Ejemplo: supongamos que tenemos una variable denominada audio y otra ruido (de la misma longitud).
audio2=a1*audio+a2*ruido;
Si se desea poco ruido entonces a2 tiene que ser pequeño comparado con a1.
Al utilizar la instrucción sound(audio2,fmuestreo) se escuchará la mezcla. Esta instrucción da por supuesto que audio2 tiene un valor máximo de amplitud 1. Al sumar el ruido podría darse el caso de que la suma total supere ese máximo y se provoque un sonido de distorsión. Solución 1: utilizar la instrucción soundsc(audio2,fmuestreo). Esta función autoescala el nivel sonoro.
Solución 2: definir audio2b=audio2/max(audio2)*0.8;
Donde 0.8 es un margen de seguridad (arbitrario, que puede cambiarse a gusto, siempre que no supere 1).
Entiendo que debería ser ruido blanco gaussiano, mejor que una distribución uniforme. Entonces la varianza que le pongas (la media debe ser nula) estará relacionada con la potencia de ruido que quieras tener.
Es un excelente comentario. Si bien en muchas áreas de ciencia e ingeniería se prefiere el ruido blanco gaussiano, no es común en audio, donde lo más típico es usar una distribución uniforme. Cuando el ruido incorporado pueda ser utilizado por ejemplo para análisis estadísticos más complejos, puede ser importante que sea gaussiano para no generar falsas alertas de autocorrelación donde no las hay. En audio, este tipo de finalidad es sumamente rara.
Tu comentario me tentó a hacer un pequeño video al respecto para mostrar las diferencias desde distintos puntos de vista (subiré en los próximos días este video al canal, citando tu comentario como disparador).
La idea de ese próximo video es analizar y comentar las semejanzas y diferencias de los distintos modos de obtener ruido blanco.
En Matlab es posible obtener ruido gaussiano de dos maneras diferentes: con la función randn() y con wgn() por white gaussian noise. Generé también un segundo de ruido blanco en forma completamente controlada de dos modos diferentes. El primero fue sumando todas las componentes posibles en una muestra de un segundo con amplitud constante y con fase aleatoria. El segundo trabaja sobre el mismo principio pero además de las fases aleatorias se agrega amplitud aleatoria de cada componente. Por último generé ruido blanco con Audacity que es un programa de edición de audio de código abierto muy conocido y utilizado. El video compara todos estos "ruidos blancos".
De hecho, si tu o cualquier otra persona que se haya atrevido a leer el comentario conocen un programa de edición de audio que utilice ruido verdaderamente gaussiano, me interesaría saberlo. (Dicho sea de paso, en el video que prepararé pienso explicar cómo analizar el tipo de distribución de un archivo de audio de ruido blanco que tengamos disponible).
@@JorgePetrosino Me parece fenomenal lo de los videos. Efectivamente, yo estaba pensando en señales de radar, no de audio, donde el AWGN es lo usual. Gracias por tu respuesta.
Cómo le puedo sumar este ruido a una señal de audio????
Tanto Matlab como Octave disponen de instrucciones muy sencillas para cargar y descargar audio.
Supón que tienes un archivo de audio llamado "sonido.wav". Debe estar en el directorio que usas en Matlab. Tienes que escribir
>> [y,fs] = audioread('sonido.wav')
Esto leerá el audio y lo colocará en una variable llamada y.
Luego defines el ruido (de la misma duración del sonido por ejemplo).
Para eso, necesitas determinar la duración del sonido en muestras
>> cantMuestras=length(y);
>> A=0.1; % Amplitud del ruido elegido
>> ruido=A*2*(rand(cantMuestras,1)-0.5);
>> yConRuido=y+ruido;
Si quieres exportar el resultado a un archivo wav debes usar
>> audiowrite('sonidoConRuido.wav', y , fs);
El siguiente video del canal muestra cómo hacer una mezcla de audio monoaural con Matlab a partir de archivos de audio wav. Allí puede haber otras indicaciones que te resulten útiles.
ruclips.net/video/Cqiiy_RKR20/видео.html