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

📄 auto_meas.asv

📁 利用ccs环境、MATLAB环境、DSP(TMS320F2812)、被测对象和Agilient网络分析仪E5071B
💻 ASV
📖 第 1 页 / 共 2 页
字号:
%     fclose(ins);
%     return;
% end
fprintf(ins,':CALC1:DATA:FDAT?');
var1=fread(ins,[2,num+1],'float32');
data=[data var1(:,fix((num/2+2)))];  
waitbar(i/total);
figure(2);
subplot(211);plot(freq,var1(2,2:end));ylabel('PHASE');xlabel(str1); 
subplot(212);plot(freq,20*log10(var1(1,2:end)));ylabel('GAIN');xlabel(str1);
axis([(value1-value2/2)*10^9 (value1+value2/2)*10^9 -60 10]);
set(gca,'YTick',[-60 -50 -40 -35 -30 -25 -20 -15 -10 -5 0]);grid on;
end
close(h);
for i=1:total
    I_m(i)=data(1,i)*cos(data(2,i)*pi/180);
    Q_m(i)=data(1,i)*sin(data(2,i)*pi/180);
end
figure(1);
plot((I-0.5)/0.5,(Q-0.5)/0.5,':');hold on;
plot(I_m,Q_m,'r-.');hold on;
plot([-1 1],[0 0]);hold on;
plot([0 0],[-1 1]);hold off;
legend('Control vector','Measure result');
title(str2);
save result I Q I_m Q_m;

set(handles.button_adl5390,'enable','on');
set(handles.button_sa90_0001,'enable','on');
set(handles.button_stop,'enable','off');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [I,Q,mea_pha,gain]=adl5390(param_amp,param_pha)
% by the principle of the ad8341,convert the amp and phase to 2812's DA
% format,the range of which is 0~4095 
I=[];
Q=[];
qua_n=[];
mea_pha=[];
gain=[];
for i=1:length(param_amp)
    for j=1:length(param_pha)
        TI_1=10^(param_amp(i)/20)*cos(param_pha(j)*pi/180);
        TQ_1=10^(param_amp(i)/20)*sin(param_pha(j)*pi/180);
        VAR1=TI_1*0.285+0.5;  % the voltage
        VAR2=TQ_1*0.285+0.5;
        gain=[gain param_amp(i)];
        mea_pha=[mea_pha param_pha(j)];
        %%%%%
%         if abs(VAR1)>=1 | abs(VAR2)>=1
%             a=0;
%         end
        if(TI_1>0)
            if TQ_1>0
                n=1;
            else
                n=4;
            end
        else
            if TQ_1>0
            	n=2;
            else n=3;
            end
        end
        qua_n=[qua_n n];
        if abs(VAR1)>=1 | abs(VAR2)>=1 
            continue;
        else
             I=[I VAR1];
              Q=[Q VAR2];
        end
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [I,Q,mea_pha,gain]=ad8341(param_amp,param_pha)
% by the principle of the ad8341,convert the amp and phase to 2812's DA
% format,the range of which is 0~4095 
I=[];
Q=[];
qua_n=[];
mea_pha=[];
gain=[];
for i=1:length(param_amp)
    for j=1:length(param_pha)
        TI_1=10^(param_amp(i)/20)*cos(param_pha(j)*pi/180);
        TQ_1=10^(param_amp(i)/20)*sin(param_pha(j)*pi/180);
        VAR1=TI_1*0.5+0.5;
        VAR2=TQ_1*0.5+0.5;
        gain=[gain param_amp(i)];
        mea_pha=[mea_pha param_pha(j)];
        if(TI_1>0)
            if TQ_1>0
                n=1;
            else
                n=4;
            end
        else
            if TQ_1>0
            	n=2;
            else n=3;
            end
        end
        qua_n=[qua_n n];
        if VAR1>=1 | VAR2>=1 
            continue;
        else
            I=[I VAR1];
            Q=[Q VAR2];
        end
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [I,Q,mea_pha,gain]=ad8341_2(param_amp,param_pha)
% by the principle of the ad8341,convert the amp and phase to 2812's DA
% format,the range of which is 0~4095 
I=[];
Q=[];
qua_n=[];
mea_pha=[];
gain=[];
for j=1:length(param_pha)
    for i=1:length(param_amp)
        TI_1=10^(param_amp(i)/20)*cos(param_pha(j)*pi/180);
        TQ_1=10^(param_amp(i)/20)*sin(param_pha(j)*pi/180);
        VAR1=TI_1*0.5+0.5;
        VAR2=TQ_1*0.5+0.5;
        gain=[gain param_amp(i)];
        mea_pha=[mea_pha param_pha(j)];
        if(TI_1>0)
            if TQ_1>0
                n=1;
            else
                n=4;
            end
        else
            if TQ_1>0
            	n=2;
            else n=3;
            end
        end
        qua_n=[qua_n n];
        if VAR1>=1 | VAR2>=1 
            continue;
        else
            I=[I VAR1];
            Q=[Q VAR2];
        end
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [I,Q]=SA90_0001()
 I=[];Q=[];
 var=[1 512 1024 2048 4095];
