Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

freqz

Respuesta de frecuencia del filtro digital

Descripción

[h,w] = freqz(b,a,n) devuelve la respuesta en frecuencia del filtro digital especificado. Especifique un filtro digital con coeficientes del numerador b y coeficientes del denominador a. La función devuelve el vector de respuesta en frecuencia de n puntos h y el correspondiente vector de frecuencia angular w.

ejemplo

[h,w] = freqz(B,A,"ctf",n) devuelve la respuesta en frecuencia de n puntos del filtro digital representada como Cascaded Transfer Functions (CTF) con coeficientes del numerador B y coeficientes del denominador A. (desde R2024b)

ejemplo

[h,w] = freqz({B,A,g},"ctf",n) devuelve la respuesta en frecuencia de n puntos del filtro digital en formato CTF. Especifique el filtro con coeficientes del numerador B, coeficientes del denominador A y valores de escalado g en las secciones del filtro. (desde R2024b)

ejemplo

[h,w] = freqz(d,n) devuelve la respuesta de frecuencia compleja de n puntos del filtro digital d.

ejemplo

[h,w] = freqz(sos,n) devuelve la respuesta de frecuencia compleja de n puntos correspondiente a la matriz de secciones de segundo orden sos.

ejemplo

[h,w] = freqz(___,n,"whole") devuelve la respuesta de frecuencia en n puntos de muestra alrededor de todo el círculo de la unidad.

[h,f] = freqz(___,n,fs) devuelve el vector de respuesta de frecuencia h y el correspondiente vector de frecuencia física f en un filtro digital diseñado para filtrar las señales muestreadas a una tasa fs.

[h,f] = freqz(___,n,"whole",fs) devuelve el vector de frecuencia en n puntos que van de 0 a fs.

h = freqz(___,w) devuelve el vector de respuesta de frecuencia h evaluado en las frecuencias normalizadas suministradas en w.

h = freqz(___,f,fs) devuelve el vector de respuesta de frecuencia h evaluado en las frecuencias físicas suministradas en f.

freqz(___) sin argumentos de salida representa la respuesta de frecuencia del filtro.

ejemplo

Ejemplos

contraer todo

Calcule y muestre la respuesta de magnitud del filtro paso bajo IIR de tercer orden descrito por la siguiente función de transferencia:

H(z)=0.05634(1+z-1)(1-1.0166z-1+z-2)(1-0.683z-1)(1-1.4461z-1+0.7957z-2).

Exprese el numerador y el denominador como convoluciones de polinomios. Encuentre la respuesta de frecuencia en 2001 puntos que abarcan todo el círculo de la unidad.

b0 = 0.05634;
b1 = [1  1];
b2 = [1 -1.0166 1];
a1 = [1 -0.683];
a2 = [1 -1.4461 0.7957];

b = b0*conv(b1,b2);
a = conv(a1,a2);

[h,w] = freqz(b,a,'whole',2001);

Represente la respuesta de magnitud expresada en decibelios.

plot(w/pi,20*log10(abs(h)))
ax = gca;
ax.YLim = [-100 20];
ax.XTick = 0:.5:2;
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

Figure contains an axes object. The axes object with xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) contains an object of type line.

Desde R2024b

Diseñe un filtro digital paso bajo Chebyshev Tipo II de orden 40 con una frecuencia de borde de banda de parada de 0,4 y una atenuación de la banda de parada de 50 dB. Represente la respuesta en frecuencia del filtro utilizando coeficientes en formato CTF.

[B,A] = cheby2(40,50,0.4,"ctf");

freqz(B,A,"ctf")

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

Diseñe un filtro digital elíptico paso banda de orden 30 con unas frecuencias de borde de la banda de paso de 0,3 y 0,7, ondulación de la banda de paso de 0,1 dB y atenuación de la banda de parada de 50 dB. Represente la respuesta en frecuencia del filtro utilizando coeficientes y ganancia en formato CTF.

[B,A,g] = ellip(30,0.1,50,[0.3 0.7],"ctf");
freqz({B,A,g},"ctf")

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

Diseñe un filtro paso bajo FIR de orden 80 mediante una ventana de Kaiser con β=8. Especifique una frecuencia de corte normalizada de 0.5π rad/muestra. Muestre las respuestas de magnitud y fase del filtro.

b = fir1(80,0.5,kaiser(81,8));
freqz(b,1)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

Diseñe el mismo filtro mediante designfilt. Muestre sus respuestas de magnitud y fase.

d = designfilt("lowpassfir",FilterOrder=80, ...
    CutoffFrequency=0.5,Window={"kaiser",8});
freqz(d)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

