⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 相频曲线测量_final.txt

📁 用GPIB卡配合matlab测量相频曲线源代码
💻 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 + -