2016-04-09 1 views
1

Je Matlab pour concevoir un filtre et obtenir à coder alors les coefficients de la fonction de transfert a et b pour le filtre en C.Matlab IIR fonction de transfert de filtre

Cependant je constate que la fonction sos2tf crée différents valeurs que prévu. En fait, lorsque vous utilisez fvtool pour afficher le filtre en utilisant les coefficients b et a, le filtre est différent de celui de la représentation graphique en utilisant la matrice sos ou le filtre réel f.

Si vous essayez le code ci-dessous, vous pouvez mieux comprendre ce que je dis. Est-ce un problème de fonction venant de MATLAB? Puis-je utiliser des substituts à sos2tf ce qui me donne les coefficients de filtre requis? Ou puis-je les récupérer directement sans utiliser d'abord sos?

Notez que j'ai déjà essayé d'utiliser designfilt puis en utilisant la fonction tf et que les coefficients résultants sont exactement égaux à ceux obtenus avec le code ci-dessous. Merci pour votre aide

H = fdesign.lowpass('Fp,Fst,Ap,Ast',60,75,1,60,10000); 
f = design(H,'butter','MatchExactly','passband'); % Design an FIR BW filt 
info(f)     % View information about filter 
fvtool(f); 
[b,a] = sos2tf(f.sosMatrix); 
fvtool(b,a); 
+0

Pourriez-vous me donner les spécifications du filtre et la fréquence d'échantillonnage que vous utilisez? – VMMF

Répondre

0

Je ne sais pas exactement quel est le problème, car il ne fonctionne pas pour moi non plus, mais je vais vous donner une solution de contournement pour obtenir les coefficients de filtre. Dans la fenêtre de commande Matlab, tapez fdatool, une fenêtre d'application de conception de filtre apparaîtra, créez votre filtre en choisissant correctement les paramètres désirés. Une fois que vous avez terminé, dans cette fenêtre fdatool, allez dans Fichier-> Exporter-> Exporter sous-> Coefficients. À partir de ce même outil, vous pouvez sélectionner Fichier-> Générer le code matlab-> Fonction de conception du filtre (ou l'une des trois options). Et de cette façon vous éliminez les éventuels bogues qu'il pourrait y avoir dans le code que vous avez posté dans votre question. Voilà comment je le fais et ça a toujours bien fonctionné

+0

Cependant cela ne génère pas les coefficients de vecteur a et b dont j'ai besoin ... – fbdg

+0

Même si j'applique tf pour extraire les coefficients, après avoir fait ce que vous avez dit, je reçois beaucoup de bruit jusqu'à la bande passante f même si le filtre est beaucoup mieux que l'original. Ce qui me dérange, c'est que si j'applique fvtool aux valeurs sos, le filtre sort comme prévu, si j'applique fvtool aux vecteurs tf, le filtre de sortie est différent ... c'est assez bizarre .. – fbdg