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()