Bird
Raised Fist0
Signal Processingdata~10 mins

Sampling and reconstruction in communication in Signal Processing - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to generate a sampled signal from a continuous sine wave.

Signal Processing
import numpy as np
import matplotlib.pyplot as plt

fs = 1000  # Sampling frequency in Hz
f = 5      # Signal frequency in Hz
t = np.linspace(0, 1, fs, endpoint=False)
continuous_signal = np.sin(2 * np.pi * f * t)
sample_points = t[::[1]]
sampled_signal = continuous_signal[::[1]]

plt.stem(sample_points, sampled_signal, use_line_collection=True)
plt.title('Sampled Signal')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.show()
Drag options to blanks, or click blank then click option'
A50
B5
C100
D10
Attempts:
3 left
💡 Hint
Common Mistakes
Choosing a sampling interval too large causing aliasing.
Using a sampling interval too small, which is inefficient.
2fill in blank
medium

Complete the code to reconstruct the signal using sinc interpolation.

Signal Processing
import numpy as np
import matplotlib.pyplot as plt

fs = 100  # Sampling frequency
f = 5     # Signal frequency
T = 1 / fs
n = np.arange(0, 1, T)
sampled_signal = np.sin(2 * np.pi * f * n)

# Reconstruction time points
t = np.linspace(0, 1, 1000)

reconstructed_signal = np.zeros_like(t)
for i, ti in enumerate(t):
    reconstructed_signal[i] = sum(sampled_signal * np.sinc((ti - n) / [1]))

plt.plot(t, reconstructed_signal)
plt.title('Reconstructed Signal')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.show()
Drag options to blanks, or click blank then click option'
AT
Bf
Cfs
D1
Attempts:
3 left
💡 Hint
Common Mistakes
Using frequency instead of sampling period in sinc argument.
Confusing sampling frequency with signal frequency.
3fill in blank
hard

Fix the error in the code that calculates the Nyquist frequency.

Signal Processing
fs = 800  # Sampling frequency in Hz
nyquist_freq = [1]
print(f"Nyquist frequency is {nyquist_freq} Hz")
Drag options to blanks, or click blank then click option'
Afs / 2
Bfs * 2
C2 / fs
Dfs
Attempts:
3 left
💡 Hint
Common Mistakes
Using sampling frequency directly instead of half.
Multiplying sampling frequency by 2.
4fill in blank
hard

Fill both blanks to create a dictionary of sampled points and their amplitudes for frequencies below Nyquist.

