Programa Matlab para mejorar la anotación de voz mediante resta espectral básica
Borrar;
%[xx,fs]=wavread('E:\mywhisper\shu.wav');
%[ xx,fs]=wavread('E:\speech\xw1xun_01.wav');
%[xx,fs]=wavread('E:\speech\ear voice cut\b\w1ba_5') ;
[xx,fs]=wavread('D:\yuan.wav');% Lee el archivo de audio yuan.wav y devuelve los datos de muestra a la variable xx y la frecuencia de muestreo Fs p>
[team. row]=size(xx);% Asigne el número de filas en la matriz xx al equipo y el número de columnas a la fila
si fila==2
x=(xx(:,1)+xx(:,2))/2;
yy=x;
% Si la señal de voz xx es de 2 columnas , es decir, luego convertir a una señal mono, es decir, tomar el valor promedio de las dos columnas de señales y asignarlo a x, y asignar el valor de x a yy
else
x=xx;
yy=x;
% Si la señal de voz xx es monofónica, asigne el valor de xx a x y asigne el valor de x a yy
fin
x=x-mean(x)+0.1 *rand(longitud(x),1
N=longitud(x);% Asignar la longitud de la señal de voz a la variable N
n=220;% Divida la señal de voz en cuadros con una longitud de cuadro de 220
n1=160 % desplazamiento de cuadro 160<; /p>
frame=floor(( N-n)/(n-n1 )); %Asignar el número de subtramas al marco variable
%frame=floor(N/n); p>
for i=1:frame
y1=x((i-1)*(n-n1)+1:(i-1)*(n-n1)+n) .*hamming(n);
% Ventana cada subtrama
fy=fft(y1,n);
nen(i,:)=abs( fy).^2;% Convierte la potencia de la señal en el dominio de la frecuencia. Asigna el valor a la variable de matriz nen
ang(i,:)=angle(fy);% Asigna el ángulo de fase de la señal en el dominio de la frecuencia al variable matricial ang
end
yuzhi=sum(sum(nen(2:5,:)))/(4*n);
para i =1.frame
nen(i,:) =nen(i,:)-yuzhi;
nen(i,find(nen(i,:)<0)) =0;
%chuli=nen(i, 1:n/2);
%chuli=chuli-yzhi;
%chuli(buscar( chuli<0))=0;
%nen (i,:)=[chuli,fliplr(chuli)];
% nen(i,:)=filtro(1 ,[0.5 0.5],nen(i,:));
% nen(i,. find(nen(i,:)<0))=0;
end
for i=1:frame
nen(i,:)=sqrt(nen(i,:));% Abra la raíz del espectro de potencia del habla pura y obtenga el valor del dominio de frecuencia
jie=nen(i,:).* exp(j*ang(i,:));
out(i,:)=real(ifft( jie
))/hamming(n)'; % Realiza la transformada de Fourier inversa en el espectro de voz puro, obtiene la parte real y realiza el procesamiento de ventanas
end
zong=out(1, :)';% Graba el primer fotograma que no se superponga en la matriz zong
jiewei=n;
for i=2:frame
zong( jiewei -n1+1:jiewei)
=(zong(jiewei-n1+1:jiewei)+out(i,1:n1)')/2;
jiewei= jiewei +n-n1;% hace que el puntero jiewei apunte al final del siguiente fotograma por turno
zong=[zong;out(i,n1+1:end)'];Graba la parte no superpuesta de cada cuadro comenzando desde el segundo cuadro en la matriz zong
end
%zong= out(1,:)';
%for i=2: marco
p>%zong=[zong;out(i,:)'];
%end
%
% para i=1: marco
% zong=[zong,nen(i,:)'];
% zong(i*(n-n1)+ 1:(i- 1)*(n-n1)+n)
=zong(i*(n-n1)+1: (i-1)*(n-n1)+n) /2; p>
figure(1); %Crear figura 1
subplot(211); %Dividir la ventana de gráficos en 2*1 ventanas pequeñas y tomar la primera ventana pequeña p>
plot(x); %Usa la matriz x para dibujar una curva bidimensional básica
axis([1,(n-n1)*frame+n,min(x),max (x)]) ;% Calibre el eje x y el eje y del objeto de gráficos bidimensional actual. El eje x va desde 1 hasta el final del último subcuadro, y el eje y va desde 1 hasta el final. final de la última subtrama. El rango va desde el valor mínimo hasta el valor máximo en el dominio del tiempo del habla con ruido
subplot(212 % Divida la ventana de gráficos en 2*1 ventanas pequeñas y tome la segunda ventana pequeña
;specgram(x,fs,1024,n,n1); % Dibujar el espectrograma del habla
figura(2); % Crear figura 2
subplot(211); % Will La ventana de gráficos se divide en 2 * 1 ventanas pequeñas, tome la primera ventana pequeña
plot(zong % Utilice la matriz zong para dibujar una curva bidimensional básica
axis([1, (n-n1)*frame+n,min(zong),max(zong)]);% Calibre el objeto de gráficos 2D actual en los ejes x e y El rango de x. -el eje es desde 1 hasta el final de la última subtrama. El rango del eje y es desde el valor mínimo hasta el valor máximo en el dominio del tiempo del habla pura.
subplot(212); ventana en 2*1 ventanas pequeñas y toma la segunda ventana pequeña
specgram(zong,fs,1024,n,n1); % Dibujar espectrograma de voz
wavplay(x,fs) ;% Reproducir audio de voz con ruido monofónico
wavplay(zong,fs);% Reproducir audio de voz monofónico puro