/ / Zwiększanie zmiennej wewnątrz funkcji w MATLAB - matlab, przetwarzanie sygnału

Zwiększanie zmiennej wewnątrz funkcji w MATLAB - matlab, przetwarzanie sygnału

Moim celem jest wykreślenie następujących elementów:

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

Napisałem ten kod:

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

i napisałem funkcję dirc w następujący sposób:

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

Błąd jest

Indeks przekracza wymiary matrycy

Jak widać, jest to funkcja kończąca, chciałbym być w stanie w końcu narysować coś takiego:

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

Odpowiedzi:

2 dla odpowiedzi № 1

Nie pokazujesz nam co m jest w drugim wierszu, to prawdopodobne źródło twoich problemów. Ponadto musisz wstępnie przydzielić wektor e jeśli chcesz zwiększyć jego wartości w pętli, może to również spowodować błędy poza zakresem.

Jeśli chodzi o resztę kodu, możesz go zastąpić dirc(input) po prostu input==0, wynikowe wartości logiczne będą zgodne z liczbowymi 0 i 1 (w przypadku input jest skalarne, co wydaje się być przypadkiem dla ciebie).

W rzeczywistości to, co próbujesz osiągnąć, to funkcja

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

lub jeśli chcesz obliczyć x(n) dla wielu wartości n od razu:

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