Signal Processing
fs = 500
nyquist = fs / 2
frequencies = [100, 200, 300, 400]
sampled_points = {f: f * [1] for f in frequencies if f < [2]
print(sampled_points)
Drag options to blanks, or click blank then click option'
A0.01
Bnyquist
Cfs
D0.02
Attempts:
3 left
💡 Hint
Common Mistakes
Using fs instead of nyquist for frequency filtering.
Using incorrect amplitude scaling factor.
5fill in blank
hard

Fill the blanks to create a dictionary comprehension that maps time points to sampled sine values only if amplitude is above threshold.

Signal Processing
import numpy as np
fs = 1000
f = 10
t = np.linspace(0, 1, fs, endpoint=False)
sampled_signal = {t_i: np.sin(2 * np.pi * f * t_i) for t_i in t if np.sin(2 * np.pi * f * t_i) [1] [2]

print(list(sampled_signal.items())[:5])
Drag options to blanks, or click blank then click option'
A>
B0.5
C<
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Using less than instead of greater than.
Using zero as threshold instead of 0.5.

Practice

(1/5)
1. What is the main purpose of sampling in communication systems?
easy
A. To convert a continuous signal into discrete values
B. To amplify the signal strength
C. To filter out noise from the signal
D. To encrypt the signal for security

Solution

  1. Step 1: Understand the role of sampling

    Sampling takes a continuous-time signal and measures its amplitude at discrete time intervals.
  2. Step 2: Identify the purpose in communication

    This process allows the signal to be represented digitally for processing and transmission.
  3. Final Answer:

    To convert a continuous signal into discrete values -> Option A
  4. Quick Check:

    Sampling = Continuous to discrete conversion [OK]
Hint: Sampling means turning smooth signals into numbers [OK]
Common Mistakes:
  • Confusing sampling with filtering
  • Thinking sampling increases signal strength
  • Mixing sampling with encryption
2. Which of the following is the correct Nyquist sampling rate formula for a signal with maximum frequency f_max?
easy
A. f_s > f_max / 2
B. f_s > 2 * f_max
C. f_s = f_max
D. f_s < f_max / 2

Solution

  1. Step 1: Recall Nyquist theorem

    The Nyquist rate states the sampling frequency must be greater than twice the highest frequency in the signal.
  2. Step 2: Apply to formula

    So, f_s > 2 * f_max ensures no loss of information during sampling.
  3. Final Answer:

    f_s > 2 * f_max -> Option B
  4. Quick Check:

    Nyquist rate = 2 * max frequency [OK]
Hint: Sample faster than twice the highest frequency [OK]
Common Mistakes:
  • Using sampling rate less than max frequency
  • Confusing less than and greater than signs
  • Ignoring the factor of 2 in Nyquist rate
3. Given a continuous signal with maximum frequency 3 kHz, what is the minimum sampling frequency to avoid aliasing? Choose the correct Python code output.
f_max = 3000
f_s = 2 * f_max
print(f_s)
medium
A. 6000
B. 1500
C. 3000
D. 9000

Solution

  1. Step 1: Calculate minimum sampling frequency

    Using Nyquist, minimum sampling frequency is twice the max frequency: 2 * 3000 = 6000 Hz.
  2. Step 2: Check Python code output

    The code multiplies 3000 by 2 and prints 6000, matching the calculation.
  3. Final Answer:

    6000 -> Option A
  4. Quick Check:

    2 * 3000 = 6000 [OK]
Hint: Double the max frequency to get sampling rate [OK]
Common Mistakes:
  • Printing max frequency instead of double
  • Dividing instead of multiplying
  • Confusing units (Hz vs kHz)
4. Identify the error in the following Python code snippet for reconstructing a signal using sinc interpolation:
import numpy as np

def reconstruct_signal(samples, t, T):
    x_recon = 0
    for n in range(len(samples)):
        x_recon += samples[n] * np.sinc((t - n*T))
    return x_recon

# samples = [1, 2, 3], t = 1.5, T = 1
print(reconstruct_signal([1, 2, 3], 1.5, 1))
medium
A. np.sinc argument should be normalized by pi
B. Loop should iterate over t values, not samples
C. x_recon should be initialized as an array, not zero
D. The function should return samples instead of x_recon

Solution

  1. Step 1: Understand np.sinc function

    In numpy, np.sinc(x) = sin(pi*x)/(pi*x), so input is already normalized by pi.
  2. Step 2: Check argument passed to np.sinc

    The code passes (t - n*T) directly, which is correct because np.sinc expects normalized input.
  3. Step 3: Identify error

    Actually, the argument is correct; the error is that x_recon is initialized as 0 (a scalar), but the function expects to handle array inputs for t for vectorized reconstruction.
  4. Step 4: Correct error

    x_recon should be initialized as np.zeros_like(t) if t is an array, but since t is scalar here, initialization is fine.
  5. Step 5: Reconsider options

    np.sinc argument should be normalized by pi says argument should be normalized by pi, but numpy's sinc already does that, so no need to normalize.
  6. Step 6: Final conclusion

    No error in normalization; the code is correct for scalar t. The main issue is if t is array, initialization fails.
  7. Final Answer:

    x_recon should be initialized as an array, not zero -> Option C
  8. Quick Check:

    Accumulator initialization must match output type [OK]
Hint: Remember numpy sinc is normalized by pi already [OK]
Common Mistakes:
  • Assuming np.sinc needs manual pi normalization
  • Initializing accumulator incorrectly for arrays
  • Confusing loop variable roles
5. You have a signal sampled at 8 kHz with maximum frequency 5 kHz. What problem will occur during reconstruction, and how can it be fixed?
hard
A. Signal will be noisy; fix by applying a low-pass filter after sampling
B. Signal will be delayed; fix by adjusting reconstruction timing
C. No problem; sampling rate is sufficient for reconstruction
D. Aliasing will occur; fix by increasing sampling rate above 10 kHz

Solution

  1. Step 1: Compare sampling rate and Nyquist rate

    Nyquist rate = 2 * max frequency = 2 * 5 kHz = 10 kHz. Sampling rate is 8 kHz, which is less than Nyquist rate.
  2. Step 2: Identify consequence of insufficient sampling

    Sampling below Nyquist rate causes aliasing, where higher frequencies appear as lower frequencies, distorting the signal.
  3. Step 3: Determine solution

    To avoid aliasing, increase sampling rate above 10 kHz.
  4. Final Answer:

    Aliasing will occur; fix by increasing sampling rate above 10 kHz -> Option D
  5. Quick Check:

    Sampling rate < Nyquist rate causes aliasing [OK]
Hint: Sample above twice max frequency to avoid aliasing [OK]
Common Mistakes:
  • Assuming 8 kHz is enough for 5 kHz max frequency
  • Confusing noise with aliasing
  • Ignoring Nyquist sampling theorem
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard