Erreur de fonction MATLAB inline

J'essaye d'exécuter cette routine MATLAB simple. qui va tracer une fonction de fenêtre.

M = 26;
n = [0:(M-1)];
om = linspace(-pi, pi, 201); % for displaying frequency response  
oc = pi/6; % cutoff frequency
% desired impulse response:
hd = inline('1*(abs(om) < oc)', 'om', 'oc');
stem(n, hd, 'filled')
axis([0 M-1 -0.1, 0.3]), xlabel 'n', ylabel 'h[n]'

Mais je reçois l'erreur suivante

??? Error using ==> inline.subsref at 14 Not enough inputs to inline function.

Error in ==> xychk at 80 if isvectorY, y = y(:); end

Error in ==> stem at 43 [msg,x,y] = xychk(args{1:nargs},'plot');

Je sens la fonction inline a assez d'entrées. mais l'erreur dit non. Toute aide serait appréciée.

EDIT # 1

J'ai donc appris comment utiliser la fonction anonyme et j'espère l'utiliser correctement mais maintenant j'ai une autre petite erreur. Voici le code édité.

 M = 26;
n = [0:(M-1)];
om = linspace(-pi, pi, 201); % for displaying frequency response  
oc = pi/6; % cutoff frequency
% desired impulse response:
hd = @(om,oc) 1*abs(om) < oc;
hn = hd(om,oc);
stem(n, hn, 'filled')
axis([0 M-1 -0.1, 0.3]), xlabel 'n', ylabel 'h[n]'

j'obtiens l'erreur X doit être de même longueur que Y dans la racine. Je comprends le point. Mais je ne peux pas comprendre comment faire n et hn de longueur égale. n est de -pi à + pi j'en suis sûr. mais n'est pas aussi hd de -pi à + pi. Aussi pouvez-vous dire comment faire de -pi à pi si ce n'est déjà fait.

0
ajouté édité
Vues: 1
@horchler .... j'ai maintenant utilisé la fonction anonyme. Mais j'ai un autre problème. J'ai ajouté l'édition 1 à propos de ce problème. Je suis désolé je ne maîtrise pas matlab donc toute aide serait très appréciée.
ajouté l'auteur urwaCFC, source
@horchler ... aussi je suis tombé sur fir1 en attendant ... mais je ne peux pas comprendre si je peux l'utiliser pour une fenêtre rectangulaire ou est seulement pour fredonner fenêtre.
ajouté l'auteur urwaCFC, source
Directement à partir de l'aide de inline dans R2013a: " inline sera supprimé dans une prochaine version, utilisez plutôt des fonctions anonymes." Les fonctions en ligne ont été pratiquement défuntes depuis plusieurs années maintenant. Vous devriez vraiment apprendre à utiliser les fonctions anonymes , qui sont plus puissant et plus rapide.
ajouté l'auteur horchler, source
Soit om = linspace (-pi, pi, M); ou change en M = 201; pour que n et om aura la même longueur. Je devine que vous mangerez réellement pour tracer om (hn) comme hn est juste Booleans. Aucune idée sur fir1 - cela ressemble à l'objet d'une question distincte.
ajouté l'auteur horchler, source

1 Réponses

Le problème ici est que stem ne connaît pas la valeur de oc et om lorsqu'il essaie d'obtenir les valeurs y de votre fonction inline.

En général, il est préférable d'utiliser des fonctions anonymes à la place des inlines (puisque les inlines seront obsolètes à l'avenir):

hd = @(x,y) 1*abs(x)

La partie @ (...) définit le nombre d'entrées que prend la fonction; la partie après indique la fonction des deux entrées. Notez que vous pouvez avoir d'autres variables apparaissant dans la définition de la fonction. Leurs valeurs sont fixées au moment où la fonction anonyme est définie.

La sortie est une fonction comme par ex. sin , et peut être appelé comme tel.

3
ajouté
@Dan: oui, stem ne sait pas quelle valeur oc et om ont. J'ai oublié d'ajouter ceci à ma réponse.
ajouté l'auteur Jonas, source
@ user128806 l'utilise comme la fonction anonyme. Voir ma modification.
ajouté l'auteur Jonas, source
@ user128806: vous devez vous assurer que n et hn ont le même nombre d'éléments. Voir le commentaire @ horchler pour la solution. De plus, posez une question différente pour les filtres, peut-être sur dsp.stackexchange.com
ajouté l'auteur Jonas, source
mais je veux utiliser inline. qu'est-ce que je fais mal dans ce code ... je ne comprends toujours pas: /
ajouté l'auteur urwaCFC, source
@Jonas .. oui j'ai maintenant utilisé la fonction anonyme. mais j'ai un autre problème (ajouté en édition) .. pouvez vous aider avec ça. Je ne suis pas très bon matlab.
ajouté l'auteur urwaCFC, source
aussi je suis tombé sur fir1 en attendant .. mais je ne peux pas comprendre si je peux l'utiliser pour une fenêtre rectangulaire ou est seulement pour fredonner fenêtre. -
ajouté l'auteur urwaCFC, source
De toute façon - je pense que le problème est qu'il n'y avait pas d'arguments passés à hd dans la ligne stem où il avait zéro entrée, par opposition à la 2 il exige.
ajouté l'auteur Dan, source