Mon objectif est de pouvoir représenter graphiquement les éléments suivants:
x(n)= delta(n)+delta(n-1)+delta(n-2)+….+delta(n-10)+delta(n-11)
J'ai écrit ce code:
n = -15:15
e(m) = dirc(n(m));
k = 1
for m = 1 : length(n)
while k < 12
e_1(m) = dirc(n(m)-k);
k = k + 1
end
e(m) = e(m) + e_1(m)
end
subplot(4,4,5);
stem(n,e,"m","markersize",3,"linewidth",1)
xlabel("n")
ylabel("delta[n]")
title ("(e)")
et j'ai écrit la fonction dirc comme suit:
function output = dirc(input)
output = 0;
if input == 0
output = 1;
end
end
L'erreur est
L'index dépasse les dimensions de la matrice
Comme vous pouvez le voir, il s'agit d'une fonction de terminaison, j'aimerais pouvoir représenter quelque chose comme ceci par la suite:
x(n)= delta(n)+delta(n-1)+delta(n-2)+….
Réponses:
2 pour la réponse № 1Tu ne nous montres pas quoi m
est dans la deuxième ligne, qui est une source probable de vos problèmes. De plus, vous devrez pré-allouer le vecteur e
si vous souhaitez incrémenter ses valeurs dans une boucle, cela peut également vous donner des erreurs hors limites.
Comme pour le reste de votre code, vous pouvez remplacer dirc(input)
avec simplement input==0
, les valeurs logiques résultantes seront compatibles avec les valeurs numériques 0
et 1
(au cas où le input
est scalaire, ce qui semble être le cas pour vous).
En fait, ce que vous essayez d’atteindre, c’est la fonction
kmax = 11;
xfun = @(n) ismember(n,0:kmax); %// anonymous function
x(n) = xfun(n); %// evaluate at any specific value n
ou si vous voulez calculer x(n)
pour plusieurs valeurs de n
immediatement:
kmax = 11;
xfun = @(n) sum(bsxfun(@eq,n(:),0:kmax),2);%// anonymous function
xvec = xfun(-15:15); %// evaluate at every n simultaneously