Filtrado de una frecuencia y sus armónicos (Matlab)

-1

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);
    
pregunta Merin

1 respuesta

2
  1. Su enfoque probablemente funcionará bien, pero para esta banda de paso estrecha, probablemente debería usar un filtro de paso de banda diseñado en lugar de una combinación de filtros de paso bajo y paso alto de serie, especialmente si desea para conservar las características del diseño Butterworth (banda de paso máxima plana).

  2. Parece que su intención es aplicar cada filtro a la salida del filtro anterior, pero no parece que su código de Matlab lo haga. Aplica un filtro y tira el resultado. Luego aplica otro filtro y tira el resultado. Finalmente, devuelve la salida del filtro final aplicado a la señal de entrada. Básicamente, solo se obtiene el resultado de aplicar el filtro de paso bajo final a la señal de entrada.

  3. Incluso si aplicó todos los filtros a las salidas del filtro anterior, su primer filtro que suprime las frecuencias por encima de 548 Hz eliminó todos los armónicos (a 1046 Hz, 1569 Hz, ...), por lo que no hay contenido allí para que pasen los filtros armónicos superiores. Además, el filtro de segundo armónico que suprime el contenido por debajo de 1021 Hz eliminará la señal fundamental por la que pasaste en el primer filtro.

    Una opción es que, en lugar de aplicar cada uno de los filtros (paso de banda) a la salida del filtro anterior, aplique cada filtro a la señal de entrada original, luego sume todas las salidas del filtro para formar la salida final.

  

Sólo elimina hasta cierto armónico. ¿Es posible modificar esto para eliminar todos los armónicos de 523 Hz que hay, hasta la frecuencia de Nyquist?

Sí, elija N lo suficientemente grande para incluir todos los armónicos hasta la frecuencia de Nyquist.

    
respondido por el The Photon

Lea otras preguntas en las etiquetas