Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Trabajando con Hello Pulse
En esta sección, aprenderá a caracterizar y construir una única puerta cúbit directamente utilizando el pulso de un Rigetti dispositivo. Al aplicar un campo electromagnético a un cúbit, se produce una oscilación de Rabi, que cambia los cúbits entre su estado 0 y 1. Con la longitud y la fase del pulso calibradas, la oscilación de Rabi puede calcular las compuertas de un solo qubit. Aquí, determinaremos la longitud de pulso óptima para medir un pulso de pi/2, un bloque elemental que se utiliza para construir secuencias de pulsos más complejas.
En primer lugar, para crear una secuencia de pulsos, importe la PulseSequence
clase.
from braket.aws import AwsDevice from braket.circuits import FreeParameter from braket.devices import Devices from braket.pulse import PulseSequence, GaussianWaveform import numpy as np
A continuación, cree una instancia de un nuevo dispositivo Braket utilizando el (Amazon Resource NameARN) de la QPU. El siguiente bloque de código usa. Rigetti Ankaa-3
device = AwsDevice(Devices.Rigetti.Ankaa3)
La siguiente secuencia de pulsos incluye dos componentes: reproducir una forma de onda y medir un qubit. La secuencia de pulsos normalmente se puede aplicar a fotogramas. Con algunas excepciones, como la barrera y el retardo, que se pueden aplicar a los qubits. Antes de construir la secuencia de pulsos, debe recuperar los fotogramas disponibles. El marco de accionamiento se utiliza para aplicar el pulso a la oscilación de Rabi y el marco de lectura sirve para medir el estado del cúbit. En este ejemplo, se utilizan los fotogramas del qubit 25. Para obtener más información sobre las tramas, consulte Funciones de las tramas y los puertos.
drive_frame = device.frames["Transmon_25_charge_tx"] readout_frame = device.frames["Transmon_25_readout_rx"]
Ahora, cree la forma de onda que se reproducirá en el marco de la unidad. El objetivo es caracterizar el comportamiento de los cúbits para diferentes longitudes de pulso. Reproducirás una forma de onda con diferentes longitudes cada vez. En lugar de crear una nueva forma de onda cada vez, utilice la secuencia de pulsos compatible con FreeParameter
Braket. Puede crear la forma de onda y la secuencia de pulsos una vez con parámetros libres y, a continuación, ejecutar la misma secuencia de pulsos con valores de entrada diferentes.
waveform = GaussianWaveform(FreeParameter("length"), FreeParameter("length") * 0.25, 0.2, False)
Por último, póngalos juntos como una secuencia de pulsos. En la secuencia de pulsos, play
reproduce la forma de onda especificada en el marco de transmisión y, a continuación, capture_v0
mide el estado desde el marco de lectura.
pulse_sequence = ( PulseSequence() .play(drive_frame, waveform) .capture_v0(readout_frame) )
Escanea un rango de longitud de pulso y envíalo a la QPU.
start_length = 12e-9 end_length = 2e-7 lengths = np.arange(start_length, end_length, 12e-9) N_shots = 100 tasks = [ device.run(pulse_sequence(length=length), shots=N_shots) for length in lengths ] probability_of_zero = [ task.result().measurement_counts['0']/N_shots for task in tasks ]
Las estadísticas de la medición del cúbit muestran la dinámica oscilatoria del cúbit que oscila entre el estado 0 y el estado 1. A partir de los datos de medición, puede extraer la frecuencia de Rabi y ajustar con precisión la longitud del pulso para implementar una puerta de 1 qubit concreta. Por ejemplo, según los datos de la figura siguiente, la periodicidad es de aproximadamente 154 ns. Por lo tanto, una puerta de rotación pi/2 correspondería a la secuencia de pulsos con una longitud de 38,5 ns.

Hello Pulse usando OpenPulse
OpenPulse
Braket se utiliza OpenPulse como representación intermedia subyacente para expresar los pulsos en instrucciones nativas. OpenPulseadmite la adición de calibraciones de instrucciones en forma de declaraciones defcal
(abreviatura de «definir calibración»). Con estas declaraciones, puede especificar la implementación de una instrucción de puerta dentro de una gramática de control de nivel inferior.
Puede ver el OpenPulse programa de un Braket PulseSequence
mediante el siguiente comando.
print(pulse_sequence.to_ir())
También puede crear un OpenPulse programa directamente.
from braket.ir.openqasm import Program openpulse_script = """ OPENQASM 3.0; cal { bit[1] psb; waveform my_waveform = gaussian(12.0ns, 3.0ns, 0.2, false); play(Transmon_25_charge_tx, my_waveform); psb[0] = capture_v0(Transmon_25_readout_rx); } """
Crea un Program
objeto con tu script. A continuación, envíe el programa a una QPU.
from braket.aws import AwsDevice from braket.devices import Devices from braket.ir.openqasm import Program program = Program(source=openpulse_script) device = AwsDevice(Devices.Rigetti.Ankaa3) task = device.run(program, shots=100)