def set_capture_sequence(awg_sa_cmd, seq_0, seq_1): """ キャプチャシーケンスを AWG にセットする """ capture_0 = awgsa.AwgCapture( time = seq_0.get_wave(step_id = 0).get_duration() + 20, delay = 440, do_accumulation = False) capture_1 = awgsa.AwgCapture( time = seq_1.get_wave(step_id = 0).get_duration() + 20, delay = 440, do_accumulation = False) # キャプチャシーケンスの定義 capture_sequence_0 = (awgsa.CaptureSequence(ADC_FREQ, is_iq_data = False) .add_step(step_id = 0, capture = capture_0)) capture_sequence_1 = (awgsa.CaptureSequence(ADC_FREQ, is_iq_data = False) .add_step(step_id = 0, capture = capture_1)) # キャプチャシーケンスとキャプチャモジュールを対応付ける capture_config = (awgsa.CaptureConfig() .add_capture_sequence(awgsa.AwgId.AWG_0, capture_sequence_0) .add_capture_sequence(awgsa.AwgId.AWG_1, capture_sequence_1)) # キャプチャモジュールにキャプチャシーケンスを設定する awg_sa_cmd.set_capture_config(capture_config)
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ awg_id_to_wave_sequence = {} for awg_id in awg_list: # 波形の定義 wave_0 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=awg_to_freq[awg_id][0], phase=0, amplitude=30000, num_cycles=int(2.5 * awg_to_freq[awg_id][0])) #2.5us wave_1 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=awg_to_freq[awg_id][1], phase=0, amplitude=30000, num_cycles=int(2.5 * awg_to_freq[awg_id][1])) #2.5us # 波形シーケンスの定義 wave_sequence = (awgsa.WaveSequence(DAC_FREQ).add_step( step_id=0, wave=wave_0, post_blank=0).add_step(step_id=1, wave=wave_1, post_blank=0)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awg_id=awg_id, wave_sequence=wave_sequence, num_repeats=1000) awg_id_to_wave_sequence[awg_id] = wave_sequence return awg_id_to_wave_sequence
def set_capture_sequence(awg_sa_cmd, seq): """ キャプチャシーケンスを AWG にセットする """ # キャプチャ時間は, キャプチャする波形の長さ + 40 ns とする. # delay が波形ステップの開始から終了までの時間を超えないように注意. capture_0 = awgsa.AwgCapture(time=seq.get_wave(step_id=0).get_duration() + 40, delay=CAPTURE_DELAY, do_accumulation=True) capture_1 = awgsa.AwgCapture(time=seq.get_wave(step_id=1).get_duration() + 40, delay=CAPTURE_DELAY, do_accumulation=True) # キャプチャシーケンスの定義 capture_sequence_0 = (awgsa.CaptureSequence( ADC_FREQ, is_iq_data=False).add_step( step_id=0, capture=capture_0).add_step(step_id=1, capture=capture_1)) # キャプチャシーケンスとキャプチャモジュールを対応付ける capture_config = (awgsa.CaptureConfig().add_capture_sequence( awgsa.AwgId.AWG_0, capture_sequence_0)) # キャプチャモジュールにキャプチャシーケンスを設定する awg_sa_cmd.set_capture_config(capture_config)
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ awg_id_to_wave_sequence = {} wave_type_list = (awgsa.AwgWave.SINE, awgsa.AwgWave.SQUARE, awgsa.AwgWave.SAWTOOTH) amp_list = (30000, -30000, 30000) for awg_id in awg_list: wave_sequence = awgsa.WaveSequence(DAC_FREQ) for step_id in range(3): # 波形の定義 wave = awgsa.AwgWave(wave_type=wave_type_list[step_id], frequency=awg_to_freq[awg_id][step_id], phase=0, amplitude=amp_list[step_id], num_cycles=awg_to_cycles[awg_id][step_id], crest_pos=0.5) # 波形シーケンスの定義 wave_sequence.add_step(step_id, wave, post_blank=0) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awg_id=awg_id, wave_sequence=wave_sequence, num_repeats=1) awg_id_to_wave_sequence[awg_id] = wave_sequence return awg_id_to_wave_sequence
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ # 波形の定義 wave_0 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SAWTOOTH, frequency=7.2, phase=0, amplitude=30000, num_cycles=NUM_CYCLES) wave_1 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SAWTOOTH, frequency=11.0, phase=0, amplitude=30000, num_cycles=NUM_CYCLES) # 波形シーケンスの定義 wave_sequence_0 = (awgsa.WaveSequence(DAC_FREQ).add_step(step_id=0, wave=wave_0, post_blank=0)) wave_sequence_1 = (awgsa.WaveSequence(DAC_FREQ).add_step(step_id=0, wave=wave_1, post_blank=0)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awg_id=awg_list[0], wave_sequence=wave_sequence_0, num_repeats=1) awg_sa_cmd.set_wave_sequence(awg_id=awg_list[1], wave_sequence=wave_sequence_1, num_repeats=1) return {awg_list[0]: wave_sequence_0, awg_list[1]: wave_sequence_1}
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ awg_to_wave_sequence = {} for awg_id in awg_list: # 波形の定義 freq = awg_to_freq[awg_id] num_cycles_0 = awg_to_num_cycles[awg_id][0] num_cycles_1 = awg_to_num_cycles[awg_id][1] wave_0 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=freq, num_cycles=num_cycles_0) wave_1 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=freq, num_cycles=num_cycles_1) # 波形シーケンスの定義 # post_blank は, キャプチャの終了処理にかかるオーバーヘッドを考慮して設定する. wave_sequence = (awgsa.WaveSequence(DAC_FREQ).add_step( step_id=0, wave=wave_0, post_blank=POST_BLANK).add_step(step_id=1, wave=wave_1, post_blank=POST_BLANK)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awg_id=awg_id, wave_sequence=wave_sequence, num_repeats=10) awg_to_wave_sequence[awg_id] = wave_sequence return awg_to_wave_sequence
def set_capture_sequence(awg_sa_cmd, awg_to_wave_sequence): """ キャプチャシーケンスを AWG にセットする """ capture_config = awgsa.CaptureConfig() for awg_id, wave_sequence in awg_to_wave_sequence.items(): capture_0 = awgsa.AwgCapture( time=wave_sequence.get_wave(step_id=0).get_duration(), delay=0, do_accumulation=do_accumulation) capture_1 = awgsa.AwgCapture( time=wave_sequence.get_wave(step_id=1).get_duration(), delay=0, do_accumulation=do_accumulation) # キャプチャシーケンスの定義 tile = awg_sa_cmd.get_adc_tile_id_by_awg_id(awg_id) sampling_rate = tile_to_sampling_rate[tile] capture_sequence = (awgsa.CaptureSequence(sampling_rate).add_step( step_id=0, capture=capture_0).add_step(step_id=1, capture=capture_1)) # キャプチャシーケンスとキャプチャモジュールを対応付ける capture_config.add_capture_sequence(awg_id, capture_sequence) # キャプチャモジュールにキャプチャシーケンスを設定する awg_sa_cmd.set_capture_config(capture_config)
def set_capture_sequence(awg_sa_cmd, awg_id_to_wave_sequence): """ キャプチャシーケンスを AWG にセットする """ capture_config = awgsa.CaptureConfig() for awg_id, wave_sequence in awg_id_to_wave_sequence.items(): # キャプチャ時間は, キャプチャする波形の長さ + 35 ns とする. # delay が波形ステップの開始から終了までの時間を超えないように注意. capture_0 = awgsa.AwgCapture( time=wave_sequence.get_wave(step_id=0).get_duration() + 35, delay=345, do_accumulation=True) capture_1 = awgsa.AwgCapture( time=wave_sequence.get_wave(step_id=1).get_duration() + 35, delay=345, do_accumulation=True) # キャプチャシーケンスの定義 capture_sequence = (awgsa.CaptureSequence(ADC_FREQ).add_step( step_id=0, capture=capture_0).add_step(step_id=1, capture=capture_1)) # キャプチャシーケンスとキャプチャモジュールを対応付ける capture_config.add_capture_sequence(awg_id, capture_sequence) # キャプチャモジュールにキャプチャシーケンスを設定する awg_sa_cmd.set_capture_config(capture_config)
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ awg_id_to_wave_sequence = {} for awg_id in awg_list: # 波形の定義 wave_0 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=awg_to_freq[awg_id], phase=0, amplitude=30000, num_cycles=awg_to_cycles[awg_id]) wave_1 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SAWTOOTH, frequency=awg_to_freq[awg_id], phase=0, amplitude=30000, num_cycles=awg_to_cycles[awg_id], crest_pos=1.0) # 波形シーケンスの定義 # 波形ステップの開始から終了までの期間は, キャプチャの終了処理にかかるオーバーヘッドを考慮し, 波形出力期間 + 2000 ns を設定する. wave_sequence = (awgsa.WaveSequence(DAC_FREQ).add_step( step_id=0, wave=wave_0, post_blank=2000).add_step(step_id=1, wave=wave_1, post_blank=2000)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awg_id=awg_id, wave_sequence=wave_sequence, num_repeats=1000) awg_id_to_wave_sequence[awg_id] = wave_sequence return awg_id_to_wave_sequence
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ awg_id_to_wave_sequence = {} for awg_id, freq in awg_to_freq.items(): wave_sequence = awgsa.WaveSequence(DAC_FREQ) for step_id, cycles in enumerate(awg_to_cycles[awg_id]): # 波形の定義 if (awg_to_trigger_mode[awg_id] == awgsa.TriggerMode.MANUAL): wave = awgsa.AwgWave( wave_type=awgsa.AwgWave.SQUARE, # トリガ波形は矩形波 frequency=freq, phase=0.0, amplitude=30000, duty_cycle=100.0, num_cycles=cycles) else: wave = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=freq, phase=0, amplitude=30000, num_cycles=cycles) # 波形シーケンスの定義 wave_sequence.add_step(step_id, wave, post_blank=185) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awg_id, wave_sequence, num_repeats=1) awg_id_to_wave_sequence[awg_id] = wave_sequence return awg_id_to_wave_sequence
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ awg_id_to_wave_sequence = {} for awg_id in awg_list: # 波形の定義 num_cycles = int(6.0 * awg_to_freq[awg_id]) # 6.0[us] i_wave = awgsa.AwgWave( wave_type = awgsa.AwgWave.SINE, frequency = awg_to_freq[awg_id], phase = 90, # cos amplitude = 15000, num_cycles = num_cycles) q_wave = awgsa.AwgWave( wave_type = awgsa.AwgWave.SINE, frequency = awg_to_freq[awg_id], phase = 0, amplitude = 15000, num_cycles = num_cycles) iq_wave = awgsa.AwgIQWave(i_wave, q_wave) # 波形シーケンスの定義 # 波形ステップの開始から終了までの期間は, キャプチャの終了処理にかかるオーバーヘッドを考慮し, 波形出力期間 + 2000 ns を設定する. wave_sequence = (awgsa.WaveSequence(DAC_FREQ, is_iq_data = True) .add_step(step_id = 0, wave = iq_wave, post_blank = 2000)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awg_id = awg_id, wave_sequence = wave_sequence, num_repeats = 1) awg_id_to_wave_sequence[awg_id] = wave_sequence return awg_id_to_wave_sequence
def set_wave_sequence(awg_sa_cmd, cycle_multiplier): """ 波形シーケンスを AWG にセットする """ # 波形の定義 wave_0 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=10.0, phase=0, amplitude=30000, num_cycles=4 * cycle_multiplier) wave_1 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SAWTOOTH, frequency=10.0, phase=0, amplitude=30000, num_cycles=3 * cycle_multiplier, crest_pos=1.0) # 波形シーケンスの定義 # 波形ステップの開始から終了までの期間は, キャプチャの終了処理にかかるオーバーヘッドを考慮し, 波形出力期間 + 2000 ns を設定する. wave_sequence_0 = (awgsa.WaveSequence(DAC_FREQ).add_step( step_id=0, wave=wave_0, post_blank=2000).add_step(step_id=1, wave=wave_1, post_blank=2000)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_0, wave_sequence_0, num_repeats=1000) return wave_sequence_0
def calibrate_adc(awg_sa_cmd): """ ADC をキャリブレーションする """ calib_wave = awgsa.AwgWave( wave_type = awgsa.AwgWave.SINE, frequency = 10.0, phase = 0, amplitude = 30000, num_cycles = 100000) calib_wave_sequence = (awgsa.WaveSequence(DAC_FREQ) .add_step(step_id = 0, wave = calib_wave, post_blank = 0)) awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_0, calib_wave_sequence, num_repeats = 1) awg_sa_cmd.start_wave_sequence() wait_for_sequence_to_finish(awg_sa_cmd)
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ # 波形の定義 wave_0 = awgsa.AwgWave(wave_type=awgsa.AwgWave.GAUSSIAN, frequency=1.0, phase=0, amplitude=30000, num_cycles=2, variance=0.2, domain_begin=-1.5, domain_end=1.5) wave_1 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=1.0, phase=0, amplitude=30000, num_cycles=4) wave_2 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SAWTOOTH, frequency=1.0, phase=0, amplitude=30000, num_cycles=8, crest_pos=1.0) # 波形シーケンスの定義 # 波形ステップの開始から終了までの期間は, キャプチャの終了処理にかかるオーバーヘッドを考慮し, 波形出力期間 + POST_BLANK を設定する. wave_sequence_0 = (awgsa.WaveSequence(DAC_FREQ).add_step( step_id=0, wave=wave_0, post_blank=POST_BLANK).add_step(step_id=1, wave=wave_1, post_blank=POST_BLANK)) wave_sequence_1 = (awgsa.WaveSequence(DAC_FREQ).add_step( step_id=0, wave=wave_2, post_blank=POST_BLANK)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_0, wave_sequence_0, num_repeats=1) awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_1, wave_sequence_1, num_repeats=1) return (wave_sequence_0, wave_sequence_1)
def calibrate_adc(awg_sa_cmd): """ ADC をキャリブレーションする """ # AWG に波形シーケンスをセットする for awg_id in awg_list: calib_wave = awgsa.AwgWave( wave_type = awgsa.AwgWave.SINE, frequency = awg_to_freq[awg_id], phase = 0, amplitude = 30000, num_cycles = int(awg_to_freq[awg_id] * 1e4)) #10ms calib_wave_sequence = (awgsa.WaveSequence(DAC_FREQ) .add_step(step_id = 0, wave = calib_wave, post_blank = 0)) awg_sa_cmd.set_wave_sequence(awg_id, calib_wave_sequence, num_repeats = 1) awg_sa_cmd.start_wave_sequence() wait_for_sequence_to_finish(awg_sa_cmd, awg_list)
def calibrate_adc(awg_sa_cmd): """ ADC をキャリブレーションする """ # AWG に波形シーケンスをセットする for awg_id in awg_list: calib_wave = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=10, phase=0, amplitude=30000, num_cycles=int(1e5)) #10ms calib_wave_sequence = (awgsa.WaveSequence(DAC_FREQ).add_step( step_id=0, wave=calib_wave, post_blank=0)) awg_sa_cmd.set_wave_sequence(awg_id, calib_wave_sequence, num_repeats=1) awg_sa_cmd.start_wave_sequence() all_sequences_are_complete(awg_sa_cmd, *awg_list)
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ # 波形の定義 wave_0 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=80.0, phase=0, amplitude=-30000, num_cycles=2200) # 波形シーケンスの作成 wave_sequence_0 = (awgsa.WaveSequence(DAC_FREQ).add_step(step_id=0, wave=wave_0, post_blank=2000)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_0, wave_sequence_0) return wave_sequence_0
def set_capture_sequence(awg_sa_cmd, awg_id_to_wave_sequence): """ キャプチャシーケンスをキャプチャモジュールにセットする """ capture_config = awgsa.CaptureConfig() for awg_id, wave_sequence in awg_id_to_wave_sequence.items(): capture_sequence = awgsa.CaptureSequence(ADC_FREQ) for step_id in wave_sequence.get_step_id_list(): # delay が波形ステップの開始から終了までの時間を超えないように注意. capture = awgsa.AwgCapture( time=wave_sequence.get_wave(step_id).get_duration() + 35, delay=CAPTURE_DELAY, do_accumulation=False) # キャプチャシーケンスへのキャプチャステップの追加 capture_sequence.add_step(step_id, capture) # キャプチャシーケンスとキャプチャモジュールを対応付ける capture_config.add_capture_sequence(awg_id, capture_sequence) # キャプチャモジュールにキャプチャシーケンスを設定する awg_sa_cmd.set_capture_config(capture_config)
def set_digital_output_sequence(awg_sa_cmd): dout_0 = (awgsa.DigitalOutputVector().append_data(0xA9, 1000).append_data( 0x76, 1500).append_data(0xBF, 1500).append_data(0x00, 1)) dout_1 = (awgsa.DigitalOutputVector(delay=1000.0).append_data( 0x5E, 2000).append_data(0x43, 1000).append_data(0x21, 3000).append_data( 0xD6, 1000).append_data(0x00, 1)) dout_sequence_0 = (awgsa.DigitalOutputSequence().add_step(step_id=1, dout_vec=dout_0)) dout_sequence_1 = (awgsa.DigitalOutputSequence().add_step(step_id=0, dout_vec=dout_1)) # HW にデジタル出力シーケンスをセットする awg_sa_cmd.set_digital_output_sequence(awg_id=awgsa.AwgId.AWG_0, dout_sequence=dout_sequence_0) awg_sa_cmd.set_digital_output_sequence(awgsa.AwgId.AWG_1, dout_sequence_1)
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ # 波形の定義 samples = create_wave() wave_0 = awgsa.AwgAnyWave(samples=samples, num_cycles=4) (i_samples, q_samples) = create_iq_wave() i_wave = awgsa.AwgAnyWave(samples=i_samples, num_cycles=360) q_wave = awgsa.AwgAnyWave(samples=q_samples, num_cycles=360) wave_1 = awgsa.AwgIQWave(i_wave, q_wave) # 波形シーケンスの定義 # 波形ステップの開始から終了までの期間は, キャプチャの終了処理にかかるオーバーヘッドを考慮し, 波形出力期間 + 2000 ns を設定する. wave_sequence_0 = (awgsa.WaveSequence(DAC_FREQ, is_iq_data=False).add_step( step_id=0, wave=wave_0, post_blank=2000)) wave_sequence_1 = (awgsa.WaveSequence(DAC_FREQ, is_iq_data=True).add_step( step_id=0, wave=wave_1, post_blank=2000)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_0, wave_sequence_0, num_repeats=1) awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_1, wave_sequence_1, num_repeats=1) return (wave_sequence_0, wave_sequence_1)
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ # 波形の定義 i_wave_0 = awgsa.AwgWave( wave_type = awgsa.AwgWave.SINE, frequency = 120.0, phase = 0, amplitude = 15000, num_cycles = 2500) q_wave_0 = awgsa.AwgWave( wave_type = awgsa.AwgWave.SQUARE, frequency = 120.0, phase = 0, amplitude = 15000, duty_cycle = 100.0, num_cycles = 2500) iq_wave_0 = awgsa.AwgIQWave(i_wave_0, q_wave_0) i_wave_1 = awgsa.AwgWave( wave_type = awgsa.AwgWave.SINE, frequency = 50.0, phase = 90.0, # cos amplitude = 15000, duty_cycle = 100.0, num_cycles = 2500) q_wave_1 = awgsa.AwgWave( wave_type = awgsa.AwgWave.SINE, frequency = 50.0, phase = 0, amplitude = 15000, num_cycles = 2500) iq_wave_1 = awgsa.AwgIQWave(i_wave_1, q_wave_1) # 波形シーケンスの作成 wave_sequence_0 = (awgsa.WaveSequence(DAC_FREQ, is_iq_data = True) .add_step(step_id = 0, wave = iq_wave_0, post_blank = 2000)) wave_sequence_1 = (awgsa.WaveSequence(DAC_FREQ, is_iq_data = True) .add_step(step_id = 0, wave = iq_wave_1, post_blank = 2000)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_0, wave_sequence_0) awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_1, wave_sequence_1) return (wave_sequence_0, wave_sequence_1)
def set_capture_sequence(awg_sa_cmd, awg_id_to_wave_sequence): """ キャプチャシーケンスを AWG にセットする """ capture_config = awgsa.CaptureConfig() for awg_id, wave_sequence in awg_id_to_wave_sequence.items(): # delay が波形ステップの開始から終了までの時間を超えないように注意. capture_0 = awgsa.AwgCapture(time=wave_sequence.get_whole_duration() + 1000, delay=CAPTURE_DELAY, do_accumulation=False) # キャプチャシーケンスの定義 capture_sequence = (awgsa.CaptureSequence(ADC_FREQ).add_step( step_id=0, capture=capture_0)) # キャプチャシーケンスとキャプチャモジュールを対応付ける capture_config.add_capture_sequence(awg_id, capture_sequence) # キャプチャモジュールにキャプチャシーケンスを設定する awg_sa_cmd.set_capture_config(capture_config)
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ # 波形の定義 wave_0 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=10, phase=0, amplitude=30000, num_cycles=INFINITE) wave_1 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SQUARE, frequency=10, phase=0, amplitude=30000, num_cycles=3) wave_2 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SAWTOOTH, frequency=10, phase=0, amplitude=30000, num_cycles=4) # 波形シーケンスの定義 wave_sequence_0 = (awgsa.WaveSequence(DAC_FREQ).add_step(step_id=0, wave=wave_0, post_blank=0)) wave_sequence_1 = (awgsa.WaveSequence(DAC_FREQ).add_step( step_id=0, wave=wave_1, post_blank=0).add_step(step_id=1, wave=wave_2, post_blank=POST_BLANK)) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awg_id=awg_list[0], wave_sequence=wave_sequence_0, num_repeats=1) awg_sa_cmd.set_wave_sequence(awg_id=awg_list[1], wave_sequence=wave_sequence_1, num_repeats=INFINITE) return {awg_list[0]: wave_sequence_0, awg_list[1]: wave_sequence_1}
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ awg_id_to_wave_sequence = {} for awg_id, freq in awg_to_freq.items(): wave_sequence = awgsa.WaveSequence(DAC_FREQ) for step_id, cycles in enumerate(awg_to_cycles[awg_id]): # 波形の定義 wave = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=freq, phase=0, amplitude=30000, num_cycles=cycles) # 波形シーケンスの定義 wave_sequence.add_step(step_id, wave, post_blank=200) # AWG に波形シーケンスをセットする awg_sa_cmd.set_wave_sequence(awg_id, wave_sequence, num_repeats=1) awg_id_to_wave_sequence[awg_id] = wave_sequence return awg_id_to_wave_sequence
def set_capture_sequence(awg_sa_cmd, awg_id_to_wave_sequence): """ キャプチャシーケンスを AWG にセットする """ capture_config = awgsa.CaptureConfig() for awg_id, wave_sequence in awg_id_to_wave_sequence.items(): # DAC から出力する波形の NUM_CYCLES_IN_WINDOW サイクル分の期間をキャプチャ時間とする num_dac_wave_samples = int(DAC_FREQ / wave_sequence.get_wave(0).get_frequency()) capture = awgsa.AwgWindowedCapture(time=1000 * NUM_CYCLES_IN_WINDOW * num_dac_wave_samples / ADC_FREQ, num_windows=NUM_WINDOWS, delay=CAPTURE_DELAY) # キャプチャシーケンスの定義 capture_sequence = (awgsa.CaptureSequence(ADC_FREQ).add_step( step_id=0, capture=capture)) # キャプチャシーケンスとキャプチャモジュールを対応付ける capture_config.add_capture_sequence(awg_id, capture_sequence) # キャプチャモジュールにキャプチャシーケンスを設定する awg_sa_cmd.set_capture_config(capture_config)
def set_capture_sequence(awg_sa_cmd, awg_id_to_wave_sequence): """ キャプチャシーケンスを AWG にセットする """ capture_0 = awgsa.AwgCapture(time=500, delay=CAPTURE_DELAY, do_accumulation=False) capture_1 = awgsa.AwgCapture( time=awg_id_to_wave_sequence[awg_list[1]].get_whole_duration() - POST_BLANK + 100, delay=CAPTURE_DELAY, do_accumulation=False) # キャプチャシーケンスの定義 capture_sequence_0 = awgsa.CaptureSequence(ADC_FREQ).add_step( step_id=0, capture=capture_0) capture_sequence_1 = awgsa.CaptureSequence(ADC_FREQ).add_step( step_id=0, capture=capture_1) # キャプチャシーケンスとキャプチャモジュールを対応付ける capture_config = awgsa.CaptureConfig() capture_config.add_capture_sequence(awg_list[0], capture_sequence_0) capture_config.add_capture_sequence(awg_list[1], capture_sequence_1) # キャプチャモジュールにキャプチャシーケンスを設定する awg_sa_cmd.set_capture_config(capture_config)
def set_capture_sequence(awg_sa_cmd, seq_0, seq_1): """ キャプチャシーケンスを AWG にセットする """ # キャプチャ時間は, キャプチャする波形の長さ + 20 ns とする. # delay が波形ステップの開始から終了までの時間を超えないように注意. capture_0 = awgsa.AwgCapture( time=seq_0.get_wave(step_id=0).get_duration() + 20, delay=CAPTURE_DELAY, do_accumulation=False) capture_1 = awgsa.AwgCapture( time=seq_0.get_wave(step_id=1).get_duration() + 20, delay=CAPTURE_DELAY, do_accumulation=False) # 波形シーケンス 1 全体をキャプチャするため, キャプチャ時間は, # シーケンス 1 全体の長さ - 余分にとった時間 (POST_BLANK) + 20 ns とする. capture_2 = awgsa.AwgCapture(time=seq_1.get_whole_duration() - POST_BLANK + 20, delay=CAPTURE_DELAY, do_accumulation=False) # キャプチャシーケンスの定義 capture_sequence_0 = (awgsa.CaptureSequence( ADC_FREQ, is_iq_data=False).add_step( step_id=0, capture=capture_0).add_step(step_id=1, capture=capture_1)) capture_sequence_1 = (awgsa.CaptureSequence( ADC_FREQ, is_iq_data=False).add_step(step_id=0, capture=capture_2)) # キャプチャシーケンスとキャプチャモジュールを対応付ける capture_config = (awgsa.CaptureConfig().add_capture_sequence( awgsa.AwgId.AWG_0, capture_sequence_0).add_capture_sequence(awgsa.AwgId.AWG_1, capture_sequence_1)) # キャプチャモジュールにキャプチャシーケンスを設定する awg_sa_cmd.set_capture_config(capture_config)
def set_wave_sequence(awg_sa_cmd): """ 波形シーケンスを AWG にセットする """ wave_0 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SINE, frequency=10.0, phase=0, amplitude=20000, num_cycles=3) wave_1 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SAWTOOTH, frequency=15.0, phase=0.0, amplitude=10000, offset=0, crest_pos=0.5, num_cycles=3) wave_2 = awgsa.AwgWave(wave_type=awgsa.AwgWave.SQUARE, frequency=10.0, phase=0.0, amplitude=10000, offset=0, duty_cycle=50.0, num_cycles=3) wave_3 = awgsa.AwgWave(wave_type=awgsa.AwgWave.GAUSSIAN, frequency=10.0, phase=0.0, amplitude=8000, offset=0, domain_begin=-4.0, domain_end=4.0, variance=0.2, num_cycles=2) wave_4 = awgsa.AwgIQWave(wave_0, wave_1) wave_5 = awgsa.AwgIQWave(wave_1, wave_2) wave_6 = awgsa.AwgIQWave(wave_2, wave_0) wave_sequence_0 = (awgsa.WaveSequence(DAC_FREQ).add_step( step_id=0, wave=wave_0, post_blank=2000).add_step( step_id=1, wave=wave_1, post_blank=1500).add_step(step_id=2, wave=wave_2, post_blank=0).add_step(step_id=3, wave=wave_3, post_blank=3000)) wave_sequence_1 = (awgsa.WaveSequence(DAC_FREQ, is_iq_data=True).add_step( step_id=0, wave=wave_4, post_blank=1000).add_step(step_id=1, wave=wave_5, post_blank=2000).add_step(step_id=2, wave=wave_6, post_blank=1500)) awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_0, wave_sequence_0, num_repeats=1) awg_sa_cmd.set_wave_sequence(awgsa.AwgId.AWG_1, wave_sequence_1, num_repeats=1) return (wave_sequence_0, wave_sequence_1)