我在(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
最后,如果有人可以提供帮助,我可以通过电子邮件将模型文件发送给我们,以进行简要了解。
预期结果应具有恒定的幅度输出。