使用matlab每隔一段时间读取一次示波器界面上的波形 。
clear;h=waitbar(0,'Please wait...');
loop_number = 10;
%------------------- b----OSC------------------------------
recordLen=100000;
g = visa('AGILENT','USB0::0x0957::0x17A2::MY53160311::0::INSTR');
set(g,'InputBufferSize',recordLen*3);
fopen(g);
fprintf(g,':WAVeform:SOURce CHANnel1');
fprintf(g,':WAVEFORM:FORMAT WORD');
fprintf(g,':WAVEFORM:BYTEORDER LSBFirst');
fprintf(g,':WAVeform:STReaming 1');
preambleBlock = query(g,':WAVEFORM:PREAMBLE?');
preambleBlock = regexp(preambleBlock,',','split');
horizLen = str2double(preambleBlock{3});
waveform_YIncrement = str2double(preambleBlock{8});
waveform_YOrigin = str2double(preambleBlock{9});
waveform_Yreference = str2double(preambleBlock{10});
%--------------------------------------------------------------------%
for cyclenum=1:8
recordLen2Transfer = min(recordLen,horizLen);
% waveform_raw = zeros(recordLen2Transfer,1);
fprintf(g,':WAVeform:DATA?');
% waveform_Raw = binblockread(g,'int 16'); fread(g,1);
[waveform_raw,count] = fread(g,recordLen2Transfer,'int16');
% waveform_YIncrement = query(g,':WAVeform:YINCrement?'); % V
% waveform_YIncrement = str2double(waveform_YIncrement);
waveform = (waveform_raw-waveform_Yreference) * waveform_YIncrement + waveform_YOrigin;
Data{cyclenum}= waveform;
waitbar(cyclenum/loop_number);
A=Data{cyclenum};
figure();
subplot(2,1,1)
plot(A);
title("time domain")
%傅里叶变换
fs = 2e9;
y = fft(A);
freq = (0 : length(A) - 1) * fs / length(A) / 1e6;
subplot(2,1,2)
plot(freq, 20 * log10(abs(y)));
title("frequency domain")
xlim([0, 9]);
max_am = max(20 * log10(abs(y)));
line([0, 9], [max_am, max_am], 'LineStyle', '--');
line([0, 9], [max_am - 6, max_am - 6], 'LineStyle', '--');
% index=num2str(cyclenum);
% index=strcat(datestr(now,'yyyymmddHHMMFFF'),num2str(cyclenum));
filename=strcat('D:/test/',datestr(now,'yyyymmddHHMMFFF'));
filename=strcat(filename,'.mat');
save(filename,'A');
%subplot(2,5,cyclenum);
pause(5);
end
%--------------------------------------------------------------------%
fclose(g);