Contenu principal

freqz

Réponse en fréquence d’un filtre numérique

Description

[h,w] = freqz(b,a,n) renvoie la réponse en fréquence du filtre numérique spécifié. Définissez un filtre numérique avec les coefficients de numérateur b et les coefficients de dénominateur a. La fonction renvoie le vecteur de réponses en fréquence à n points dans h et le vecteur de fréquences angulaires correspondantes w.

exemple

[h,w] = freqz(B,A,"ctf",n) renvoie la réponse en fréquence à n points du filtre numérique représenté par des Cascaded Transfer Functions (CTF) avec les coefficients de numérateur B et les coefficients de dénominateur A. (depuis R2024b)

exemple

[h,w] = freqz({B,A,g},"ctf",n) renvoie la réponse en fréquence à n points du filtre numérique au format CTF. Définissez le filtre avec les coefficients de numérateur B, les coefficients de dénominateur A et les valeurs d’échelle g pour toutes les sections de filtre. (depuis R2024b)

exemple

[h,w] = freqz(d,n) renvoie la réponse en fréquence complexe à n points du filtre numérique d.

exemple

[h,w] = freqz(sos,n) renvoie la réponse en fréquence complexe à n points correspondant à la matrice de sections de second ordre sos.

exemple

[h,w] = freqz(___,n,"whole") renvoie la réponse en fréquence à n points d’échantillonnage tout autour du cercle unité.

[h,f] = freqz(___,n,fs) renvoie le vecteur de réponses en fréquence h et le vecteur de fréquences physiques correspondantes f pour un filtre numérique conçu pour filtrer des signaux échantillonnés à la fréquence fs.

[h,f] = freqz(___,n,"whole",fs) renvoie le vecteur de fréquences à n points compris entre 0 et fs.

h = freqz(___,w) renvoie le vecteur de réponses en fréquence h évaluées aux fréquences normalisées indiquées dans w.

h = freqz(___,f,fs) renvoie le vecteur de réponses en fréquence h évaluées aux fréquences physiques indiquées dans f.

freqz(___) sans arguments de sortie trace la réponse en fréquence du filtre.

exemple

Exemples

réduire tout

Calculez et affichez la réponse en amplitude du filtre IIR passe-bas de troisième ordre décrit par la fonction de transfert suivante :

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

Exprimez le numérateur et le dénominateur sous forme de convolutions polynomiales. Déterminez la réponse en fréquence à 2 001 points répartis tout autour du cercle unité.

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

Tracez la réponse en amplitude exprimée en décibels.

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.

Depuis R2024b

Créez un filtre de Tchebychev numérique de type II passe-bas d’ordre 40 avec une fréquence limite de la bande atténuée de 0,4 et une atténuation dans la bande coupée de 50 dB. Tracez la réponse en fréquence du filtre en utilisant ses coefficients au format 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.

Créez un filtre numérique elliptique passe-bande d’ordre 30 avec des fréquences limites de la bande passante de 0,3 et 0,7, une ondulation dans la bande passante de 0,1 dB et une atténuation dans la bande coupée de 50 dB. Tracez la réponse en fréquence du filtre en utilisant ses coefficients et son gain au format 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.

Créez un filtre FIR passe-bas d’ordre 80 en utilisant une fenêtre de Kaiser avec β=8. Définissez une fréquence de coupure normalisée de 0.5π rad/échantillon. Affichez les réponses en amplitude et en phase du filtre.

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.

Créez le même filtre avec designfilt. Affichez ses réponses en amplitude et en phase.

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.

Créez un filtre FIR passe-bande avec une bande passante comprise entre 0.35π et 0.8π rad/échantillon et une ondulation de 3 dB. La première bande atténuée est comprise entre 0 et 0.1π rad/échantillon et son atténuation est de 40 dB. La deuxième bande atténuée est comprise entre 0.9π rad/échantillon et la fréquence de Nyquist et son atténuation est de 30 dB. Calculez la réponse en fréquence. Tracez son amplitude en unités linéaires et en décibels. Mettez la bande passante en surbrillance.

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.

