我从示波器获取数据时遇到问题。使用WORD格式时,MATLAB捕获的值超过BYTE格式的255个值和无符号16位整数的65,535个值,并将这些值从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
我要采样的波形是此图像上的中间一个(黄色): 结果如下:
数据显然在那里,但是高于255的采样值会回送并使所有内容失真。 有没有什么办法解决这一问题?我知道对于相位测量中2pi跳变的情况,“展开”命令可以提供帮助,但是振幅有什么用吗?
此外,如果有人对如何加快从示波器到MATLAB的数据采集过程有任何建议,我也欢迎提出任何建议。目前,要从示波器上捕获一个“屏幕”,MATLAB需要大约0.04秒的时间,最多保持3-4倍的点数不变。 我可以增加一个采集中放置多个“范围屏幕”的点数,从而加快处理速度(通过稍后将每个“屏幕”切成不同的向量),但是这也使数据处理更加困难。>
答案 0 :(得分:0)
您应明确给出所需的格式。例如data_read = binblockread(DSO_S_104A,'int16');
否则,Matlab可能会以奇怪的方式解释和转换字节流。
另一种解决方案是手动转换从仪器读取的数据:
// read and cast to uint8, as Matlab tends to cast everything to double
data2 = uint8(binblockread(DSO_S_104A));
// now you have an uint8 array with values in the 0-255 range
// typecast (i.e. re-interpret the binary representation of your numbers as another data type, here 'int16')
data_test = typecast(data2(:),'int16'); // or 'int32', or 'float', or 'int8', or...
// try to swap bytes, in case the data from the instrument does not have the same endianness as the computer
data_test_reverse_endianness = swapbytes(data_test);
// plot and see if it makes sense
plot([data_test,data_test_reverse_endianness]);
尝试使用多种格式,无论是否使用swapbytes
,然后查看哪种格式有效。
答案 1 :(得分:0)
万一有人遇到类似的问题,这就是我的解决方法: 最后,问题是示波器上的失调电压加上v / div设置。由于某些原因,零偏移是一个主要问题。我提高了失调电压(基本上是在示波器上提高了波形),直到我开始捕获正确的波形,并在volt / div设置上发挥了一点作用(程度较小)。奇怪的问题。