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.

Scanner{LinearXYZ, UniformCoilSens, UniformTransmit}(HardwareLimits
  B0: Float64 1.5
  B1: Float64 1.0e-5
  Gmax: Float64 0.06
  Smax: Float64 50.0
  ADC_Δt: Float64 2.0e-6
  DUR_Δt: Float64 1.0e-5
  GR_Δt: Float64 1.0e-5
  RF_Δt: Float64 1.0e-6
  RF_ring_down_time: Float64 2.0e-5
  RF_dead_time: Float64 0.0001
  ADC_dead_time: Float64 1.0e-5
, LinearXYZ(), UniformCoilSens(), UniformTransmit())

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.