Red de conocimiento informático - Material del sitio web - Programa Matlab para mejorar la anotación de voz mediante resta espectral básica

Programa Matlab para mejorar la anotación de voz mediante resta espectral básica

%Resta de espectro básico

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

[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;

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

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