Diseñe un filtro paso banda FIR con una banda de paso entre 0.35π y 0.8π rad/muestra y 3 dB de ondulación. La primera banda de parada va de 0 a 0.1π rad/muestra y tiene una atenuación de 40 dB. La segunda banda de parada va de 0.9π rad/muestra a la frecuencia de Nyquist y tiene una atenuación de 30 dB. Calcule el valor de la frecuencia de respuesta. Represente su magnitud tanto en unidades lineales como en decibelios. Resalte la banda de paso.

sf1 = 0.1;
pf1 = 0.35;
pf2 = 0.8;
sf2 = 0.9;
pb = linspace(pf1,pf2,1e3)*pi;

bp = designfilt("bandpassfir", ...
    StopbandAttenuation1=40,StopbandFrequency1=sf1, ...
    PassbandFrequency1=pf1,PassbandRipple=3, ...
    PassbandFrequency2=pf2,StopbandFrequency2=sf2, ...
    StopbandAttenuation2=30);

[h,w] = freqz(bp,1024);
hpb = freqz(bp,pb);

subplot(2,1,1)
plot(w/pi,abs(h),pb/pi,abs(hpb),'.-')
axis([0 1 -1 2])
legend("Response","Passband",Location="south")
ylabel("Magnitude")

subplot(2,1,2)
plot(w/pi,db(h),pb/pi,db(hpb),".-")
axis([0 1 -60 10])
xlabel("Normalized Frequency (\times\pi rad/sample)")
ylabel("Magnitude (dB)")

Figure contains 2 axes objects. Axes object 1 with ylabel Magnitude contains 2 objects of type line. These objects represent Response, Passband. Axes object 2 with xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains 2 objects of type line.

Calcule y muestre la respuesta de magnitud del filtro paso bajo IIR de tercer orden descrito por la siguiente función de transferencia:

H(z)=0.05634(1+z-1)(1-1.0166z-1+z-2)(1-0.683z-1)(1-1.4461z-1+0.7957z-2).

Exprese la función de transferencia en términos de secciones de segundo orden. Encuentre la respuesta de frecuencia en 2001 puntos que abarcan todo el círculo de la unidad.

b0 = 0.05634;
b1 = [1  1];
b2 = [1 -1.0166 1];
a1 = [1 -0.683];
a2 = [1 -1.4461 0.7957];

sos1 = [b0*[b1 0] [a1 0]];
sos2 = [b2 a2];

[h,w] = freqz([sos1;sos2],'whole',2001);

Represente la respuesta de magnitud expresada en decibelios.

plot(w/pi,20*log10(abs(h)))
ax = gca;
ax.YLim = [-100 20];
ax.XTick = 0:.5:2;
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

Figure contains an axes object. The axes object with xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) contains an object of type line.

Argumentos de entrada

contraer todo

Coeficientes de la función de transferencia, especificados como vectores. Exprese la función de transferencia en términos de b y a como

H(z)=B(z)A(z)=b1+b2z1+bnz(n1)+bn+1zna1+a2z1+amz(m1)+am+1zm

Ejemplo: b = [1 3 3 1]/6 y a = [3 0 1 0]/3 especifican un filtro Butterworth de tercer orden con una frecuencia normalizada de 3 dB de 0,5π rad/muestra.

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

Número de puntos de frecuencia sobre los que se evalúa la respuesta, especificado como un escalar entero positivo no inferior a 2. Cuando n está ausente, el valor predeterminado es 512. Para obtener los mejores resultados, establezca n en un valor mayor que el orden del filtro.

Desde R2024b

Coeficientes de función de transferencia en cascada (CTF), especificados como escalares, vectores o matrices. B y A indican los coeficientes de numerador y denominador de la función de transferencia en cascada, respectivamente.

B debe tener un tamaño de L por (m + 1) y A debe tener un tamaño de L por (n + 1), donde:

  • L representa el número de secciones del filtro.

  • m representa el orden de los numeradores del filtro.

  • n representa el orden de los denominadores del filtro.

Para obtener más información sobre el formato de la función de transferencia en cascada y las matrices de coeficientes, consulte Especificar filtros digitales en formato CTF.

Nota

Si cualquier elemento de A(:,1) no equivale a 1, entonces freqz normaliza los coeficientes de filtro mediante A(:,1). En este caso, A(:,1) debe ser distinto de cero.

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

Desde R2024b

Valores de escala, especificados como un escalar de valor real o un vector de valor real con L + 1 elementos, donde L es el número de secciones CTF. Los valores de escala representan la distribución de la ganancia del filtro en las secciones de la representación del filtro en cascada.

La función freqz aplica una ganancia a las secciones de filtro usando la función scaleFilterSections dependiendo de cómo especifique g:

  • Escalar: la función distribuye la ganancia uniformemente en todas las secciones de filtro.

  • Vector: la función aplica los primeros valores de ganancia L a las secciones de filtro correspondientes y distribuye el último valor de ganancia uniformemente en todas las secciones de filtro.

