Check the new version here

Popular channels

Algunos Comandos Básicos Para el Manejo de Señales en Matl

Comandos Básicos Para el Manejo de Señales en Matlab





Efecto Clipping

El Clipping ocurre cuando una señal excede los límites del diseño, causando distorsión por sus altos componentes de frecuencia.

Onda seno dentro del rango [-1 1]En la anterior gráfica se puede apreciar que la señal no excede los límites de una señal sinusoidal, definida en el rango [-1,1]. En este caso la señal es exactamente una replica de la señal de entrada.

Onda seno con valores fuera del rango [-1 1]En la anterior gráfica se puede apreciar cómo la onda sobrepasa los niveles para los cuales está definida una onda senosoidal. En este caso la señal sobrepaso los niveles de la señal de entrada ocurriendo el efecto de Clipping.

Onda seno corregidaEn esta gráfica se puede ver cómo la señal se corrige, eliminando los componentes altos de frecuencia, razón por la cual los componentes que están por encima de 1 y por debajo de -1 se pierden.



Manejo de archivos de sonido

Para capturar una señal por la entrada auxiliar de la tarjeta de sonido del computador, MATLAB cuenta con la función wavrecord(t*Fs,Fs,Ch) cuyos parámetros corresponden al tiempo en segundos de captura de la señal, frecuencia de muestreo (admite 8000, 11025, 22050 y 44100), el tipo de canal (1 para mono y 2 para stereo).

Si se desea capturar una señal en stereo con 5 segundos de duración, con una frecuencia de muestreo de 11.025 podemos emplear las siguients funciones:

Fs = 11025;
y = wavrecord(5*Fs, Fs, 2);

Para guardar una señal capturada en formato wav se puede hacer uso de la función wavwrite(y,Fs,NBits,'Nombre.wav') cuyos parámetros corresponden a la señal grabada, la frecuencia de muestreo, el número de bits (puede ser 8, 16, 24 o 32) y el nombre del archivo en el cual se grabará el sonido. Hay que tener en cuenta que los valores de amplitud que estén fuera del rango [-1,+1] son clipeados.

Si no se especifican los NBits el programa asume por defecto 16 Bits.
Si no se determina una Fs, el programa asume por defecto 8000 Hz.
Por ejemplo, para guardar el sonido capturado anteriormente se empleará el siguiente comando:
wavwrite(y,Fs,16,'sonido_uno.wav')

Para escuchar o manipular vectorialmente un sonido almacenado en formato wav se utilizan dos comandos.

wavread('File.wav')
sound(Var)

Para el ejemplo anterior File es el nombre del archivo que se desea escuchar, los valores de amplitud deben estar en el rango [-1,+1].
La variable Var corresponde al vector que se desea escuchar cuya frecuencia de muestreo por defecto será de 8192 Hz.
Si se utiliza sound(var,Fs) el resultado será un sonido con una frecuencia de muestreo definida por el usuario. Se asume que los valores están dentro del rango [-1,1] ya que los valores que están fuera del rango son clipeados.
Si se emplea sound(var,Fs,Bits) sonará con una frecuencia de muestreo definida por el usuario y determinados número de Bits por muestra.

Por ejemplo, para escuchar la señal guardada anteriormente como sonido_uno, se asigna a una variable s el comando wavread y luego se escucha con el comando sound.

s= wavread('sonido_uno.wav');
sound(s,44100)

Si se desean conocer los datos de un archivo en formato wav, como los valores del vector, su frecuencia de muestreo o el número de bits NBits por muestra, se emplea la siguientes sintaxis:

[y,Fs,NBits]=wavread('file.wav')

En la variable y se almacenan los valores del vector, en la variable Fs se almacena la frecuencia de muestreo y en la variable Nbits se almacena el número de bits por muestra del archivo con formato wav. Si se desea saber la dimensión de los canales del archivo en formato wav, se utiliza el siguiente comando:

siz=wavread('file.wav','size')

En la variable siz se almacena la dimensión del archivo en formato wav.

Si se desean leer las primeras N muestras del archivo en formato wav se emplea el siguiente comando:

=wavread('file.wav',Num)

En donde la variable Num corresponde a la cantidad de muestras que se desean tomar del archivo.

Si se desea obtener la información adicional contenida en un archivo de formato wav, como el copyright o el título, se emplea el siguiente comando [y,Fs,NBits,Opts]=wavread('file.wav')
En la variable y se almacenan los valores del vector, en la variable Fs se almacena la frecuencia de muestreo, en la variable Nbits se almacena el número de bits por muestra y en la variable Opts se almacena el resto de la información.



Transformada Rápida de Fourier [FFT]

Si se desea obtener la transformada rápida de Fourier, se utiliza la sentencia x=abs(fft(vector a trabajar)) en donde abs se refiere al valor absoluto o a la magnitud. Por su parte fft(x) es la transformada discreta de Fourier de un vector x.

Los archivos violin.wav y flauta.wav se almacenaron anteriormente con el comando wavwrite. Se necesita hacer una gráfica espectral de sus señales, además se desea saber cuál fue el tamaño de las muestras y si las señales capturadas tienen uno o dos canales (Dimensión Vectorial).

v=wavread('violin.wav');
f=wavread('flauta.wav');
sound(v)
sound(f)
espv=abs(fft(v));
espf=abs(fft(f));
subplot(2,1,1),plot(espv),grid on,zoom,title('Espectro de un violin')
subplot(2,1,2),plot(espf),grid on,zoom,title('Espectro de una flauta')


