为循环操作定义m文件的变量大小的问题

时间:2019-01-21 07:49:33

标签: matlab size simulink matpower

我在(m文件)(mat-power)中设置了一个包含for循环的算法,当在同一个m文件(matpower)中给出输入时,它的性能完全符合要求,但是当我获取输入信号(ADC_Va)时然后从Simulink中获取有关输入变量大小的错误信息。即(尝试访问尺寸较小的数组的索引2。 有效索引范围是1到1。) 因此,我尝试将变量大小预先分配为: V =零(N,2); %,其中N是for循环计数器,也是每个循环的样本数 Va(:,1)= ADC_Va; %,并将输入数据分配给预分配的变量。

现在模拟正在进行,但结果有所不同,因为根据我的分析,输入ADC_Va的第一行数据存储在变量Va存储的每N行中,然后更新至下一行。 (参考图片) 并且由于结果不同。

我提供了我只在Matpower m.file环境中使用过的代码和Simulink作为matlab fcn所使用的代码。

我与Simulink一起使用时遇到了问题。

    function [Va,Magnitude,phasorsa]=NON_Rec(ADC_Va)
    N=12;   %samples per cycle
    Va=zeros(N,2);        % input variable size
    Va(:,1)=ADC_Va;

    for k=1:N
    Xka=0;
    Xska=0;

    for n=1:N

     X_ca=Va(n+k-1)*(cos(2*pi*(n-1)/N)); 
     Xka=Xka+X_ca;                                
     X_sa=Va(n+k-1)*(sin(2*pi*(n-1)/N));  
     Xska=Xska+X_sa;  
     Xca=sqrt(2)/N*(Xka);

   end
     Xsa=sqrt(2)/N*(Xska);
     Phasor_Mag=sqrt(Xca^2+Xsa^2);
     finala=Xca-(1i)*Xsa;
     Magnitude=[Phasor_Mag];

     end
     phasorsa=[finala]; %Output
     end

我在m.file文件中使用了此文件,并获得了准确的结果。

     N=12;
     f=50;
     fs=N*f;   %sampling frequency
     T=1/fs;    % sampling time
     t=0:T:1;
     xt=230*cos((2*pi*f*t)+(pi/4)); % input sinusoidal signal

     Xn=zeros(1,N);

    for m=1:N                       % used to execute samples
    Xa=230*cos((2*pi*f*(m-1)*T)+(pi/4));
    phse=angle(Xa)*180/pi;
    Xn(m,:) = [Xa];

    end


   for k=1:N
      Xk=0;
      Xsk=0;

      for n=1:N
           X_c=Xn(n+k-1)*(cos(2*pi/N*(n-1)));
     Xk=Xk+X_c;                                
     X_s=Xn(n+k-1)*(sin(2*pi*(n-1)/N));  
     Xsk=Xsk+X_s;                               

    end

    Xc=sqrt(2)/N*(Xk);
    Xs=sqrt(2)/N*(Xsk);
    Phasor_Mag=sqrt(Xc^2+Xs^2);
    Phasor_angle=(-atan(Xs/Xc)*180/pi);
    phasors(k,:)=[Phasor_Mag Phasor_angle]
    end

最后,如果有人可以提供帮助,我可以通过电子邮件将模型文件发送给我们,以进行简要了解。

预期结果应具有恒定的幅度输出。

0 个答案:

没有答案