• Domingo 28 de Abril de 2024, 12:50

Autor Tema:  Calcular la frecuencia fundamental de un sonido  (Leído 4869 veces)

amina

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Calcular la frecuencia fundamental de un sonido
« en: Jueves 13 de Octubre de 2011, 20:04 »
0
Hola ,

Estoy haciendo un programa en el que capturo el sonido de una guitarra mediante un micrófono y una tarjeta de sonido. Necesito calcular su frecuencia fundamental porque a partir de ella quiero averiguar cuáles son los armónicos más próximos, es decir, su 2ª frecuencia, 3ª frecuencia, ... Para ello calculo la FFT pero no tengo claro cómo calcular a partir de ahí cuál es su frecuencia fundamental. He calculado el máximo porque creo que la frecuencia fundamental es la que tiene mayor amplitud pero no sé si es una afirmación de todo cierta. Os pongo el código para que veáis un poco que he hecho.



%Frecuencia de muestreo
Fs=44100/2;


%Captura la señal de audio por el micrófono
    ai = analoginput('winsound',0);
    addchannel(ai,1);
    set(ai,'SampleRate',Fs)
    duration = 10;
    set(ai,'SamplesPerTrigger',Fs*duration);
    ai.TriggerType = 'Immediate';
 
    start(ai)
    [Y,t] = getdata(ai);
  % Y Contiene las muestras de la señal
    pow=nextpow2(Y);
    tam=2^pow;
    if length(Y)~=1
        Y(tam)=0;
    end
    size=length(Y);
   
%Realiza la FFT
    y=fft(Y,size);
%Escala logarítimica
    mag=10*log10(abs(y));
   
    f=(0:size/2)*Fs/size;
   
    %Dibuja gráfica
    plot(f,mag(1:size/2+1));
   

A partir de aquí debería ser capaz de obtener la frecuencia fundamental de la señal.
Algo que se me ocurrió fue calcular la Densidad espectral de potencial y el donde se sitúe el pico más alto se supone es la frecuencia de la señal pero no estoy 100% segura de esto.
Me gustaría que pudieseis aclararme estas cosillas.

Gracias de antemano. Un saludo