首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从示波器读取到MATLAB和整数/字节值限制

从示波器读取到MATLAB和整数/字节值限制
EN

Stack Overflow用户
提问于 2018-11-15 20:30:35
回答 2查看 233关注 0票数 0

我在从示波器获取数据时遇到了问题。当使用WORD格式时,MATLAB捕获超过字节格式的255和无符号16位整数的65,535的值,并从0循环这些值,从而导致非常扭曲的波形。我使用以下代码,并使用binblockread读取数据:

代码语言:javascript
复制
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跳跃的情况,"unwrap“命令可以提供帮助,但是对于振幅有什么帮助吗?

此外,如果任何人有任何建议,如何加快从范围到MATLAB的数据采集过程,我欢迎任何建议。目前,从示波器中捕获一个“屏幕”需要MATLAB大约0.04秒,这一时间保持不变,最多可达到点数的3-4倍。我可以增加在一次采集中放置多个“范围屏幕”的点数,从而加快处理过程(通过稍后将每个“屏幕”切割成不同的向量),但这也会使数据处理变得更加困难。

EN

回答 2

Stack Overflow用户

发布于 2018-11-15 21:38:28

您应该明确地给出预期的格式。例如data_read = binblockread(DSO_S_104A,'int16');

否则,Matlab可能会以奇怪的方式解释和转换字节流。

另一种解决方案是手动转换从仪器读取的数据:

代码语言:javascript
复制
// 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,看看哪一种有效。

票数 0
EN

Stack Overflow用户

发布于 2018-11-21 18:25:47

如果有人遇到类似的问题,这里是我如何解决的:最后,这个问题是示波器上的偏移电压加上v/div设置。由于某些原因,归零偏移量是一个主要问题。我提高了偏置电压(这基本上提高了示波器上的波形),直到我开始捕获正确的波形,并播放了一点伏特/div设置(程度较小)。奇怪的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53319570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档