Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

freqz

Respuesta de frecuencia del filtro digital

Descripción

ejemplo

[h,w] = freqz(b,a,n) devuelve el vector de respuesta de frecuencia de punto y el vector de frecuencia angular correspondiente para el filtro digital con coeficientes de función de transferencia almacenados en y .nhwba

ejemplo

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

ejemplo

[h,w] = freqz(d,n) devuelve la respuesta de frecuencia compleja de punto -punto para el filtro digital.nd

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

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

[h,f] = freqz(___,n,'whole',fs) devuelve el vector de frecuencia en puntos que oscilan entre 0 y .nfs

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

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

ejemplo

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

Ejemplos

contraer todo

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

<math display="block">
<mrow>
<mi>H</mi>
<mo stretchy="false">(</mo>
<mi>z</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mfrac>
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>0</mn>
<mn>5</mn>
<mn>6</mn>
<mn>3</mn>
<mn>4</mn>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>+</mo>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>-</mo>
<mn>1</mn>
<mo>.</mo>
<mn>0</mn>
<mn>1</mn>
<mn>6</mn>
<mn>6</mn>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo>+</mo>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mrow>
<mrow>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>-</mo>
<mn>0</mn>
<mo>.</mo>
<mn>6</mn>
<mn>8</mn>
<mn>3</mn>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>-</mo>
<mn>1</mn>
<mo>.</mo>
<mn>4</mn>
<mn>4</mn>
<mn>6</mn>
<mn>1</mn>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo>+</mo>
<mn>0</mn>
<mo>.</mo>
<mn>7</mn>
<mn>9</mn>
<mn>5</mn>
<mn>7</mn>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mrow>
</mfrac>
<mo>.</mo>
</mrow>
</math>

Exprese el numerador y el denominador como convoluciones polinómicos. Encuentre la respuesta de frecuencia en 2001 puntos que abarcan el círculo completo 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);

Trazar 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)')

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

<math display="block">
<mrow>
<mi>H</mi>
<mo stretchy="false">(</mo>
<mi>z</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mfrac>
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>0</mn>
<mn>5</mn>
<mn>6</mn>
<mn>3</mn>
<mn>4</mn>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>+</mo>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>-</mo>
<mn>1</mn>
<mo>.</mo>
<mn>0</mn>
<mn>1</mn>
<mn>6</mn>
<mn>6</mn>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo>+</mo>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mrow>
<mrow>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>-</mo>
<mn>0</mn>
<mo>.</mo>
<mn>6</mn>
<mn>8</mn>
<mn>3</mn>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>-</mo>
<mn>1</mn>
<mo>.</mo>
<mn>4</mn>
<mn>4</mn>
<mn>6</mn>
<mn>1</mn>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
<mo>+</mo>
<mn>0</mn>
<mo>.</mo>
<mn>7</mn>
<mn>9</mn>
<mn>5</mn>
<mn>7</mn>
<msup>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mrow>
</mfrac>
<mo>.</mo>
</mrow>
</math>

Exprese la función de transferencia en términos de secciones de segundo orden. Encuentre la respuesta de frecuencia en 2001 puntos que abarcan el círculo completo 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);

Trazar 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)')

Diseñe un filtro FIR de paso bajo de orden 80 utilizando una ventana Kaiser con

<math display="block">
<mrow>
<mi>β</mi>
<mo>=</mo>
<mn>8</mn>
</mrow>
</math>
. Especifique una frecuencia de corte normalizada de
<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>5</mn>
<mi>π</mi>
</mrow>
</math>
rad/muestra. Muestra las respuestas de magnitud y fase del filtro.

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

Diseñe el mismo filtro con .designfilt Muestre sus respuestas de magnitud y fase utilizando .fvtool

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

Diseñe un filtro de paso de banda FIR con banda de paso entre

<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>3</mn>
<mn>5</mn>
<mi>π</mi>
</mrow>
</math>
Y
<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>8</mn>
<mi>π</mi>
</mrow>
</math>
rad/muestra y 3 dB de ondulación. La primera banda de parada va desde
<math display="block">
<mrow>
<mn>0</mn>
</mrow>
</math>
Para
<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>1</mn>
<mi>π</mi>
</mrow>
</math>
rad/muestra y tiene una atenuación de 40 dB. La segunda banda de parada va de
<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>9</mn>
<mi>π</mi>
</mrow>
</math>
rad/muestra a la frecuencia Nyquist y tiene una atenuación de 30 dB. Calcular la respuesta de frecuencia. Trazar 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)')

Argumentos de entrada

contraer todo

Coeficientes de función de transferencia, especificados como vectores. Expresar la función de transferencia en términos y comoba

H(ejω)=B(ejω)A(ejω)=b(1)+b(2)ejω+b(3)ej2ω++b(M)ej(M1)ωa(1)+a(2)ejω+a(3)ej2ω++a(N)ej(N1)ω.

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

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

Número de puntos de evaluación, especificado como un escalar entero positivo no inferior a 2. Cuando está ausente, el valor predeterminado es 512.n Para obtener mejores resultados, establezca un valor mayor que el orden del filtro.n

Tipos de datos: double

Coeficientes de sección de segundo orden, especificados como una matriz. es una matriz -by-6, donde el número de secciones, , debe ser mayor o igual que 2.sosKK Si el número de secciones es menor que 2, la función trata la entrada como un vector de numerador. Cada fila de corresponde a los coeficientes de un filtro de segundo orden (biquad).sos La ta fila de corresponde a .isos[bi(1) bi(2) bi(3) ai(1) ai(2) ai(3)]

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

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

Filtro digital, especificado como un objeto.digitalFilter Se utiliza para generar un filtro digital basado en las especificaciones de respuesta de frecuencia.designfilt

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

Frecuencia de muestreo, especificada como escalar positiva. Cuando la unidad de tiempo es segundos, se expresa en hercios.fs

Tipos de datos: double

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

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

Tipos de datos: double

Argumentos de salida

contraer todo

Respuesta de frecuencia, devuelta como vector. Si especifica , tiene longitud .nhn Si no especifica o especifica como vector vacío, tiene la longitud 512.nnh

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

Frecuencias angulares, devueltas como vector. tiene valores que van desde 0 a .wπ Si especifica en la entrada, los valores en rango de 0 a 2 .'whole'wπ Si especifica , tiene longitud .nwn Si no especifica , o especifica como vector vacío, tiene la longitud 512.nnw

Frecuencias, devueltas como un vector expresado en hercios. tiene valores que van de 0 a /2 Hz.ffs Si especifica en la entrada, los valores en rango de 0 a Hz.'whole'ffs Si especifica , tiene longitud .nfn Si no especifica , o especifica como vector vacío, tiene la longitud 512.nnf

Algoritmos

La respuesta de frecuencia de un filtro digital se puede interpretar como la función de transferencia evaluada en .ze .[1]

determina la función de transferencia a partir de los ponomios numeradores y denominadores (reales o complejos) que especifique y devuelve la respuesta de frecuencia compleja, (freqzHe), de un filtro digital. La respuesta de frecuencia se evalúa en puntos de muestra determinados por la sintaxis que utilice.

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

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

Referencias

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

Capacidades ampliadas

Consulte también

| | | | | | | | |

Introducido antes de R2006a