📄 auto_meas.asv
字号:
% 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 + -