/ / Incrémenter une variable à l'intérieur d'une fonction sur MATLAB - matlab, traitement du signal

Incrémenter une variable dans une fonction sur MATLAB - Matlab, traitement du signal

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 № 1

Tu 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