For loop 正弦波绘图

For loop 正弦波绘图,for-loop,if-statement,plot,trigonometry,For Loop,If Statement,Plot,Trigonometry,我试图生成一个正弦波,它在0.004秒的时间间隔内被定期斩波(输出在0到0.004秒时为正弦波,然后在0.004秒到0.008秒时为零。这将以类似的方式继续) 我尝试了以下代码,但没有生成正确的输出 f=10000000000; k=0; for i=0:0.004:1 k=k+1; if(mod(k,2)~=0) t=i:0.001:i+0.004; y=sin(2*3.14*f*t); plot(t,y); else

我试图生成一个正弦波,它在0.004秒的时间间隔内被定期斩波(输出在0到0.004秒时为正弦波,然后在0.004秒到0.008秒时为零。这将以类似的方式继续)

我尝试了以下代码,但没有生成正确的输出

f=10000000000;
k=0;
for i=0:0.004:1
    k=k+1;
    if(mod(k,2)~=0)
        t=i:0.001:i+0.004;
        y=sin(2*3.14*f*t);
        plot(t,y);
    else
        t=i:0.001:i+0.004;
        y=0;
        plot(t,y);
    end
end

对于在Matlab中进行打印,您需要一个x值数组,以及要打印的整个截面的相应y值数组。因此,您需要首先创建一个对应于从0到1.004的时间的x数组(如果我正确理解了您的代码),然后创建一个相同长度的y数组,并用相应的正弦和0值填充它

f = 10000000000;
% generate evenly spaced x axis of 251*n+1 points evenly spaced between 0 and 1.004 (i.e. spacing between two points is 0.004/n). n should be an integer.
t = linspace(0, 1.004, 251*n+1);
% generate unchopped sine
y = sin(2*3.14*f*t);
% set desired intervals to zero
for i=1:251*n+1 % for each index in y
    % if the corresponding entry in t is a multiple of 0.008, backfill y with zeros for 0.004s.
    if(mod(t(i), 0.008)==0)
        if(i>1-n)
            for j=i-n:i
                y(j) = 0;
            end
        end
    end
end
plot(t, y)

对您想要的输出进行更多的描述可能会有所帮助:您想要切碎什么部分?我已经编辑了我的描述。我尝试了您的代码,但结果出错。它说尝试访问y(3.984),索引必须是正整数或整数logical@IshantTiwari,我以前的方法对n将军不起作用,我编辑过,所以现在它应该与正整数n一起工作。例如,我们试图访问y的索引,它们对应于0.004和0.008之间的部分,索引的工作方式类似于计数,因此它们必须是正整数。