Python スペクトラム アナライザの「最大ホールド」機能
Python での「Max Hold」の実装
- Moku:Lab
- Moku:Go
-
Moku:Pro
Moku:Proに関するよくある質問 Moku:Pro波形発生器 Moku:Proタイム&周波数アナライザ Moku:Proロジックアナライザ/パターンジェネレーター Moku:Proレレーザーロックボックス Moku:Proロックインアンプ Moku:Proスペクトラムアナライザ Moku:Proデータロガー Moku:Pro任意波形発生器 Moku:Proマルチ機器モード Moku:Pro位相計 Moku:Pro FIRフィルタービルダー Moku:Pro PIDコントローラー Moku:Proオシロスコープ Moku:Pro周波数応答アナライザ Moku:Proデジタルフィルターボックス
- Python API
- MATLAB API
- 任意波形発生器
- データロガー
- デジタルフィルターボックス
- FIR フィルタ ビルダー
- 周波数応答アナライザー
- レーザーロックボックス
- ロックインアンプ
- オシロスコープ
- 位相計
- PIDコントローラー
- スペクトラムアナライザー
- 時間と周波数アナライザー
- 波形発生器
- ロジックアナライザ/パターンジェネレーター
- マルチ機器モード
- Mokuクラウドコンパイル
- Mokuに関するよくある質問
- LabVIEW API
Mokuのスペクトラム アナライザーで Python で「Max Hold」を作成するにはどうすればよいでしょうか
Mokuのスペクトル アナライザーには、iPad アプリと Windows アプリの両方に数学チャンネルが含まれています。この数学チャンネルには便利な「最大値保持」機能があります。
添付の Python スクリプトは、スペクトラム アナライザー機器を展開し、周波数をスイープしてこのデータを Python にキャプチャします。次に、Python 内で「最大ホールド」トレースを計算して表示します。
#
# Moku example: Plotting Spectrum Analyzer - Max Hold
#
# This example demonstrates how you can configure the Spectrum Analyzer
# instrument and plot ad Max Hold of its spectrum data in real-time.
#
# (c) 2023 Liquid Pty. Ltd.
#
from moku.instruments import SpectrumAnalyzer
import matplotlib.pyplot as plt
# Launch Spectrum Analyzer and connect to your device via IP
i = SpectrumAnalyzer('192.168.###.###', force_connect=True)
try:
# Set spectrum analyzer configuration
i.set_defaults()
i.set_span(70e6, 130e6)
i.set_rbw('Auto') # Auto-mode
# Configure ADC inputs
i.set_frontend(1, "50Ohm", "AC", "400mVpp")
i.set_frontend(2, "50Ohm", "AC", "400mVpp")
# Set up basic plot configurations
line1, = plt.plot([])
line2, = plt.plot([])
plt.ion()
plt.show()
plt.grid()
plt.ylim([-200, 100])
plt.autoscale(axis='x', tight=True)
# Get an initial frame of data to set any frame-specific plot parameters
frame = i.get_data()
# Format the x-axis as a frequency scale
ax = plt.gca()
counter = 0
# Get and update the plot with new data
while True:
frame = i.get_data()
plt.pause(0.0001)
fc1 = frame['ch1']
spectrum_length = len(fc1)
# Set the frame data for each channel plot
line1.set_ydata(fc1)
if counter == 0:
current_max = fc1
else:
for x in range(0,spectrum_length):
if fc1[x]>current_max[x]:
current_max[x] = fc1[x]
line2.set_ydata(current_max)
# Frequency axis shouldn't change, but to be sure
line1.set_xdata(frame['frequency'])
line2.set_xdata(frame['frequency'])
# Ensure the frequency axis is a tight fit
ax.relim()
ax.autoscale_view()
# Redraw the lines
plt.draw()
counter = counter + 1
except Exception as e:
print(f'Exception occurred: {e}')
finally:
# Close the connection to the Moku device
# This ensures network resources are released correctly
i.relinquish_ownership()