Calculez et affichez la réponse en amplitude du filtre IIR passe-bas de troisième ordre décrit par la fonction de transfert suivante :

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

Exprimez la fonction de transfert en fonction des sections de second ordre. Déterminez la réponse en fréquence à 2 001 points répartis tout autour du cercle unité.

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

Tracez la réponse en amplitude exprimée en décibels.

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.

Arguments d'entrée

réduire tout

Coefficients de la fonction de transfert, définis par des vecteurs. Exprimez la fonction de transfert en fonction de b et de a comme suit :

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

Exemple : b = [1 3 3 1]/6 et a = [3 0 1 0]/3 définissent un filtre de Butterworth de troisième ordre avec une fréquence à 3 dB normalisée de 0,5π rad/échantillon.

Types de données : double | single
Support des nombres complexes : Oui

Nombre de points de fréquence sur lesquels évaluer la réponse, défini par un scalaire entier positif supérieur ou égal à 2. Si n est absent, la valeur 512 est utilisée par défaut. Pour des résultats optimaux, définissez n à une valeur supérieure à l’ordre du filtre.

Depuis R2024b

Coefficients de la fonction de transfert en cascade (CTF), définis par des scalaires, des vecteurs ou des matrices. B et A indiquent respectivement les coefficients de numérateur et de dénominateur de la fonction de transfert en cascade.

B doit être de taille L x (m + 1) et A doit être de taille L x (n + 1), où :

  • L représente le nombre de sections de filtre.

  • m représente l’ordre des numérateurs du filtre.

  • n représente l’ordre des dénominateurs du filtre.

Pour plus d’informations sur le format de la fonction de transfert en cascade et les matrices de coefficients, veuillez consulter Spécifier des filtres numériques au format CTF.

Remarque

Si un élément de A(:,1) n’est pas égal à 1, la fonction freqz normalise les coefficients de filtre selon A(:,1). Dans ce cas, A(:,1) ne doit pas contenir de valeur nulle.

Types de données : double | single
Support des nombres complexes : Oui

Depuis R2024b

Valeurs d’échelle, définies par un scalaire à valeur réelle ou un vecteur à valeurs réelles à L + 1 éléments, où L est le nombre de sections CTF. Les valeurs d’échelle représentent la répartition du gain du filtre entre les sections de la représentation de filtre en cascade.

La fonction freqz applique un gain aux sections de filtre en utilisant la fonction scaleFilterSections selon la manière dont vous définissez g :

  • Scalaire : la fonction répartit uniformément le gain entre toutes les sections de filtre.

  • Vecteur : la fonction applique les L premières valeurs de gain aux sections de filtre correspondantes. La dernière valeur de gain est répartie uniformément entre toutes les sections de filtre.

Types de données : double | single

Filtre numérique, défini par un objet digitalFilter. Utilisez designfilt pour générer un filtre numérique selon des spécifications de réponse en fréquence.

Exemple : d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5) définit un filtre de Butterworth de troisième ordre avec une fréquence à 3 dB normalisée de 0,5π rad/échantillon.

Coefficients des sections de second ordre, définis par une matrice. sos est une matrice K x 6 où le nombre de sections K doit être supérieur ou égal à 2. Si le nombre de sections est inférieur à 2, la fonction traite l’entrée comme un vecteur de numérateurs. Chaque ligne de sos correspond aux coefficients d’un filtre de second ordre (biquadratique). La i-ième ligne de sos correspond à [bi(1) bi(2) bi(3) ai(1) ai(2) ai(3)].

Exemple : s = [2 4 2 6 0 2;3 3 0 6 0 0] définit un filtre de Butterworth de troisième ordre avec une fréquence à 3 dB normalisée de 0,5π rad/échantillon.

Types de données : double | single
Support des nombres complexes : Oui

