Matlab - eliminar los ceros de una señal de audio en matlab

 
Vista:
Imágen de perfil de edward

eliminar los ceros de una señal de audio en matlab

Publicado por edward (1 intervención) el 18/05/2015 02:35:26
foro de la web del programador quiero hacer un filtrado de una señal de audio en formato wav que tiene una frecuencia de muestreo Fs=8000Hz y de 8bits en mono en matlab eliminando primero los intervalos de silencio o ruido silencioso en el tiempo de la señal de audio, y hacer enfasis solamente en la voz de una persona. Buscando por la internet encontre un programa que me elimina el ruido silencioso en la señal de audio y tambien encontre un programa que simula un filtro FIR de preenfasis. Pero el profesor que me evalua en la universidad quiere diseñe un filtro propio que se corresponda con señal que estoy insertando en el matlab a la frecuencia de muestreo que mencione antes y a los 8bits que tiene. Para crear un filtro popio quiero empezar por eliminar todas las amplitudes iguales cero dentro de la señal de audio en el tiempo y asi comprimir un poco el tamaño del vector ,para ello cree un codigo propio para eliminar lo ceros pero no me funciona me genera un error:
codigo para eliminar ceros:
1
2
3
4
5
6
7
8
9
function y=elicero(s)
N=length(s);
for i=1:1:N
    if (s(i)==0)
      s(s(i)==0)=[];
    end;
end;
 
end



error que me genera
[Y, Fs,NBits ]=wavread('arriba2_8.wav');
>> a=elicero(Y)
??? Index exceeds matrix dimensions.

Error in ==> elicero at 4
if (s(i)==0)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
% silencio
%Corta el silencio en la señal completa
function y = silencio2(s)
len = length(s);% length del vector
d=max(abs(s));
s=s/d;
avg_e = sum(s.*s)/len; %promedio señal entera
THRES = 0.02;
y = [0];
        for i = 1:400:len-400 % cada 10ms
        seg = s(i:i+399);% segmentos
        e = sum(seg.*seg)/400; % promedio de cada segmento
                if( e> THRES*avg_e) % si el promedio energético es mayor que la señal
                        %completa por el valor umbral
                        y=[y;seg(1:end)];% almacena en y sino es eliminado como espacio en blanco
                end;
        end;
end
1
2
3
4
function [y]=enfasis(x)
b=[1 -0.95];
y=filter(b,1,x);
end
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

eliminar los ceros de una señal de audio en matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 25/05/2015 01:05:29
1
2
3
4
5
6
7
8
9
10
11
12
function s=elicero(s)
N=length(s);
i=1;
while i<N
    if s(i)==0
      s(i)=[];
      N=N-1;
      i=i-1;
    end;
    i=i+1;
end;
end


1
2
3
4
5
6
7
8
9
10
11
12
>> s=round(2*rand(1,10))
 
s =
 
     1     1     1     1     0     0     0     0     0     1
 
>> y=elicero(s);
>> y
 
y =
 
     1     1     1     1     1


Saludos .
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación matlab
[email protected]
skype: josejeremiascaballero
Estimado Usuario, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de July

eliminar los ceros de una señal de audio en matlab

Publicado por July (14 intervenciones) el 30/09/2015 22:00:01
Muchas gracias Jose Jeremias !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar