Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

bandpass

Filtrado paso banda de señales

Descripción

y = bandpass(x,wpass) filtra la señal de entrada x mediante un filtro paso banda con un rango de frecuencia de banda de paso especificado por el vector de dos elementos wpass y expresado en unidades normalizadas de π rad/muestra. bandpass utiliza un filtro de orden mínimo con una atenuación de banda de parada de 60 dB y compensa el retardo introducido por el filtro. Si x es una matriz, la función filtra cada columna de forma independiente.

ejemplo

y = bandpass(x,fpass,fs) especifica que x se ha muestreado a una tasa de fs hercios. El vector de dos elementos fpass especifica el rango de frecuencia de banda de paso del filtro en hercios.

y = bandpass(xt,fpass) realiza el filtrado paso banda de los datos del horario xt mediante un filtro con un rango de frecuencia de banda de paso especificado en hercios por el vector de dos elementos fpass. La función filtra independientemente todas las variables del horario y todas las columnas dentro de cada variable.

ejemplo

y = bandpass(___,Name,Value) especifica opciones adicionales para cualquiera de las sintaxis anteriores con argumentos de par nombre-valor. Puede modificar la atenuación de banda de parada, la Inclinación del filtro paso banda y el tipo de respuesta al impulso del filtro.

ejemplo

[y,d] = bandpass(___) también devuelve el objeto digitalFilter d utilizado para filtrar la entrada.

bandpass(___) sin argumentos de salida representa la señal de entrada y superpone la señal filtrada.

Ejemplos

contraer todo

Cree una señal muestreada a 1 kHz durante 1 segundo. La señal contiene tres tonos, uno a 50 Hz, otro a 150 Hz y un tercero a 250 Hz. Los tonos de alta frecuencia y de baja frecuencia tienen el doble de amplitud que el tono intermedio. La señal está integrada en ruido blanco gaussiano con varianza 1/100.

