I use the correlation coefficient for very accurate SNR measurements when a reference test waveform can be used (or similarly if we know exactly what was transmitted and what the ideal signal characteristics are). For working with A/D converters where SINAD is also defined separately from SNR, this would be SINAD specifically since the result would be the signal power relative to the noise from all noise sources and distortions. More generally this can be referred to as the SNR as long as we’re clear that it is from all distortions and would also be consistent with EVM (Error Vector Magnitude) requirements. This is also an ideal and very accurate way to characterize noise figure in a receiver (better than using a broadband noise source as typically done when waveforms aren't known or available).
The relationship between SNR and the normalized correlation coefficient is given in this post with the formula to compute the correlation coefficient.
I call this the "Rho Tool" when I create one. Here is the detailed process:
Create a data matched reference waveform as we would expect it to appear at the location in the receiver where the signal is captured. To accurately characterize radio or channel performance, the waveform must be done with randomly or pseudo-randomly assigned data so that the full occupied bandwidth is characterized. The waveform can be pseudorandom in that we can repeat for convenience of the measurement (time alignment below) but note that the result of the repetition over period $T$ will restrict the frequencies probed in the channel to be spaced at $1/T$ -- we want $1/T$ to be fine enough to capture all distortions as depicted in the frequency domain (such as a narrow frequency null) so slower repetition rate of test waveforms is better. Otherwise, you may get a good SNR for a specific waveform used for test that isn't representative of SNR's that would be achieved with other randomly generated waveforms.
Remove all amplitude offsets by normalizing each waveform so that they have the same standard deviation.
Remove all frequency offsets from the captured waveform (this is also done through correlation: the complex output of the cross-correlation function can be used as a metric of frequency offset)
Remove all time offsets (again with correlation to get the two waveforms within one sample.)
Provide precision timing adjustment with fractional resampling. This step is critical, and the fractional precision is driven by the dynamic range needed: I have created precision SNR measurements with dynamic range in excess of 100 dB using this approach which had motivated this question, a dynamic range I actually needed due to specialized applications, but such an SNR is beyond what would be needed in most situations! Doing this requires the ability to make really good fractional delay filter banks; for anything less than 100 dB dynamic range, I have had best success with least squares filter design to get there. As MattL concluded in the earlier link above, I use windowing approaches for higher SNR cases. As a guide, the limit of the SNR measurement will be $20log(2\pi/M)$ where $1/M$ is the fractional symbol delay achievable. So to get 100 dB as I have done, requires a filter bank with a precision of 1/16000! The group delay variation of the fractional delay filter has to be less than this phase variation $2\pi/16000$!. Luckily in most cases a 30 to 40 dB range would be more than sufficient and the fractional delay filter realization is simplified.
The correlation coefficient is measured between the reference and captured waveform with time and frequency offsets removed and from that (as given in the link above, the SNR is determined). All time, frequency and amplitude corrections are optimized by sweeping those parameters while measuring SNR, and the minimum is found (giving the true SNR with no time / frequency / amplitude offset effects). I have done this efficiently using gradient descent with binary weighted steps (starting with the largest step size of half the range, probe to each side and choose the minimum, then reduced step by half and repeat, which finds the bottom in log2(N) steps, where N represents the number of total steps, which is the precision for each metric).