Я установил алгоритм, содержащий циклы 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
Наконец, если кто-то может помочь, я могу отправить файл модели по электронной почте для краткого понимания.
Ожидаемые результаты должны иметь постоянную величину выхода.