2024-11-26 13:34:17 +08:00
|
|
|
|
%compare FIL with python script
|
2024-12-30 14:06:53 +08:00
|
|
|
|
function diff_plot_py(fs,iir_out, Script_out,title1,title2,a,amp,edge,fileID)
|
2024-11-26 13:34:17 +08:00
|
|
|
|
%输入数据长度不等时取其公共部分
|
|
|
|
|
N = min(length(iir_out),length(Script_out));
|
|
|
|
|
iir_out = iir_out(1:N);
|
|
|
|
|
Script_out = Script_out(1:N);
|
|
|
|
|
|
|
|
|
|
diff = (iir_out - Script_out)/amp;%求差,并归一化
|
|
|
|
|
|
|
|
|
|
n = (0:1:N-1)/fs;
|
|
|
|
|
%找出关心的数据点
|
|
|
|
|
n_edge = find(n>=edge-1e-12);%edge代表下降沿
|
|
|
|
|
n50 = find(n>=edge+20e-9-1e-12);%下降沿后20ns
|
|
|
|
|
n20_40 = find((n>=edge+20e-9-1e-12) & (n<=edge+40e-9+1e-12));%下降沿后20ns到40ns
|
|
|
|
|
n1000 = find(n>=edge+1000e-9-1e-12);%下降沿后1us
|
|
|
|
|
n1000_1100 = find((n>=edge+1000e-9-1e-12) & (n<=edge+1100e-9+1e-12));%下降沿后1us到1.1us
|
|
|
|
|
|
|
|
|
|
ne = find((abs(diff)>=1e-4) & (abs(diff)<1));%误差小于万分之一的点
|
|
|
|
|
ne(1) = 1;
|
|
|
|
|
|
2024-11-26 20:38:29 +08:00
|
|
|
|
window_length = 100e-9*fs;
|
|
|
|
|
diff_mean_window = movmean(diff,window_length);
|
|
|
|
|
diff_std_window = movstd(diff,window_length);
|
|
|
|
|
n_mean_window = find((abs(diff_mean_window)>=1e-4) );%100ns窗,误差均值小于万分之一点
|
|
|
|
|
n_std_window = find((abs(diff_std_window)>=1e-4) ); %100ns窗,误差方差小于万分之一点
|
|
|
|
|
n_common = max(n_mean_window(end),n_std_window(end));
|
2024-11-26 13:34:17 +08:00
|
|
|
|
%原始数据作图
|
|
|
|
|
tiledlayout(2,1)
|
|
|
|
|
ax1 = nexttile;
|
|
|
|
|
plot(n,iir_out,n,Script_out)
|
|
|
|
|
legend(title1,title2)
|
|
|
|
|
xlabel('t/s')
|
|
|
|
|
xlim(a)
|
|
|
|
|
grid on
|
|
|
|
|
hold on
|
|
|
|
|
|
|
|
|
|
%差值做图
|
|
|
|
|
ax2 = nexttile;
|
|
|
|
|
plot(n,diff)
|
|
|
|
|
xlabel('t/s')
|
|
|
|
|
title('diff')
|
|
|
|
|
grid on
|
|
|
|
|
hold on
|
|
|
|
|
xlim(a)
|
|
|
|
|
linkaxes([ax1,ax2],'x');
|
|
|
|
|
|
|
|
|
|
plot_p = @(x)[
|
|
|
|
|
plot(n(x),diff(x),'r*');
|
|
|
|
|
text(n(x), diff(x)+diff(x)*0.1, ['(',num2str(n(x)),',',num2str(diff(x)),')'],'color','k');
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
ne(1) = 1;
|
|
|
|
|
|
|
|
|
|
% [diff_max,R_mpos] = max(abs(diff));%误差最大值
|
|
|
|
|
% plot_p(R_mpos);
|
|
|
|
|
|
|
|
|
|
if a(2) <= 5e-6
|
|
|
|
|
plot_p(n_edge(1));%下降沿
|
|
|
|
|
% plot_p(R_mpos);
|
2024-12-30 14:06:53 +08:00
|
|
|
|
elseif a(2) == 20e-6
|
2024-11-26 13:34:17 +08:00
|
|
|
|
plot_p(n50(1)); %下降沿20ns
|
|
|
|
|
plot_p(n1000(1)); %下降沿1us
|
|
|
|
|
plot_p(ne(end)); %误差小于万分之一
|
2024-12-30 14:06:53 +08:00
|
|
|
|
fprintf(fileID,"Falling edge of 20ns~40ns mean :%.4e\t std :%.4e\t",mean(diff(n20_40)),std(diff(n20_40)));
|
|
|
|
|
fprintf(fileID,"Falling edge of 1us~1.1us mean :%.4e\t std :%.4e\t",mean(diff(n1000_1100)),std(diff(n1000_1100)));
|
2024-11-26 13:34:17 +08:00
|
|
|
|
% fprintf("The error after falling edge of 1us is:%.4e\t",diff(n1000(1)));
|
|
|
|
|
% fprintf("The time of erroe less than 1e-4 is :%.4e us\n",(n(ne(end))-n(n_edge(1))));
|
2024-12-30 14:06:53 +08:00
|
|
|
|
fprintf(fileID,"The mean and std stably less than 1e-4 is :%.4e s\n",(n(n_common)-n(n_edge(1))));
|
2024-11-26 13:34:17 +08:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|