📄 相频曲线测量_final.txt
字号:
%**************************************************************************
%本程序目的是测出电路的相频曲线数据点并画出相频曲线。
%本实验采用低通滤波电路作为输入电路,其参数为:C=1uF; R=20kOhm。 频率测试范围为2Hz--19Hz。
%实验器材:硬件:GPIB卡,计算机,Tektronix TDS210示波器,Tektronix AFG310信号源。
% 软件:Matlab 6.5
% 2005.7.2
%**************************************************************************
%**************************************************************************
%开始。
%**************************************************************************
Gpib_obj=gpib('ni',0,1);
g=gpib('ni',0,2);
In_Buffer_Size=2048;
set(Gpib_obj,'InputBufferSize',In_Buffer_Size);
for num=3:1:19
fre(num)=num;
fopen(g);
set(g,'EOSMode','read&write');
set(g,'EOSCharCode','LF');
[cmd]=sprintf('FREQ %d',fre(num));
fprintf(g,cmd); %改变频率实现扫频
fclose(g);
pause(1);
fopen(Gpib_obj);
%**********************************************************************
%取第一通道的波形数据并计算其初相;
%**********************************************************************
fprintf(Gpib_obj,'Data:Source CH1');
fprintf(Gpib_obj,'Data:Encdg SRpbinary');
fprintf(Gpib_obj,'Data:Width 1');
fprintf(Gpib_obj,'Data:Start 1');
fprintf(Gpib_obj,'Curve?'); %发出控制命令
data=fread(Gpib_obj,In_Buffer_Size); %读数据
clrdevice(Gpib_obj);
fclose(Gpib_obj);
data(1:10)=0; %去除开始的数据
data_mean=mean(data);data=data-data_mean; %去直流
data(1:10)=0;
subplot(2,2,1);plot(data); %显示
title('Channel 1');
for i=11:1:In_Buffer_Size
if (abs(data(i)-data(11))<1)&((i-11)>20)
same=i;
break;
end
end
for j=11:1:In_Buffer_Size
if (abs(data(j))<1)&((j-11)>20)
break;
end
end
for k=j:1:In_Buffer_Size
if (abs(data(k))<1)&((k-j)>40)
break;
end
end
t=k-j;
if data(11:21)>0.5&(j>same)
theta1(num)=180*(j-same)/t;
elseif data(11:21)>0.5&(j<same)
theta1(num)=180-180*(same-k)/t;
elseif data(11:21)<0.5&(j>same)
theta1(num)=(-1)*(180-180*(j-same)/t);
elseif data(11:21)<0.5&(j<same)
theta1(num)= (-1)*180*(same-k)/t;
else %data((j+k)/2)>0
theta1(num)=0;
%else
%theta1=-180;
end
%**************************************************************************
%取第二通道数据并计算其初相;
%**************************************************************************
fopen(Gpib_obj);
fprintf(Gpib_obj,'Data:Source CH2');
fprintf(Gpib_obj,'Data:Encdg SRpbinary');
fprintf(Gpib_obj,'Data:Width 1');
fprintf(Gpib_obj,'Data:Start 1');
fprintf(Gpib_obj,'Curve?'); %发出控制命令
data=fread(Gpib_obj,In_Buffer_Size); %读数据
clrdevice(Gpib_obj);
fclose(Gpib_obj);
data(1:10)=0; %去除开始10个数据
data_mean=mean(data);data=data-data_mean; %去直流
data(1:10)=0;
subplot(2,2,2);plot(data); %显示
title('Channel 2');
for i=11:1:In_Buffer_Size
if (abs(data(i)-data(11))<1)&((i-11)>20)
same=i;
break;
end
end
for j=11:1:In_Buffer_Size
if (abs(data(j))<1)&((j-11)>20)
break;
end
end
for k=j:1:In_Buffer_Size
if (abs(data(k))<1)&((k-j)>40)
break;
end
end
t=k-j;
if data(11:21)>0.5&(j>same)
theta2(num)=180*(j-same)/t;
elseif data(11:21)>0.5&(j<same)
theta2(num)=180-180*(same-k)/t;
elseif data(11:21)<0.5&(j>same)
theta2(num)=(-1)*(180-180*(j-same)/t);
elseif data(11:21)<0.5&(j<same)
theta2(num)=(-1)*180*(same-k)/t;
else %data((j+k)/2)>0
theta2(num)=0;
%else
% theta2=-180;
end
%*****************************************************************************
%theta1和theta2中分别为此时通道1和通道2中的波形的初相,相减即为相差;
%*****************************************************************************
phase(num)=theta1(num)-theta2(num);
%if ((phase(num)-phase(num-1))>50)&((phase(num-1)-phase(num))>50)
%phase(num)=phase(num-1);
%end
end
%*****************************************************************************
%以频率为横轴相差为纵轴画出相频曲线;
%*****************************************************************************
subplot(2,2,3);plot(fre(3:16),-phase(3:16));
title('Frequency_Phase');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -