我有一个用 Python 实现的 bloch 模拟。实现非常简单,如下:
import numpy as np
GYRO = 267538030.3797 # in radians / s / T
T1 = 0.3
inv_T1 = 1.0/0.3
T2 = 0.05
inv_T2 = 1.0/0.05
M0 = 1.0
# This function is called at various time steps
def bloch(self, M, B):
# Solve bloch equation in rotating frame.
# M: Magnetization vector
# B: Effective magnetic field
return GYRO * np.cross(M, B) - [M[0] * inv_T2,
M[1] * inv_T2,
inv_T1 * (M[2] - M0)]
现在,在激励期间,有效场由下式给出: 所以,伪代码为:
假设 RF 激发是共振的,即,我跟踪自旋磁化强度随时间的演变,它起作用了,在放松几秒钟后,我们得到了这条曲线:T1
因此,横向磁化开始消失,纵向磁化恢复。
现在,我想模拟在 RF 脉冲之后应用的读出梯度。现在,当射频脉冲关闭时,有效磁化强度的和值为 0。每个时间步长有效场的分量由梯度幅度和位置的乘积给出。所以,
现在,当我使用相同的方程来解决这个问题时,我得到了无意义的结果,如下图所示:
正如你所看到的,这些数字不在图表之列,我期待着最后的回声。渐变是一个简单的梯形渐变,我检查了单位,这一切都说得通。我想知道我在存在梯度的情况下对有效场的表达是否正确?我也看到这些被表示为旋转矩阵,我想知道是否有类似的东西我可能错过了。
更新
根据 M529 的建议,我做了以下实验:
# Change the method to ignore relaxation effects
import numpy as np
GYRO = 267538030.3797 # in radians / s / T
# This function is called at various time steps
def bloch(self, M, B):
# Solve bloch equation in rotating frame.
# M: Magnetization vector
# B: Effective magnetic field
return GYRO * np.cross(M, B)
现在我用不同的翻转角度(从 0 到 1200)调用该方法,并注意矢量长度,它不会保持较大翻转角度的长度。所以,也许有一个数字问题。出于计算原因,我增加了射频带宽。这是不同翻转时的磁化图。这是一种奇怪的非线性效应。它首先下降,然后不受控制地爬回。


