
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:
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)
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


0