fs = 1e3;
t = 0:1/fs:1;
x = [2 1 2]*sin(2*pi*[50 150 250]'.*t) + randn(size(t))/10;

Realice un filtrado paso banda de la señal para eliminar los tonos de baja frecuencia y de alta frecuencia. Especifique frecuencias paso banda de 100 Hz y 200 Hz. Muestre las señales originales y las filtradas, y también sus espectros.

bandpass(x,[100 200],fs)

Figure contains 2 axes objects. Axes object 1 with title Bandpass Filtering (Fpass = [100 200] Hz) contains 2 objects of type line. These objects represent Original, Filtered. Axes object 2 contains 2 objects of type line. These objects represent Original, Filtered.

Implemente un sintetizador de música digital básico y utilícelo para reproducir una canción tradicional. Especifique una tasa de muestreo de 2 kHz. Represente el espectrograma de la canción.

fs = 2e3;
t = 0:1/fs:0.3-1/fs;

l = [0 130.81 146.83 164.81 174.61 196.00 220 246.94];
m = [0 261.63 293.66 329.63 349.23 392.00 440 493.88];
h = [0 523.25 587.33 659.25 698.46 783.99 880 987.77];
note = @(f,g) [1 1 1]*sin(2*pi*[l(g) m(g) h(f)]'.*t);

mel = [3 2 1 2 3 3 3 0 2 2 2 0 3 5 5 0 3 2 1 2 3 3 3 3 2 2 3 2 1]+1;
acc = [3 0 5 0 3 0 3 3 2 0 2 2 3 0 5 5 3 0 5 0 3 3 3 0 2 2 3 0 1]+1;

song = [];
for kj = 1:length(mel)
    song = [song note(mel(kj),acc(kj)) zeros(1,0.01*fs)];
end
song = song/(max(abs(song))+0.1);

% To hear, type sound(song,fs)

pspectrum(song,fs,'spectrogram','TimeResolution',0.31, ...
    'OverlapPercent',0,'MinThreshold',-60)

Figure contains an axes object. The axes object with title Fres = 8.2798 Hz, Tres = 310 ms contains an object of type image.

Realice un filtrado paso banda de la señal para separar el registro medio de los otros dos. Especifique frecuencias paso banda de 230 Hz y 450 Hz. Represente las señales originales y las filtradas en los dominios del tiempo y la frecuencia.

pong = bandpass(song,[230 450],fs);

% To hear, type sound(pong,fs)

bandpass(song,[230 450],fs)

Figure contains 2 axes objects. Axes object 1 with title Bandpass Filtering (Fpass = [230 450] Hz) contains 2 objects of type line. These objects represent Original, Filtered. Axes object 2 contains 2 objects of type line. These objects represent Original, Filtered.

Represente el espectrograma del registro medio.

figure
pspectrum(pong,fs,'spectrogram','TimeResolution',0.31, ...
    'OverlapPercent',0,'MinThreshold',-60)

Figure contains an axes object. The axes object with title Fres = 8.2798 Hz, Tres = 310 ms contains an object of type image.

Filtre ruido blanco muestreado a 1 kHz mediante un filtro paso banda de respuesta al impulso infinita con un ancho de banda de paso de 100 Hz. Utilice diferentes valores de inclinación. Represente los espectros de las señales filtradas.

fs = 1000;
x = randn(20000,1);

[y1,d1] = bandpass(x,[ 50 150],fs,'ImpulseResponse','iir','Steepness',0.5);
[y2,d2] = bandpass(x,[200 300],fs,'ImpulseResponse','iir','Steepness',0.8);
[y3,d3] = bandpass(x,[350 450],fs,'ImpulseResponse','iir','Steepness',0.95);

pspectrum([y1 y2 y3],fs)
legend('Steepness = 0.5','Steepness = 0.8','Steepness = 0.95', ...
    'Location','south')

Figure contains an axes object. The axes object with title Fres = 976.801 mHz contains 3 objects of type line. These objects represent Steepness = 0.5, Steepness = 0.8, Steepness = 0.95.

Calcule y represente las respuestas en frecuencia de los filtros.

[h1,f] = freqz(d1,1024,fs);
[h2,~] = freqz(d2,1024,fs);
[h3,~] = freqz(d3,1024,fs);

plot(f,mag2db(abs([h1 h2 h3])))
legend('Steepness = 0.5','Steepness = 0.8','Steepness = 0.95', ...
    'Location','south')
ylim([-100 10])

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Steepness = 0.5, Steepness = 0.8, Steepness = 0.95.

Haga los filtros asimétricos especificando diferentes valores de inclinación en las frecuencias paso banda superior e inferior.

[y1,d1] = bandpass(x,[ 50 150],fs,'ImpulseResponse','iir','Steepness',[0.5 0.8]);
[y2,d2] = bandpass(x,[200 300],fs,'ImpulseResponse','iir','Steepness',[0.5 0.8]);
[y3,d3] = bandpass(x,[350 450],fs,'ImpulseResponse','iir','Steepness',[0.5 0.8]);

pspectrum([y1 y2 y3],fs)

Figure contains an axes object. The axes object with title Fres = 976.801 mHz contains 3 objects of type line.

Calcule y represente las respuestas en frecuencia de los filtros.

[h1,f] = freqz(d1,1024,fs);
[h2,~] = freqz(d2,1024,fs);
[h3,~] = freqz(d3,1024,fs);

plot(f,mag2db(abs([h1 h2 h3])))
ylim([-100 10])

Figure contains an axes object. The axes object contains 3 objects of type line.

Argumentos de entrada

contraer todo

Señal de entrada, especificada como vector o matriz.

Ejemplo: sin(2*pi*(0:127)/16)+randn(1,128)/100 especifica una sinusoide con ruido

Ejemplo: [2 1].*sin(2*pi*(0:127)'./[16 64]) especifica un sinusoide de dos canales.

Tipos de datos: single | double
Soporte de números complejos:

Rango de frecuencia de banda de paso normalizada, especificado como vector de dos elementos en el intervalo (0, 1).

Rango de frecuencia de banda de paso, especificado como vector de dos elementos en el intervalo (0, fs/2).

Tasa de muestreo, especificada como un escalar real positivo.

Horario de entrada. xt debe contener tiempos de fila crecientes, finitos e igualmente espaciados del tipo duration en segundos.

Si en un horario faltan puntos de tiempo o están duplicados, puede solucionarlo con los consejos de Clean Timetable with Missing, Duplicate, or Nonuniform Times.

Ejemplo: timetable(seconds(0:4)',randn(5,1),randn(5,2)) contiene una señal aleatoria monocanal y una señal aleatoria de dos canales muestreadas a 1 Hz durante 4 segundos.

Argumentos de par nombre-valor

Ejemplo: 'ImpulseResponse','iir','StopbandAttenuation',30 filtra la entrada con un filtro IIR de orden mínimo que atenúa por 30 dB las frecuencias menores que fpass(1) y las frecuencias mayores que fpass(2).

Especifique pares opcionales de argumentos separados por comas Name,Value. Name es el nombre del argumento y Value es el valor correspondiente. Name debe aparecer entre comillas. Puede especificar varios argumentos de par nombre-valor en cualquier orden como Name1,Value1,...,NameN,ValueN.

Tipo de respuesta al impulso del filtro, especificado como par separado por comas que consta de 'ImpulseResponse' y 'fir', 'iir' o 'auto'.

  • 'fir': la función diseña un filtro de respuesta al impulso finita (FIR) de orden mínimo y fase lineal. Para compensar el retardo, la función añade a la señal de entrada N/2 ceros, donde N es el orden del filtro. Después, la función filtra la señal y elimina las primeras N/2 muestras de la salida.

    En este caso, la señal de entrada debe ser al menos el doble de larga que el filtro que cumple las especificaciones.

  • 'iir': la función diseña un filtro de respuesta al impulso infinita (IIR) de orden mínimo y utiliza la función filtfilt para realizar un filtrado de fase cero y compensar el retardo del filtro.

    Si la señal no es al menos tres veces más larga que el filtro que cumple las especificaciones, la función diseña un filtro de menor orden y, por tanto, de menor inclinación.

  • 'auto': la función diseña un filtro FIR de orden mínimo si la señal de entrada es lo suficientemente larga y, si no lo es, un filtro IIR de orden mínimo. Específicamente, la función sigue estos pasos:

    • Calcule el orden mínimo que debe tener un filtro FIR para cumplir las especificaciones. Si la señal es al menos el doble de larga que el orden de filtro requerido, diseñe y utilice ese filtro.

    • Si la señal no es lo suficientemente larga, calcule el orden mínimo que debe tener un filtro IIR para cumplir las especificaciones. Si la señal es al menos tres veces más larga que el orden de filtro requerido, diseñe y utilice ese filtro.

    • Si la señal no es lo suficientemente larga, trunque el orden a un tercio de la longitud de la señal y diseñe un filtro IIR de ese orden. La reducción de orden se realiza a costa de la inclinación de la banda de transición.

    • Filtre la señal y compense el retardo.

Inclinación de la banda de transición, especificada como el par separado por comas que consta de 'Steepness' y un escalar o un vector de dos elementos en el intervalo [0.5, 1). A medida que la inclinación aumenta, la respuesta del filtro se acerca a la respuesta paso banda ideal, pero la longitud de filtro resultante y el coste computacional de la operación de filtrado también aumentan. Para obtener más información, consulte Inclinación del filtro paso banda.

Atenuación de banda de parada del filtro, especificada como el par separado por comas que consta de 'StopbandAttenuation' y un escalar positivo en dB.

Argumentos de salida

contraer todo

Señal filtrada, devuelta como vector, matriz u horario con las mismas dimensiones que la entrada.

Filtro paso banda utilizado en la operación de filtrado, devuelto como un objeto digitalFilter.

  • Utilice filter(d,x) para filtrar una señal x con d.

  • Utilice FVTool para visualizar la respuesta del filtro.

  • Utilice designfilt para editar o generar un filtro digital según las especificaciones de frecuencia-respuesta.

Más acerca de

contraer todo

Inclinación del filtro paso banda

El argumento 'Steepness' controla el ancho de las regiones de transición de un filtro. Cuanto menor sea la inclinación, más ancha será la región de transición. Cuanto mayor sea la inclinación, más estrecha será la región de transición.

Para interpretar la inclinación del filtro, considere las siguientes definiciones:

  • La frecuencia de Nyquist, fNyquist, es el componente de frecuencia más elevado de una señal que puede muestrearse a una tasa dada sin solapamiento. fNyquist es 1 (×π rad/muestra) cuando la señal de entrada no cuenta con información temporal y fs/2 hercios cuando la señal de entrada es un horario o cuando especifica una tasa de muestreo.

  • Las frecuencias de banda de parada inferior y superior del filtro, fstoplower y fstopupper, son las frecuencias por debajo y por encima de las cuales la atenuación es igual a o mayor que el valor especificado con 'StopbandAttenuation'.

  • El ancho de transición inferior del filtro, Wlower, es fpasslowerfstoplower, donde la frecuencia de banda de paso inferior fpasslower es el primer elemento del fpass especificado.

  • El ancho de transición superior del filtro, Wupper, es fstopupperfpassupper, donde la frecuencia de banda de paso superior fpassupper es el segundo elemento de fpass.

  • La mayoría de los filtros no ideales también atenúan la señal de entrada en la banda de paso. El valor máximo de esta atenuación dependiente de la frecuencia se denomina ondulación de banda de paso. Todos los filtros utilizados por bandpass cuentan con una ondulación de banda de paso de 0,1 dB.

Frequency response of a bandpass filter with the Nyquist frequency, the lower and upper passband frequencies, the upper and lower stopband frequencies, the upper and lower transition widths, the stopband attenuation, and the passband ripple

Para controlar el ancho de las bandas de transición, puede especificar 'Steepness' como un vector de dos elementos, [slower,supper], o como un escalar. Cuando especifica 'Steepness' como un vector, la función:

  • Calcula el ancho de transición inferior como

    Wlower = (1 – slower) × fpasslower.

    • Cuando el primer elemento de 'Steepness' es igual a 0.5, el ancho de transición es el 50% de fpasslower.

    • Cuando el primer elemento de 'Steepness' se acerca a 1, el ancho de transición se va estrechando paulatinamente hasta que alcanza un valor mínimo del 1% de fpasslower.

  • Calcula el ancho de transición superior como

    Wupper = (1 – supper) × (fNyquistfpassupper).

    • Cuando el segundo elemento de 'Steepness' es igual a 0.5, el ancho de transición es el 50% de (fNyquistfpassupper)..

    • Cuando el segundo elemento de 'Steepness' se acerca a 1, el ancho de transición se va estrechando paulatinamente hasta que alcanza un valor mínimo del 1% de (fNyquistfpassupper).

Cuando especifica 'Steepness' como un escalar, la función diseña un filtro con anchos de transición superior e inferior iguales. El valor predeterminado de 'Steepness' es 0.85.

Historial de versiones

Introducido en R2018a

Consulte también

Apps

Funciones