Transformada de Fourier cuántica
La transformada de Fourier cuántica (QFT) es una solución cuántica similar a su variante clásica (transformada de Fourier discreta o DFT), que es utilizada en distintos algoritmos cuánticos.
Por ejemplo, el algoritmo de Shor y la estimación de fases utilizan esta primitiva.
Objetivo
Sección titulada «Objetivo»La primitiva QFT permite obtener información acerca de las frecuencias de repetición de las fases relativas en un estado cuántico. También existe su operación inversa, que permite convertir una frecuencia en diferencias de fases relativas de un estado cuántico.
Ciertas bibliografías expresan este objetivo en transformar la base computacional a base de Fourier:
- La base computacional es la base Z.
- La base de Fourier es otra forma de expresar números pero mediante el comportamiento del eje en un estado cuántico (fase relativa).
Solución
Sección titulada «Solución»La transformación de QFT es expresada en la literatura en forma de matriz de la siguiente manera (es igual a DFT pero con el ángulo opuesto):
Donde
Es posible definir un circuito de QFT utilizando puertas Hadamard, puertas de fase controladas , y puertas Swap.
La puerta es una abreviación de RotZ y se define de la siguiente manera:
Con esto en consideración, el algoritmo sigue una estructura fácilmente generalizable, donde es la cantidad de cubits presentes.

