I want to simulate state tomography on a 8 qubit state. I use the example https://qiskit.org/ecosystem/experiments/manuals/verification/state_tomography.html as a guide.

My problem is that I get a very poor fidelity (State Fidelity = 0.53638) using the same setting shown in the example. When I go to the documentation I do not find anything that helps to increase the fidelity. Increasing the number of shots does not do anything.

The same would happen for smaller states. For example, tomography in 2 qubit state does not do better than 0.92 fidelity.

Any ideas how to proceed ?


2 Answers 2


The example uses the a noisy simulator FakePerth() with noise parameters taken from the a real backend. Any circuit that you execute through this noisy simulator will return non ideal results. The drop in fidelity that you are seeing is probably due to errors in state preparation (for whatever state you are doing tomography for), single qubit gates and measurements.

If you want to see noiseless results (up to shot noise given by the finite sampling) you can change the definition of the backend to:

backend = AerSimulator.from_backend(FakePerth(), noise_model = None)


Quantum fidelity is a state overlap measure, and is reasonably good for measuring how well a state was prepared. If you are getting results with poor fidelity, that means that the state preparation had errors in the computation (which is the case if you ran these experiments on current quantum computers). In my experience, for an 8 qubit state, this likely to be expected if it uses some nominal number of 2 qubit gates, but it does depend heavily on the gate depth and gate count of the final circuit.

Increasing the number of shots is good to do, but it does not increase the measured fidelity. It just makes the measurement more accurate.

Here are some ideas for ways to improve the fidelity of the state preparation (assuming you want to run these experiments on current quantum computers, and not for example just simulate classically what the ideal result would be):

  1. Add in dynamical decoupling to your circuits - see this page and this page. Be careful with the state tomography component, if Qiskit experiments compiles the circuits before sending them to the backend it may be the case that the digital dynamical decoupling sequences are removed. Dynamical decoupling can on average improve quantum computations by suppressing errors on idle qubits.
  2. Assuming this is on an IBMQ system, try using other parts of the chip - e.g. target specific layouts on the chip, compile your circuit to those parts, and then perform state tomography using those specific parts of the chip.
  3. Try optimizing your circuits using a compiler before sending them to the backend. This could remove some circuit operations, making the computation have less errors. This can done by trying different compilers, such as pytket, or by setting the Qiskit transpilation optimization level to 3, or try the other layout and routing methods that are available.
  4. Try running the circuits on lower error rate quantum computers than what you tried in these experiments you mentioned.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.