Fréquence d’échantillonnage, définie par un scalaire positif. Si l’unité de temps est la seconde, fs est exprimé en hertz.

Types de données : double

Fréquences angulaires, définies par un vecteur et exprimées en rad/échantillon. w doit contenir au moins deux éléments. Sinon, la fonction l’interprète comme étant n. w = π correspond à la fréquence de Nyquist.

Fréquences, définies par un vecteur. f doit contenir au moins deux éléments. Sinon, la fonction l’interprète comme étant n. Si l’unité de temps est la seconde, f est exprimé en hertz.

Types de données : double

Arguments de sortie

réduire tout

Réponse en fréquence, renvoyée sous la forme d’un vecteur. Si vous spécifiez n, h a la longueur n. Si vous ne spécifiez pas n ou si vous définissez n par un vecteur vide, h a une longueur de 512.

Si l’entrée de freqz est à simple précision, la fonction calcule la réponse en fréquence en simple précision. La sortie h est à simple précision.

Fréquences angulaires, renvoyées sous la forme d’un vecteur. w contient des valeurs comprises entre 0 et π. Si vous spécifiez 'whole' en entrée, les valeurs de w sont comprises entre 0 et 2π. Si vous spécifiez n, w a la longueur n. Si vous ne spécifiez pas n ou si vous définissez n par un vecteur vide, w a une longueur de 512.

Fréquences, renvoyées sous la forme d’un vecteur et exprimées en hertz. f contient des valeurs comprises entre 0 et fs/2 Hz. Si vous spécifiez 'whole' en entrée, les valeurs de f sont comprises entre 0 et fs Hz. Si vous spécifiez n, f a la longueur n. Si vous ne spécifiez pas n ou si vous définissez n par un vecteur vide, f a une longueur de 512.

En savoir plus

réduire tout

Conseils

  • Vous pouvez obtenir des filtres au format CTF, y compris le gain de mise à l’échelle. Utilisez les sorties des fonctions de design de filtres IIR numériques telles que butter, cheby1, cheby2 et ellip. Indiquez l’argument de type de filtre "ctf" dans ces fonctions et spécifiez de renvoyer B, A et g pour obtenir les valeurs d’échelle. (depuis R2024b)

  • Si vous disposez d’un filtre multi-échantillonné irréductible, utilisez la fonction freqzmr (DSP System Toolbox) pour l’analyser dans le domaine fréquentiel. Pour plus d’informations sur les filtres multi-échantillonnés irréductibles, veuillez consulter Overview of Multirate Filters (DSP System Toolbox). (depuis R2024a)

  • La fonction freqzmr (DSP System Toolbox) nécessite DSP System Toolbox™. (depuis R2024a)

Algorithmes

La réponse en fréquence d’un filtre numérique peut être interprétée comme la fonction de transfert évaluée à z = e [1].

La fonction freqz détermine la fonction de transfert à partir des polynômes (réels ou complexes) de numérateur et de dénominateur que vous spécifiez. Elle renvoie la réponse en fréquence complexe H(e) d’un filtre numérique. La réponse en fréquence est évaluée aux points d’échantillonnage déterminés par la syntaxe utilisée.

La fonction freqz utilise généralement un algorithme FFT pour calculer la réponse en fréquence dans les cas où vous ne n’indiquez pas un vecteur de fréquences comme argument en entrée. Elle calcule la réponse en fréquence comme le rapport entre les coefficients de numérateur et de dénominateur transformés et comblés avec des zéros pour obtenir la longueur désirée.

Lorsque vous indiquez un vecteur de fréquences en entrée, freqz évalue les polynômes à chaque point de fréquence et divise la réponse du numérateur par la réponse du dénominateur. Pour évaluer les polynômes, la fonction utilise la méthode de Horner.

Références

[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.

Capacités étendues

développer tout

Historique des versions

Introduit avant R2006a

développer tout

Voir aussi

Applications

Fonctions