/ / Incrementare una variabile all'interno di una funzione su MATLAB - matlab, elaborazione del segnale

Incrementare una variabile all'interno di una funzione su MATLAB - matlab, elaborazione del segnale

Il mio obiettivo è riuscire a rappresentare graficamente quanto segue:

x(n)= delta(n)+delta(n-1)+delta(n-2)+….+delta(n-10)+delta(n-11)

Ho scritto questo codice:

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

e ho scritto la funzione dirc come segue:

function output = dirc(input)
output = 0;
if input == 0
output = 1;
end
end

L'errore è

L'indice supera le dimensioni della matrice

Come puoi vedere, questa è una funzione di terminazione, mi piacerebbe poter rappresentare qualcosa di simile alla fine:

x(n)= delta(n)+delta(n-1)+delta(n-2)+….

risposte:

2 per risposta № 1

Non ci stai mostrando cosa m è nella seconda riga, che è una probabile fonte dei tuoi problemi. Inoltre, dovrai pre-allocare il vettore e se vuoi incrementare i suoi valori in un ciclo, questo può anche darti errori fuori campo.

Per quanto riguarda il resto del codice, puoi sostituirlo dirc(input) con semplicemente input==0, i valori logici risultanti saranno compatibili con numerici 0 e 1 (nel caso in cui il input è scalare, che sembra essere il caso per te).

È un dato di fatto, ciò che stai cercando di ottenere è la funzione

kmax = 11;
xfun = @(n) ismember(n,0:kmax);  %// anonymous function
x(n) = xfun(n);                  %// evaluate at any specific value n

o se vuoi calcolare x(n) per più valori di n subito:

kmax = 11;
xfun = @(n) sum(bsxfun(@eq,n(:),0:kmax),2);%// anonymous function
xvec = xfun(-15:15);                       %// evaluate at every n simultaneously