Tipos de datos: double | single

Filtro digital, especificado como un objeto digitalFilter. Utilice designfilt para generar un filtro digital según las especificaciones de frecuencia-respuesta.

Ejemplo: d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5) especifica un filtro Butterworth de tercer orden con una frecuencia normalizada de 3 dB de 0,5π rad/muestra.

Coeficientes de la sección de segundo orden, especificados como una matriz. sos es una matriz de K por 6, donde el número de secciones, K, debe ser mayor o igual a 2. Si el número de secciones es inferior a 2, la función trata la entrada como un vector de numerador. Cada fila de sos corresponde a los coeficientes de un filtro de segundo orden (bicuadrado). La fila i de sos corresponde a [bi(1) bi(2) bi(3) ai(1) ai(2) ai(3)].

Ejemplo: s = [2 4 2 6 0 2;3 3 0 6 0 0] especifica un filtro Butterworth de tercer orden con una frecuencia normalizada de 3 dB de 0,5π rad/muestra.

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

Tasa de muestreo, especificada como un escalar positivo. Cuando la unidad de tiempo es el segundo, fs se expresa en hercios.

Tipos de datos: double

Frecuencias angulares, especificadas como un vector y expresadas en rad/muestra. w debe tener al menos dos elementos porque, de lo contrario, la función lo interpreta como n. w = π corresponde a la frecuencia de Nyquist.

Frecuencias, especificadas como un vector. f debe tener al menos dos elementos porque, de lo contrario, la función lo interpreta como n. Cuando la unidad de tiempo es el segundo, f se expresa en hercios.

Tipos de datos: double

Argumentos de salida

contraer todo

Respuesta de frecuencia, devuelta como un vector. Si especifica n, h tiene una longitud n. Si no especifica n, o especifica n como el vector vacío, h tiene una longitud 512.

Si la entrada de freqz es de una precisión simple, la función calcula la respuesta de frecuencia mediante la aritmética de precisión simple. La salida h es de una precisión simple.

Frecuencias angulares, devueltas como un vector. w tiene valores que van de 0 a π. Si especifica 'whole' en su entrada, los valores de w van de 0 a 2π. Si especifica n, w tiene una longitud n. Si no especifica n, o especifica n como el vector vacío, w tiene una longitud 512.

Frecuencias, devueltas como un vector y expresadas en hercios. f tiene valores que van de 0 a fs/2 Hz. Si especifica 'whole' en su entrada, los valores de f van de 0 a fs Hz. Si especifica n, f tiene una longitud n. Si no especifica n, o especifica n como el vector vacío, f tiene una longitud 512.

Más acerca de

contraer todo

Sugerencias

  • Puede obtener filtros en formato CTF, incluida la ganancia de escala. Utilice las salidas de las funciones de diseño de filtros IIR digitales, como butter, cheby1, cheby2 y ellip. Especifique el argumento de tipo de filtro "ctf" en estas funciones y especifique que se devuelvan B, A y g para obtener los valores de escala. (desde R2024b)

  • Si tiene un filtro multitasa irreductible, use la función freqzmr (DSP System Toolbox) para analizar el filtro en el dominio de frecuencia. Para más información sobre los filtros multitasa irreductibles, consulte Overview of Multirate Filters (DSP System Toolbox). (desde R2024a)

  • La función freqzmr (DSP System Toolbox) requiere DSP System Toolbox™. (desde R2024a)

Algoritmos

La respuesta de frecuencia de un filtro digital puede interpretarse como la función de transferencia evaluada en z = e [1].

freqz determina la función de transferencia a partir de los polinomios (reales o complejos) del numerador o denominador que especifique y devuelve la respuesta de frecuencia compleja, H(e), de un filtro digital. La respuesta de frecuencia se evalúa en puntos de muestra determinados por la sintaxis que utilice.

freqz suele utilizar un algoritmo FFT para calcular la respuesta de frecuencia siempre que no se suministre un vector de frecuencias como argumento de entrada. Calcula la respuesta de frecuencia como la relación de los coeficientes transformados del numerador y del denominador, rellenados con ceros hasta la longitud deseada.

Cuando se suministra un vector de frecuencias como entrada, freqz evalúa los polinomios en cada punto de frecuencia y divide la respuesta del numerador entre la respuesta del denominador. Para evaluar los polinomios, la función utiliza el método de Horner.

Referencias

[1] Oppenheim, Alan V., and Ronald W. Schafer, with John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

[2] Lyons, Richard G. Understanding Digital Signal Processing. Upper Saddle River, NJ: Prentice Hall, 2004.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido antes de R2006a

expandir todo

Consulte también

Apps

Funciones