¿Escribir un programa para eliminar el ruido de señales de voz o de imágenes utilizando el lenguaje Matlab? Pide ayuda a expertos
Mejora de la voz basada en % de resta espectral
% Parámetros de entrada S datos de voz, frecuencia de muestreo fs, explicado a continuación P, ***11, opcional, con valor predeterminado.
% de resta de "sobresustracción", retiene una pequeña parte del ruido de fondo original y utiliza esta parte del ruido de fondo para cubrir los picos del espectro del ruido musical, eliminando así el ruido musical desagradable.
% Estima el ruido y realiza la resta espectral a través del parámetro dado p. Eliminando así el ruido.
Función [ss, po] = specsubm (s, fs, p)
% Usa resta espectral para mejorar [SS, PO] = (S, FS, P) p>
p>
%
% Implementación del algoritmo de resta espectral de R Martin (bastante lento)
% Parámetros del algoritmo: t* en segundos, f* en Hertz , k*adimensional
% 1: tg = Constante de tiempo de suavizado (0,04) de estimación de potencia de señal: alta = reverberación, baja = música
% 2: ta = potencia de señal Suavizado estimado constante de tiempo
%
para estimación de ruido (0.1)
% 3: tw = fft longitud de la ventana (se redondeará a 2^ nw muestras)
% 4: tm = longitud mínima del filtro (1,5): alta = respuesta lenta al aumento de ruido, baja = distorsión
% 5: to = constante de tiempo del factor de sobrecontracción (0,08)
% 6: fo = frecuencia de esquina de sobrecompresión (800): alta = distorsión, baja = música
% 7: km = mínimo a usar Número de buffers (4): alto = desperdicio de memoria, bajo = modulación de ruido
% 8: ks = constante de sobremuestreo (4)
% 9: kn = compensación de estimación de ruido (1.5)
% 10: kf = base de resta (0,02): alto = ruidoso, bajo = agradable
% 11: ko = factor de escala de sobrecompresión (4): alto = distorsión, bajo = música
% Verifique los parámetros de entrada de la función. Si hay menos de tres entradas, po es el valor predeterminado y los parámetros de po son los descritos anteriormente.
Si nargin & lt3 po =[0,04 0,1 0,032 1,5 0,08 400 4 4 1,5 0,02 4]. ; else po = p; fin
ns = longitud (segundos);
ts = 1/fs;
ni = pow 2(siguiente pow 2(fs * po(3)/po(8)));
ti = ni/fs
NO = ni * po(8);
nf = 1+piso((ns-NO)/ni);
nm = techo(fs * po(4)/( ni * po(7)));
win = 0.5 *Hamming(NW+1)/1.08; win(end)=[];
ZG = exp(- ti /po(1));
za = exp(-ti/po(2));
zo = exp(-ti/po(5));
p>px = cero(1+nw/2, 1);
pxn = px
os = px
mb=ones( 1 +nw/2, po(7))* NW/2;
im = 0;
OSF = po(11)*(1+(0:NW/2) ) .*fs/(nw*po(6))).
^(-1);
imidx =[13 21]';
x2im = cero (longitud (imidx), nf);
osim = x2im
pnim = x2im
pxnim = x2im
qim = x2im
for is=1:nf
idx =(1:NW)+(is-1)*ni;
x=rfft(s(idx)). *win);
x2 = x * conj(x);
pxn = za * pxn+(1-za)* x2;
im= rem(im+1,nm);
Si yo
mb(:,1)=min(mb(:,1),pxn);
Otro
mb=[pxn,mb(:,1:po(7)-1)];
Fin
pn=po(9) *min(mb,[],2);
%os=Coeficiente de contracción excesiva
OS = zo * OS+(1-zo)*(1+OSF. *pn. /(pn+pxn));
px = ZG * px+(1-ZG)* x2;
q=max(po(10)*sqrt(pn./x2 ), 1-sqrt(sistema operativo. *pn./px));
ss(idx)= ss(idx)+IR FFT(x . * q); Fin
Si nargout==0
soundsc([s;ss], fs);
Fin