Is the Nyquist sampling rate same for different bands if those bands have same bandwith? E.g. Would the Nyquist Sampling rate be same for 1000-1400 MHz band as for 100-500 MHz band because both the bands have same bandwidth (400 MHz)? This doesn't make logical sense to me as I guess Nyquist sampling rate should depend on the max frequency that we are measuring. E.g. I think sampling rate/frequency for 1000-1400 MHz band should be 2800 MHz. Can someone please help me understand this?
This is a great question and sampling is always a little tricky.
side note: It's important to make sure that no down-conversion has been done, that the " 1000-1400 MHz band" has not already been mixed with a 900 MHz local oscillator and shifted to 100-500 MHz before conversion.
I had a hunch that you can get by with a lower frequency. I chose 1000 MHz (twice 500 MHz) but maybe a lower one works as well. The magic of sampling used as down-conversion which happens in hardware radios (like what's in our phones and other 21st century radio chip sets) should be our friend here.
So I added five sine waves; 1010, 1100, 1250, 1270, and 1490 MHz sampled at 1000 MHz and it seems to work fine!
The red dots are the initial frequencies minus 1000 MHz and they match the observed frequencies in the log power spectrum.
Script for test:
import numpy as np import matplotlib.pyplot as plt frequencies = np.array([1010, 1100, 1250, 1270, 1490]) N = 10000000 # 10^7 f_sample = 1000. # MHz d = 1/f_sample times = d * np.arange(N) y = sum([np.sin(2 * np.pi * f * times) for f in (frequencies)]) ft = np.fft.fftshift(np.fft.fft(y)) ft_freqs = np.fft.fftshift(np.fft.fftfreq(N, d=d)) p = np.abs(ft)**2 pnorm = p / p.max() if True: fig, (ax1, ax2) = plt.subplots(2, 1) ax1.plot(times[:500], y[:500], linewidth=0.5) ax1.set_title('sampled at 1 ns, first 500 of ' + str(N) + ' points shown') ax2.plot(ft_freqs, pnorm, linewidth=0.5) ax2.set_yscale('log') ax2.set_ylim(1E-25, None) ax2.set_title('log power') ax2.set_xlabel('frequency (MHz)') ax2.plot(frequencies - 1000., 10 * np.ones(len(frequencies)), '.r') fig.suptitle('frequencies: ' + str(frequencies) + ' MHz', fontsize=14) plt.show()