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