Quiero eliminar todos los componentes de frecuencia de un archivo .wav excepto aquellos dentro de \ $ \ pm 25 \ $ de \ $ 523 \ Hz \ $, así como sus armónicos.
Intento de intento :
Primero utilicé un filtro de paso alto para suprimir las frecuencias por debajo de 523 - 25 Hz. Luego utilicé un filtro de paso bajo para suprimir las frecuencias superiores a 523 + 25. Si mi método es correcto, ¿hay alguna forma más eficiente de hacerlo?
También, para tener en cuenta los armónicos, utilicé un 'for loop'. ¿Está bien? Pero solo elimina hasta cierto armónico. ¿Es posible modificar este código para que repita el procedimiento para todos los armónicos de 523 Hz, hasta la frecuencia de Nyquist?
Aquí está mi código de Matlab:
[s, Fs] = wavread('chord.wav');
wavplay(s, Fs);
n=input('Number of harmonics? ');
for N=2:1:n
% High-pass filter
FsNorm = (523-25).*N / (Fs/2);
[b, a] = butter(10, FsNorm, 'high');
sHigh = filtfilt(b, a, s);
% Low pass filter
FsNorm = (523+25).*N / (Fs/2);
[b,a] = butter(10, FsNorm, 'low');
sLow = filtfilt(b, a, s);
end
wavplay(sLow,Fs);