Skip to content

Small Tip Angle Approximation

julia script jupyter notebook launch binder

Based on the results in page 41 of the book "Handbook of MRI Pulse Sequences" by Bernstein et al.

In this example, we will showcase a common approximation in MRI, the small tip angle approximation. For this, we will simulate a slice profile for spins with positions      and with a gradient so their frequencies are mapped to     . To start, we define an RF pulse with a flip angle of 30 deg and pulse duration of   .

julia
B1 = 4.92e-6
Trf = 3.2e-3
zmax = 2e-2
fmax = 5e3
z = range(-zmax, zmax, 400)
Gz = fmax /* zmax);

The designed RF pulse is presented in the figure below, where the additional gradient refocuses the spins' phase after the excitation.

julia
seq = PulseDesigner.RF_sinc(B1, Trf, sys; G=[0;0;Gz], TBP=8)
p2 = plot_seq(seq; height=380, max_rf_samples=Inf, slider=false)

Now we will perform the simulation using the function simulate_slice_profile. Note that we modified Δt_rf in sim_params to match the resolution of the waveform.

julia
sim_params = Dict{String, Any}("Δt_rf" => Trf / length(seq.RF.A[1]))
M = @suppress simulate_slice_profile(seq; z, sim_params)

As you can see, for a flip angle of 30 deg, the slice profile is very close to the small tip angle approximation (the Fourier transform of ).

But what will happen if we use a flip angle of 120 deg instead?

julia
α_desired = 120 + 0im               # The multiplication of a complex number scales the RF pulse of a Sequence
α = get_flip_angles(seq)[1]         # Previous FA approx 30 deg
seq = (α_desired / α) * seq         # Scaling the pulse to have a flip angle of 120
M = @suppress simulate_slice_profile(seq; z, sim_params);

For this case, the small tip angle approximation breaks 😢, thus, the reason for its name!

This basic sinc pulse is not designed to be -insensitive. Some adiabatic RF pulses have been proposed to achieve this. Watch out for a future example showing these adiabatic RF pulses 👀.


This page was generated using Literate.jl.