У меня проблема с получением данных с осциллографа. MATLAB захватывает значения, которые превышают ограничение 255 для формата BYTE и 65 535 для беззнакового 16-разрядного целого числа при использовании формата WORD, и возвращают эти значения обратно с 0, что приводит к очень искаженной форме сигнала. Я использую следующий код и читаю данные с помощью binblockread:
clear all
clc
close all
%%
DSO_S_104A=instrfind('Type', 'visa-usb', 'RsrcName', 'USB0::0x2A8D::0x904A::MY54340109::0::INSTR', 'Tag', '');
DSO_S_104A.InputBufferSize = 350000;
DSO_S_104A.ByteOrder = 'littleEndian';
fopen(DSO_S_104A);
%% SETUP
set(DSO_S_104A, 'Timeout', 0.5);
%Set number of points
fprintf(DSO_S_104A, ':ACQUIRE:POINTS 48000');
% Set sample rate
fprintf(DSO_S_104A, ':ACQUIRE:SRATE 0.5e9');
% Turn interpolation off for faster averaging
fprintf(DSO_S_104A, ':ACQUIRE:INTERPOLATE OFF');
fprintf(DSO_S_104A,'*TRG');
fwrite(DSO_S_104A,'SYSTem:HEADer OFF');
% Specify data from Channel 1
fprintf(DSO_S_104A,':WAVEFORM:SOURCE CHAN1');
fprintf(DSO_S_104A,':WAVEFORM:FORMAT BYTE');
fprintf(DSO_S_104A,':WAVEFORM:BYTEORDER LSBFirst');
fprintf(DSO_S_104A, 'WAVEFORM:STREAMING OFF');
%%
fwrite(DSO_S_104A,sprintf(':WAV:DATA?\n'));
data2 = binblockread(DSO_S_104A);
plot(data2)
end
Форма волны, которую я хотел бы отобрать, является средней (желтой) на этом изображении:
и результат выглядит так: ![](https://i.imgur.com/1dwhgJvl.jpg)
Данные, очевидно, есть, но выборочные значения выше 255 возвращаются назад и искажают все.
Есть ли способ это исправить? Я знаю, что в случае скачков 2pi в измерениях фазы команда "развернуть" может помочь, но есть ли что-нибудь для амплитуды?
Кроме того, если у кого-нибудь есть какие-либо советы, как ускорить процесс сбора данных из области в MATLAB, я буду рад любым предложениям. В настоящее время для захвата одного «экрана» из прицела MATLAB требуется около 0,04 секунды, что остается неизменным до 3-4-кратного количества очков.
Я могу увеличить количество точек, в результате чего несколько «экранов» в одном захвате ускоряется, что ускоряет процесс (позднее разрезая каждый «экран» в отдельный вектор), но также усложняет обработку данных.