for ii=1:5
    for jj=1:100:4095
        I=[I var(ii)];
        Q=[Q jj];
    end
end
for ii=1:5
    for jj=1:100:4095
        Q=[Q var(ii)];
        I=[I jj];
    end
end
mea_pha=[];
gain=[];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function send(In_pha,Qua_pha)
global cc rtdx_chan timeout_msg errmsg ins
    writemsg(rtdx_chan,'ichan',int16([In_pha,Qua_pha]));
            try
                var = readmsg(rtdx_chan,'ochan','int16');
                if(var~=555)
                    errordlg(errmsg,'Communication error !','modal');
                    return;
                end
                   % display data
            catch
                fclose(ins);
                 errmsg = lasterr;
                errordlg(errmsg,'error processing!','modal')
                return; 
            end
   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [in_pha,qua_pha]=receive() 
global cc rtdx_chan
        try
                data = readmsg(rtdx_chan,'ochan','int16');
%                 text_disp(data); % display data
        catch
                errmsg = lasterr;
                errordlg(errmsg,'Communication error !','modal')
             %   text_disp(NOMOREDATAMSG);
                return;
        end
         in_pha=double(data(1));
         qua_pha=double(data(2));
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     


% --- Executes on button press in button_sa90_0001.
function button_sa90_0001_Callback(hObject, eventdata, handles)
% hObject    handle to button_sa90_0001 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global param_amp param_pha
global cc rtdx_chan ins num freq var_pause
set(handles.button_stop,'enable','on');
set(handles.button_ad8341,'enable','off');
set(handles.button_adl5390,'enable','off');

 center=get(handles.edit_center,'string');
 value1=str2num(center);
 span=get(handles.edit_span,'string');
 value2=str2num(span);
 str1=sprintf('Start=%gGHz Center=%gGHz Stop=%gGHz',value1-value2/2,value1,value1+value2/2);
str2=sprintf('The measured Frequency is:%gGHz',value1);

[I,Q]=SA90_0001();
total=length(I);
data=[];
h = waitbar(0,'Measure in Processing ...');
send(222,333);
send(4095,4095);

counter=0;
var_pause=0;
for i=1:total
    counter=counter+1;
    if counter==10
        counter=0;
        pause(0.001);
    end
    if var_pause==1
        close(h);
        return;
    end

send(I(i),Q(i));  % must convert the analog value to the Control value
fread(ins,ins.BytesAvailable,'uint8');
fprintf(ins,':TRIG:SING');
fprintf(ins,'*OPC?');
mea=fscanf(ins,'%c',3);

fprintf(ins,':CALC1:DATA:FDAT?');

var1=fread(ins,[2,num+1],'float32');
data=[data var1(:,fix((num/2+2)))];  
waitbar(i/total);
dd=sprintf('I=%g  Q=%g',I(i)*5/4095,Q(i)*5/4095);
set(handles.voltage,'string',dd);
end
close(h);
 
for i=1:total
    I_m(i)=data(1,i)*cos(data(2,i)*pi/180);
    Q_m(i)=data(1,i)*sin(data(2,i)*pi/180);
