<p>This is a great question and sampling is always a little tricky.</p>
<p><strong>side note:</strong> It's important to make sure that no down-conversion has been done, that the &quot; 1000-1400 MHz band&quot; has not already been mixed with a 900 MHz local oscillator and shifted to 100-500 MHz before conversion.</p>
<p>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 <em>sampling used as down-conversion</em> which happens in hardware radios (like what's in our phones and other 21st century radio chip sets) should be our friend here.</p>
<p>So I added five sine waves; 1010, 1100, 1250, 1270, and 1490 MHz sampled at 1000 MHz and it seems to work fine!</p>
<p><a href="https://i.sstatic.net/JkxXR.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/JkxXR.png" alt="enter image description here" /></a></p>
<p>The red dots are the initial frequencies <strong>minus 1000 MHz</strong> and they match the observed frequencies in the log power spectrum.</p>
<p>Script for test:</p>
<pre><code>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()
</code></pre>

CC BY-SA 4.0
2021-10-13T17:30:33.420Z
+1, You may not get aliasing for sampling at less than double the max Freq, but sampling at more than double is the only way to ensure that no aliasing occurs (without down-conversion as you subtly point out).  In your above example, I think you would get a tone if you injected a sine wave at 1000 MHz.
Connor Garcia
CC BY-SA 4.0
2021-10-13T22:17:29.587Z
@ConnorGarcia I'm no expert in this; now that you mention aliasing, it seems that this *depends on* aliasing for down-conversion, and that there not be any other signals outside of the >1000 to <1500 MHz lest they show up unexpectedly somewhere as well. I'm more than open to corrections/comments/additional answers here!
uhoh
CC BY-SA 4.0
2021-10-13T22:42:02.467Z
@ConnorGarcia Actually I think "Because we can take advantage of aliasing." is the actual answer to the question as asked? (which I have stumbled upon without really realizing it)
uhoh
CC BY-SA 4.0
2021-10-14T13:14:55.017Z
This does seem to show that it *works* but lacks a few equations to show *why* the sampling rate is more or less independent of the carrier frequency.
Carl Witthoft
CC BY-SA 4.0
2021-10-14T16:19:21.823Z
@CarlWitthoft I have trouble thinking about a "carrier frequency" in the context of radio astronomy since natural radio phenomena are unmodulated.  I just think you could get some weird results especially in interferometry if you sampled at sub-Nyquist (2x the max Freq).
Connor Garcia
CC BY-SA 4.0
2021-10-15T12:29:27.183Z
@ConnorGarcia fair enough :-)
Carl Witthoft
CC BY-SA 4.0
2021-10-12T23:10:03.860Z
2021-10-12T23:10:03.860Z
uhoh
<p>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?</p>

<observational-astronomy><radio-astronomy><data-analysis><radio-telescope>
Why Nyquist Sampling Rate depends on Bandwidth and not max frequency?
user307105
# Why Nyquist Sampling Rate depends on Bandwidth and not max frequency?

(Asked by: username_0 on 2021-10-12)

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?

**Tags:** observational-astronomy, radio-astronomy, data-analysis, radio-telescope


---

## 1 answers

### Answer by username_1 on 2021-10-12. Score: 3

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!

[![enter image description here](https://i.sstatic.net/JkxXR.png)](https://i.sstatic.net/JkxXR.png)

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()

```

> **Comments:**
> **username_2**: +1, You may not get aliasing for sampling at less than double the max Freq, but sampling at more than double is the only way to ensure that no aliasing occurs (without down-conversion as you subtly point out).  In your above example, I think you would get a tone if you injected a sine wave at 1000 MHz.  
> **username_1**: @username_2 I'm no expert in this; now that you mention aliasing, it seems that this *depends on* aliasing for down-conversion, and that there not be any other signals outside of the >1000 to <1500 MHz lest they show up unexpectedly somewhere as well. I'm more than open to corrections/comments/additional answers here!  
> **username_1**: @username_2 Actually I think "Because we can take advantage of aliasing." is the actual answer to the question as asked? (which I have stumbled upon without really realizing it)  
> **username_3**: This does seem to show that it *works* but lacks a few equations to show *why* the sampling rate is more or less independent of the carrier frequency.  
> **username_2**: @username_3 I have trouble thinking about a "carrier frequency" in the context of radio astronomy since natural radio phenomena are unmodulated.  I just think you could get some weird results especially in interferometry if you sampled at sub-Nyquist (2x the max Freq).  
> **username_3**: @username_2 fair enough :-)  

---

