проблема в определении размера переменной для файла m для операции цикла - PullRequest
0 голосов
/ 21 января 2019

Я установил алгоритм, содержащий циклы for в (m file) (mat-power), где он работает точно так, как требуется, когда входные данные даны в том же m файле (matpower), но когда я принимаю входной сигнал (ADC_Va) из Simulink, то это дает ошибку относительно размера входной переменной. то есть (пытается получить доступ к индексу 2 массива с меньшими размерами измерения. Допустимый диапазон индекса - от 1 до 1.) Итак, я попытался предварительно выделить размер переменной как: V = нули (N, 2); %, где N - счетчик цикла, а также количество выборок / цикл Ва (:, 1) = ADC_Va; % и назначил входные данные предварительно выделенной переменной.

Теперь имитация работала, но результаты были другими, так как согласно моему анализу данные 1-й строки ввода ADC_Va хранятся в каждом N строках переменных Va, а затем обновляются до следующего. (см. рисунок) и из-за чего результаты не совпадают.

Я предоставил как коды, которые я использовал только в среде 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

Наконец, если кто-то может помочь, я могу отправить файл модели по электронной почте для краткого понимания.

Ожидаемые результаты должны иметь постоянную величину выхода.

...