如何从Tektronix示波器中获取某个峰值的数据,然后用Python探测到某个数量的点

2024-04-26 23:41:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道如何使用Python从Tektronix示波器获取绘图和保存数据。我有一些峰值,然后它们衰减(周期性阻尼)。我想写一个代码来捕获一个峰值,并通过2000个点(阻尼结束,见图表)保存数据(因为我想得到阻尼系数)

我知道如何通过detect_peaks通过以下方法获得峰值:

ind = detect_peaks(Volts, mph:1.4, show=True)
print(ind)

当Iprint(ind)时,它会打印电压为峰值的时间,而不是电压。我有一个问题,因为如果我使用while循环,我可以从一个峰值到2000点之后计算时间,但我不知道如何以自动给我时间和电压的方式进行计算

enter image description here

总结如下:

我想得到一个峰值,得到所有的电压,直到阻尼振荡结束

这是我的密码:

import visa
import numpy as np
from struct import unpack
import pylab
from detecta import detect_peaks

#how to get the plot from Tektronix
# Establish Connection
rm = visa.ResourceManager('@py') # Calling PyVisaPy library
#scope = rm.open_resource('USB0::0x0699::0x0409::C010730::INSTR') # Connecting via USB
scope = rm.open_resource('USB0::1689::883::C011533::0::INSTR') # Connecting via LAN 
 
# Setting source as Channel 1
scope.write('DATA:SOU CH2') 
scope.write('DATA:WIDTH 1') 
scope.write('DATA:ENC RPB')

# Getting axis info
ymult = float(scope.query('WFMPRE:YMULT?')) # y-axis least count
yzero = float(scope.query('WFMPRE:YZERO?')) # y-axis zero error
yoff = float(scope.query('WFMPRE:YOFF?')) # y-axis offset
xincr = float(scope.query('WFMPRE:XINCR?')) # x-axis least count

# Reading Binary Data from instrument
scope.write('CURVE?')
data = scope.read_raw() # Reading binary data
headerlen = 2 + int(data[1]) # Finding header length
header = data[:headerlen] # Separating header 
ADC_wave = data[headerlen:-1] # Separating data

# Converting to Binary to ASCII
ADC_wave = np.array(unpack('%sB' % len(ADC_wave),ADC_wave))

Volts = (ADC_wave- yoff ) * ymult + yzero
Time = np.arange(0, xincr * len(Volts), xincr)

#getting  peaks
ind = detect_peaks(Volts, mph=1.4, show=True)
print(ind)

#attempt for taking 2000 piint after the first peak
a2=ind[0] #first peak 
i=ind[0]
while i<a2+20:
    print(i)
    i+=1


#Plotting Volt Vs. Time
pylab.plot(Time, Volts) 
pylab.show()


Tags: fromimportdatafloatwavewritescopedetect
1条回答
网友
1楼 · 发布于 2024-04-26 23:41:17

Volts是一个numpy数组。当您在Volts数组上调用detect_peaks时,它应该返回数据点(即索引,而不是我在注释中错误建议的时间值),然后您可以说:

ind = detect_peaks(Volts, mph:1.4, show=True)
voltage_damping_intervals = np.array([Volts[i:i+2000] for i in ind])

只需通过选择相应的峰值来选择要打印的间隔,例如:

print(voltage_damping_intervals[1])
# prints 2000 data points after the second peak

相关问题 更多 >