Figura (1): Estructura de la primitiva QFT de forma general (Wong).
En este caso se utiliza para representar los cubits de entrada que conforman el estado cuántico :
Por otra parte, se utiliza para denotar fracciones usando binarios, cuyo valor en decimal es el siguiente:
Finalmente definimos QFT en notación bra-ket como:
Se encuentran puertas Hadamard y puertas de rotación, por lo que el orden del algoritmo es , ya que .
Por otra parte, como el algoritmo de QFT es conformado por puertas unitarias. Para implementar la inversa de QFT (invQFT) basta con aplicar las operaciones conjugadas transpuestas en el orden inverso.
from qiskit import QuantumCircuit, transpilefrom qiskit_aer import QasmSimulatorimport math
QUBIT_COUNT = 3QUBITS = range(QUBIT_COUNT)
def run_circuit(qc: QuantumCircuit): sim = QasmSimulator() transpiled = transpile(qc) result = sim.run(transpiled).result() return result
def analyze_qft_results(results): counts = results.get_counts() print("Resultados:", counts) total = sum(counts.values()) percentages = {key: f"{value / total*100:.2f}%" for key, value in counts.items()} ordered_percentages = dict(sorted(percentages.items(), key=lambda item: item[1], reverse=True)) print("Porcentajes:", ordered_percentages)
def qft(qc): """ Aplica la Transformada de Fourier Cuántica al circuito """ # swap qc.barrier() for i in range(QUBIT_COUNT//2): qc.swap(i, QUBIT_COUNT-i-1) qc.barrier()
for i in range(QUBIT_COUNT-1): qc.h(i) qc.barrier() for j in range(i+1): qc.cp(math.pi/(2**(j+1)), i-j, i+1)
qc.h(QUBIT_COUNT-1)
def inverse_qft(qc): """ Aplica la Transformada de Fourier Cuántica inversa al circuito """ for i in range(QUBIT_COUNT-1): qc.h(QUBIT_COUNT-1-i) qc.barrier() for j in range(QUBIT_COUNT-i-1): qc.cp(-math.pi/(2**(j+1)), QUBIT_COUNT-2-i-j, QUBIT_COUNT-1-i) qc.barrier()
qc.h(0) # swap qc.barrier() for i in range(QUBIT_COUNT//2): qc.swap(i, QUBIT_COUNT-i-1)
qc = QuantumCircuit(QUBIT_COUNT, QUBIT_COUNT)
qc.x(2) # frecuencia de la ondaqc.barrier()inverse_qft(qc) # generar la ondaqc.barrier()qft(qc) # obtener la frecuenciaqc.barrier()
qc.measure(QUBITS, QUBITS)print(qc.draw())
res = run_circuit(qc)analyze_qft_results(res)
░ ░ ░ ░ ░ ┌───┐ ░ ░ ░ ░ ┌───┐ ░ ░ ░ ┌─┐q_0: ──────░───────░────────────■─────────░───────░──■─────────░─┤ H ├─░──X──░──░──X──░─┤ H ├─░──■─────────────░───────────■─────────────░─┤M├────── ░ ░ │ ░ ┌───┐ ░ │P(-π/2) ░ └───┘ ░ │ ░ ░ │ ░ └───┘ ░ │P(π/2) ┌───┐ ░ │ ░ └╥┘┌─┐q_1: ──────░───────░──■─────────┼─────────░─┤ H ├─░──■─────────░───────░──┼──░──░──┼──░───────░──■───────┤ H ├─░──■────────┼─────────────░──╫─┤M├─── ┌───┐ ░ ┌───┐ ░ │P(-π/2) │P(-π/4) ░ └───┘ ░ ░ ░ │ ░ ░ │ ░ ░ └───┘ ░ │P(π/2) │P(π/4) ┌───┐ ░ ║ └╥┘┌─┐q_2: ┤ X ├─░─┤ H ├─░──■─────────■─────────░───────░────────────░───────░──X──░──░──X──░───────░────────────────░──■────────■───────┤ H ├─░──╫──╫─┤M├ └───┘ ░ └───┘ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ └───┘ ░ ║ ║ └╥┘c: 3/═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╩══╩══╩═ 0 1 2Resultados: {'100': 1024}Porcentajes: {'100': '100.00%'}
Observando el circuito uno puede detectar que tanto QFT como su inversa son similares. Como curiosidad, se puede probar que aplicar tres veces QFT es equivalente a utilizar su inversa:
Ejemplos
Sección titulada «Ejemplos»En esta sección se elaboran distintos ejemplos que permitan demostrar el funcionamiento de QFT para casos específicos.
Usando QFT
Sección titulada «Usando QFT»Se presentan tres ejemplos. En estos ejemplos se obtiene la frecuencia del patrón de fases a partir de un estado cuántico dado.
En el primer ejemplo el patrón se repite 8 veces, en el segundo 4 veces y en el tercero se repite 2 veces, pero en formato de señales cuadradas.
Estado inicial del algoritmo, se repite ocho veces el patrón de fases.
Luego de aplicar QFT se revela que la frecuencia del estado cuántico es 8.
Estado inicial del algoritmo. Se repite cuatro veces el patrón de fases.
Luego de aplicar QFT se revela que la frecuencia del estado cuántico es 4.
Estado inicial del algoritmo, se repite dos veces el patrón de fases, pero representan señales “cuadradas”.
Luego de aplicar QFT se revela que la frecuencia del estado cuántico es probable que sea 2, pero existen otros valores posibles.
Usando invQFT
Sección titulada «Usando invQFT»En el formato contrario a la sección anterior, se presentarán ejemplos de frecuencias y se convertirán a patrónes de fases relativas utilizando invQFT.
En el primer ejemplo se obtendrá la señal con frecuencia 2, y en el segundo ejemplo la señal con frecuencia 1.
Estado inicial del algoritmo, se marca como frecuencia el número “2”.
Luego de aplicar la inversa de QFT, se genera la señal con frecuencia 2.
Estado inicial del algoritmo, se marca como frecuencia el numero “1”.
Luego de aplicar la inversa de QFT se genera la señal con frecuencia 1.
Consideraciones
Sección titulada «Consideraciones»La implementación de QFT varía según la bibliografía. Puede presentarse con diferentes puertas, o en diferente orden, o con/sin puertas de intercambio.
A su vez, existen casos donde se interpreta QFT con la misma definición que DFT y en otros casos como su inversa (ángulos opuestos).