# 量子 Fourier 变换(Quantum Fourier Transform) English · **简体中文** > 类别 C1 · 模块 [`oracq.algorithms.common.fourier`](../../api/algorithms/common/fourier.rst) · 阶段 V1 ## 概述 $n$ 位正号离散 Fourier 变换,矩阵元为 $$ F_{y x} = \frac{1}{\sqrt{2^n}} \exp\!\bigl(2\pi i \cdot x y / 2^n\bigr), $$ 即 $|x\rangle \mapsto \frac{1}{\sqrt{2^n}} \sum_y \exp(2\pi i \cdot x y / 2^n) |y\rangle$。实现采用标准的 Hadamard + 受控相位结构并附带末尾位序交换,位序约定为 little endian。QFT 是 [Fourier 加法](fourier-addition.md)与相位估计等模块的基础组件。 ## 接口与输入模型 ```python qft(width) qft_with_work(width) inverse_qft(width) ``` API 入口:{obj}`qft `、{obj}`qft_with_work `、{obj}`inverse_qft ` - {obj}`qft(width) `:`width` 范围 1..64,非正整数或超界在生成期抛出 {obj}`ValidationError `。返回 {obj}`Operation `,只有 `target: Bits(width)` 寄存器。 - {obj}`qft_with_work(width) `:保留早期零宽 `work` 接口的适配,寄存器为 `target: Bits(width)` 与 `work: Bits(0)`,内部直接调用 `qft`。 - {obj}`inverse_qft(width) `:QFT 的伴随操作(逆变换),以 adjoint 上下文包裹模块调用实现。 三个入口都不消费 oracle 输入(无 input model),位宽即全部参数。 ## 实现要点 `qft` 的生成顺序:从最高位向最低位遍历 `high`,先对 `target[high]` 加 H,再对每个 `low < high` 施加以 `target[low]` 控制的相位门,角度 $\pi / 2^{\text{high} - \text{low}}$;随后用 $\lfloor n/2 \rfloor$ 个 swap 交换镜像位,把变换末端的位序翻转为 little endian。`inverse_qft` 用 `with b.adjoint()` 包裹对 `qft` 的调用,变换本身保持为模块调用、不在生成或序列化阶段展开,逆与正变换共享同一子模块定义。 适用边界:`width` 上限 64 由寄存器位宽契约给出;输出位序是 little endian,与外部位序对接时需要注意末尾 swap 已经完成。 ## 验证方案 类别 C1(精确离散语义,判定准则见 `../development/validation-plan.md` §2):作用酉须与 Fourier 矩阵逐点相等。三层证据: - 结构:`tests/core/test_algorithm_expansion.py:AlgorithmExpansionTests.test_legacy_imports_reference_canonical_objects` 钉死历史导入名 `oracq.algorithms.elementary.qft` 指回本模块的规范 `qft` 对象(矩阵口径)。 - 数值:`AlgorithmExpansionTests.test_qft_matches_positive_fourier_matrix`——`qft(3)` 对全部 8 个基态列逐一模拟,每个输出幅度与正号 Fourier 矩阵元 $\exp(2\pi i \cdot x y / 8)/\sqrt{8}$ 对拍,精度 places = 10。 - 绑定:本算法无独立绑定见证(矩阵口径为 —;无开放声明入口)。 ## 已知缺口与计划阶段 无已知缺口(验证矩阵缺口列为 —),阶段 V1。 ## 相关链接 - 同模块:[Fourier 加法](fourier-addition.md) - 源码:`src/oracq/algorithms/common/fourier.py` - API 参考:[Fourier 变换与算术](../../api/algorithms/common/fourier.rst) - 验证矩阵:[验证覆盖矩阵](../../development/validation-coverage.md) ## 数值验证 论文级数值实验见 `tests/verification/verify_fourier.py`(真实后端执行,无模拟替身)。实验设计:幺正级用 OriginIR-ext 导出经 UniQC `Circuit.to_matrix` 取全幺正(n ≤ 4,无工作区故 `effective_block` 即全矩阵、泄漏为 0),与独立构造的正号 DFT 矩阵 $F_{yx} = \exp(2\pi i x y/2^n)/\sqrt{2^n}$ 逐元素对比;寄存器级用 rir-pysparq 在 n = 6/8/12 上做两类逐点对拍——基态 $|x\rangle$ 经 QFT 的全部 $2^n$ 个振幅对照 DFT 行,以及仅用 H 与单比特相位门独立制备的 Fourier 模式 $\sum_x \omega^{-kx}|x\rangle/\sqrt{2^n}$ 经 QFT 后对基态索引 $k$ 的聚焦;n = 4 富相位态另做 reference / rir-pysparq / adapter-pysparq / originir-ext 四路径交叉对拍(含 `qft_with_work` 适配等价性);逆 QFT 往返恒等在幺正级(n = 3/4 复合幺正 = $I$)与寄存器级(n = 8/12 全叠加恢复均匀态、采样基态往返)两级验证。 | 案例 | 规模 | 后端路径 | 指标 | 数值 | |---|---|---|---|---| | `qft-unitary-dft` | n = 1/2/3/4 | originir-ext + UniQC to_matrix | max_error | 8.7e-17 / 2.7e-16 / 1.4e-15 / 3.8e-15 | | `inverse-qft-unitary` | n = 1/2/3/4 | originir-ext + UniQC to_matrix | max_error | 8.7e-17 / 2.7e-16 / 1.4e-15 / 3.8e-15 | | `inverse-qft-roundtrip-unitary` | n = 3/4 | originir-ext + UniQC to_matrix | max_error | 4.4e-16 / 7.8e-16 | | `qft-basis-row-pointwise` | n = 6/8/12 | rir-pysparq | max_error | 4.2e-15 / 9.5e-15 / 5.4e-14 | | `qft-fourier-mode-focus` | n = 6/8/12 | rir-pysparq | min_success_probability | ≥ 1 − 4.4e-15(泄漏振幅 0) | | `qft-cross-path` | n = 4 | 四路径对拍 | max_pairwise_deviation | 0.0 | | `inverse-qft-roundtrip-wide` | n = 8/12 | rir-pysparq | uniform_max_error | 1.2e-16 / 4.5e-17(基态往返失败 0) | 复现命令: ```bash PYTHONPATH=src <含 pysparq+uniqc 的解释器> tests/verification/verify_fourier.py ``` 产物:`out/verification/fourier.json`(39 个案例全过,总运行约 80 秒)。