Espectros de las ondas de violín y flautaEn las gráficas se pueden observar la cantidad de componentes armónicas para estos dos instrumentos.

Tamaño de cada muestra
length(v) retorna 42860
length(f) retorna 97064

Dimensión vectorial
size(v) retorna 42860X1, lo que indica que es una señal monofónica.
size(f) retorna 97064X1, lo que indica que es una señal monofónica



Convolución

Si se desea obtener la Convolución entre dos vectores (señales) se utiliza la función conv(Vector1, vector2).

Los archivos chivo.wav y shamen.wav se almacenaron anteriormente con un editor de ondas. Se necesita hacer una gráfica de la convolución de estas dos señales.

chivo=wavread('chivo.wav');
shamen=wavread('shamen.wav');
convolucion=conv(chivo,shamen);
subplot(3,1,1),plot(chivo),title('chivo.wav'),grid on, zoom on
subplot(3,1,2),plot(shamen),title('shamen.wav'),grid on, zoom on
subplot(3,1,3),plot(convolucion),title('convolucion.wav'),grid on, zoom on


Espectros de las ondas chivo, shamen y su convolución Se deja al estudiante la grabación del resultado de la convolución en un archivo de sonido. Puede descargar el archivo de muestra.

Otro Ejemplo:

Los archivos voice.wav y take.wav se almacenaron anteriormente con un editor de ondas. Se necesita hacer una gráfica de la convolución de estas dos señales.

voice=wavread('voice.wav');
take=wavread('take.wav');
convolucion=conv(voice,take);
subplot(3,1,1),plot(voice),title('Voice.wav'),grid on, zoom on
subplot(3,1,2),plot(take),title('Take.wav'),grid on, zoom on
subplot(3,1,3),plot(Convolucion),title('convolucion.wav'),grid on, zoom on



Espectros de las ondas voice, take y su convolución Se deja al estudiante la grabación del resultado de la convolución en un archivo de sonido. Puede descargar el archivo de muestra.



Deconvolución

Si se desea obtener la deconvolución de dos vectores (señales) se utiliza la función deconv(Vector1, vector2) en donde Vector1 es el vector que tiene la señal compleja (convolucionada) y Vector2 es el vector que se desea extraer de la señal compleja (convolución).
Los archivos aplausos.wav y dingdong.wav se almacenaron anteriormente con un editor de ondas. Estas dos señales se convolucionaron obteniéndose una señal compleja. Se dese extraer el sonido del Aplauso de tal manera que solo quede el sonido del Ding Dong. Una vez hecho esto graficar todas las señales involucradas.

aplausos=wavread('aplausos.wav');
ding_dong=wavread('dingdong.wav');
convolucion=conv(aplauso,ding_dong);
deconvolucion= deconv(convolucion, aplausos);
subplot(4,1,1),plot(aplausos),title('aplausos.wav'),grid on, zoom on
subplot(4,1,2),plot(ding_dong),title('dingdong.wav'),grid on, zoom on
subplot(4,1,3),plot(convolucion),title('convolucion'),grid on, zoom on
subplot(4,1,4),plot(deconvolucion),title('deconvolucion del sonido aplausos, queda el sonido ding dong'),grid on, zoom on



Espectros de las ondas ding dong, aplausos, su convolución y la extracción por deconvolución Compare la gráfica del ding dong con la gráfica después de la convolución.
Se deja al estudiante la grabación del resultado de la deconvolución en un archivo de sonido. Puede descargar el archivo de muestra.


Ventaneo
Se utiliza con el fin de evitar que las discontinuidades introducidas al analizar solo una fracción de la señal o al introducir muestras con valor de cero introduzcan componentes de alta frecuencia en el espectro, que son mas bien un artificio de las discontinuidades introducidas y no de la señal.Ya que la transformada rápida de Fourier asume que la señal es periódica, es conveniente siempre hacerle un procedimiento de ventaneo a la señal con la que se quiere trabajar.
MATLAB cuenta con diferentes tipos de ventanas como:
HammingHanningBartlettBlackmanBoxcarTriangularGaussBlackmanharrisKaiser

Dolph-ChebyshevVentana Hamming
w=wavread('danih.wav');
h=hamming(length(w));
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana hamming')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana hamming')

Sonido y resultado después de pasarlo pro la ventana HammingAhora visualizamos el espectro
esp=abs(fft(x);
plot(esp),title('Espectro con la Ventana Hamming'),grid on, zoom on

Espectro del sonido después de pasarlo por la ventana Compare el sonido original con el sonido resultante



Saludos

0
6
0
1
6Comments
      sasuki12

      aqui les dejo un libro de estadística con matlab esta super explicado. suerte!!!!!!

      http://www.taringa.net/posts/apuntes-y-monografias/17888708/Probabilidad-y-estadistica-basica-para-ingenieros.html

      0
      elmasterix

      Buenísima. Dejo puntos

      0
      sherckuith

      Exelente! van 10, seguir y a favoritos! y 2 x taringa!

      0
      biolinux2307

      🙆‍♂️

      0
      xyonxn

      Buenísimo! Subite el Matlab o pasa algún link confiable!

      0
      mash14

      Orales acabando el mes me leo este tuto y ejemplos

      0