在MATLAB上增加函数内部的变量

时间:2016-02-07 21:06:44

标签: matlab signal-processing

我的目标是能够绘制以下内容:

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

我写了这段代码:

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

我写了函数dirc如下:

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

错误是

  

指数超出矩阵维度

正如您所看到的,这是一个终止功能,我希望能够最终绘制这样的图形:

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

1 个答案:

答案 0 :(得分:2)

你没有向我们展示第二行中m是什么,这可能是你问题的根源。此外,如果要在循环中递增其值,则必须预先分配向量e。这也可以为您提供越界错误。

至于代码的其余部分,您可以仅使用dirc(input)替换input==0,结果逻辑值将与数字01兼容(以防万一) input是标量,这似乎是你的情况。)

事实上,你想要实现的是功能

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

或者如果您想同时为x(n)的多个值计算n

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