end
figure(1);
plot(I/4095*5,Q/4095*5,':');hold on;
plot(I_m,Q_m,'r.');hold on;
plot([-1 1],[0 0]);hold on;
plot([0 0],[-1 1]);hold off;
legend('Control vector','Measure result');
save result I Q I_m Q_m;
set(handles.button_ad8341,'enable','on');
set(handles.button_adl5390,'enable','on');
set(handles.button_stop,'enable','off');


% --- Executes on button press in button_stop.
function button_stop_Callback(hObject, eventdata, handles)
% hObject    handle to button_stop (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global var_pause
var_pause=1;
set(handles.button_ad8341,'enable','on');
set(handles.button_sa90_0001,'enable','on');
set(handles.button_adl5390,'enable','on'); 


% --- Executes on button press in pushbutton11.
function pushbutton11_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton11 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global param_amp param_pha
global cc rtdx_chan ins num freq var_pause
 

 center=get(handles.edit_center,'string');
 value1=str2num(center);
 span=get(handles.edit_span,'string');
 value2=str2num(span);
 str1=sprintf('Start=%gGHz Center=%gGHz Stop=%gGHz',value1-value2/2,value1,value1+value2/2);
str2=sprintf('The measured Frequency is:%gGHz',value1);
amp_c=[];
pha_c=[];
data_c=[];
for i=0:30
    for j=0:3:359
        amp=i;
        pha=round(j/3);
%         var=10^(i/20)*cos(j*pi/180);
%         I_c=[I_c var];
%         var=10^(i/20)*sin(j*pi/180);
%         Q_c=[Q_c var];
        amp_c=[amp_c amp];
        pha_c=[pha_c pha*3];
        var1=dec2binvec(amp,8);
        var2=dec2binvec(pha,8);
        var3=[0 var2(1:7) var1];
        data_s=binvec2dec(var3);
        data_c=[data_c data_s];
    end
end
        
 
total=length(data_c);
amp_res=[];
pha_res=[];
h = waitbar(0,'Measure in Processing ...');

for i=1:total
        writemsg(rtdx_chan,'ichan',int16(data_c(i)));
            try
                var = readmsg(rtdx_chan,'ochan','int16');
                if(var~=555)
                    errordlg(errmsg,'Communication error !','modal');
                    return;
                end
                   % display data
            catch
                fclose(ins);
                 errmsg = lasterr;
                errordlg(errmsg,'error processing!','modal')
                return; 
            end
    
str_mea=sprintf('IQ Control variable:\n Phase is: %d\n Gain is:%g',pha_c(i),amp_c(i));
set(handles.text_disp,'string',str_mea);
fread(ins,ins.BytesAvailable,'uint8');
fprintf(ins,':TRIG:SING');
fprintf(ins,'*OPC?');
mea=fscanf(ins,'%c',3);
% if(mea(2)~='1')
%     errordlg('Error in the measure return !','modal');
%     fclose(ins);
%     return;
% end
fprintf(ins,':CALC1:DATA:FDAT?');
var1=fread(ins,[2,num+1],'float32');
data=[data var1(:,fix((num/2+2)))];  
waitbar(i/total);
 
end
close(h);
 
for i=1:total
    I_m(i)=data(1,i)*cos(data(2,i)*pi/180);
    Q_m(i)=data(1,i)*sin(data(2,i)*pi/180);
    I_c(i)=10^(amp_c(i)/20)*cos(pha_c(i)*pi/180);
    Q_c(i)=10^(amp_c(i)/20)*sin(pha_c(i)*pi/180);
end

figure(1);
plot(I_c,Q_c,':');hold on;
plot(I_m,Q_m,'r-.');hold on;
plot([-1 1],[0 0]);hold on;
plot([0 0],[-1 1]);hold off;
legend('Control vector','Measure result');
title(str2);
save test_vm I_c Q_c I_m Q_m; 
 
figure(1);
plot(I_c(121:end),Q_c(121:end),':');hold on;
plot(I_m(1:end-120),Q_m(1:end-120),'r-.');hold on;
plot([-1 1],[0 0]);hold on;
plot([0 0],[-1 1]);hold off;
xlabel('I');ylabel('Q');
legend('Control vector','Measure result');
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -