To estimate the number of peaks in the experimental 2D spectra, line-cuts at different frequencies were analysed. This provided a reasonable estimate for the number of Gaussian functions (102) to be used for the 2D Gaussian fitting. Each of the spectra were fitted with a sum of 102 2D Gaussian functions using the non-linear least squares fitting function scipy.optimise.curve_fit on Python. The Trust Region Reflective algorithm was used to perform the minimisation of the Chi-squared value. Errors of the parameters of the fit were propagated from the residuals of the best fit. The 100 mM spectrum was first fitted with no fixed parameters. The initial guess locations were based on visual inspection of line cuts of the spectrum, and these were allowed to vary by ±15 cm -1 . The initial guess intensities were randomly generated numbers between 0-1 and were allowed to vary within the same range. The initial guess widths were 25 cm -1 for all peaks in both dimensions, and these were allowed to vary between 5-40 cm -1 . Each of the sample spectra were then fitted using the optimised parameters from the initial 100 mM fit as the initial guesses. All parameters were fixed, apart from intensities, which were allowed to vary from 0-1, and the location of peaks which were observed to shift in frequency with respect to potassium ion concentration in the line cuts of the spectra. These shifting peaks were allowed to vary by ±30 cm -1 in the dimension the shift is observed.