The traditional method for estimating the noise is to sample two ROIs, one in brain white matter, and one in the background. Assuming that the background signal contained only noise, we can estimate the noise standard deviation assigma = sqrt(2.0 / (4.0 - PI)) * stddev(signal in background region)where the constant scaling corrects for the Rician distribution of the noise, giving us the standard deviation sigma of the original signal. To synthesize data with the same noise conditions, we would take the true signal S_0 and calculateS = |[S_0 + N(0, sigma), N(0, sigma)]|where N(0, sigma) is a random sample drawn from normal distribution with mean 0 and standard deviation sigma.
The second method requires multiple b=0 images, and defines sigma_mult as the standard deviation of the signal over the ROI, across all K b=0 images. Again, let i be a voxel index, thensigma_i = stddev(S_{i1},...,S{iK})) sigma_mult = mean(sigma_1,...,sigma_N)And finally SNR ismean(S_{11}, S_{12},...,S_{1K}, S_{21},...,S_{NK}) / sigma_multIf there are two or more b=0 images, both snr_diff and snr_mult will both be computed. The more b=0 images there are, the better the estimate via sigma_mult, but sigma_diff only ever uses the first two b=0 images."