Bird
Raised Fist0
Signal Processingdata~7 mins

Sampling and reconstruction in communication in Signal Processing

Choose your learning style10 modes available
Introduction

Sampling helps us turn continuous signals into numbers so computers can understand them. Reconstruction lets us get back the original signal from those numbers.

When recording sound to save it digitally.
When sending voice over the phone network.
When measuring temperature over time with sensors.
When converting analog radio signals to digital for processing.
Syntax
Signal Processing
sampled_signal = sample(original_signal, sampling_rate)
reconstructed_signal = reconstruct(sampled_signal, reconstruction_method)

sample() means taking values from the original signal at regular time steps.

reconstruct() means using those samples to rebuild the signal, often with interpolation.

Examples
Sampling a sine wave at 1000 samples per second and reconstructing it using sinc interpolation.
Signal Processing
sampled_signal = sample(sin_wave, 1000)  # sample sine wave at 1000 Hz
reconstructed_signal = reconstruct(sampled_signal, 'sinc')
Sampling audio at 44.1 kHz and reconstructing with simple linear interpolation.
Signal Processing
sampled_signal = sample(audio_signal, 44100)  # CD quality audio sampling
reconstructed_signal = reconstruct(sampled_signal, 'linear')
Sample Program

This code creates a 5 Hz sine wave as the original signal. It samples this signal at 50 Hz, which is enough to capture the wave properly (above twice the frequency). Then it reconstructs the signal by holding each sample value until the next one (zero-order hold). The plot shows the original, sampled points, and reconstructed signal.

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

# Create a continuous signal: 5 Hz sine wave
fs_continuous = 5000  # high sampling for 'continuous' simulation
t = np.linspace(0, 1, fs_continuous, endpoint=False)
signal = np.sin(2 * np.pi * 5 * t)

# Sample the signal at 50 Hz (below Nyquist for 5 Hz signal)
fs_sample = 50
sample_points = np.arange(0, 1, 1/fs_sample)
sampled_signal = np.sin(2 * np.pi * 5 * sample_points)

# Reconstruct signal using zero-order hold (step function)
reconstructed_signal = np.repeat(sampled_signal, fs_continuous//fs_sample)
reconstructed_signal = reconstructed_signal[:len(signal)]

# Plot all signals
plt.figure(figsize=(10, 6))
plt.plot(t, signal, label='Original Signal (5 Hz sine)')
plt.stem(sample_points, sampled_signal, linefmt='r-', markerfmt='ro', basefmt=' ', label='Sampled Points (50 Hz)')
plt.plot(t, reconstructed_signal, 'g--', label='Reconstructed Signal (Zero-Order Hold)')
plt.legend()
plt.xlabel('Time (seconds)')
plt.ylabel('Amplitude')
plt.title('Sampling and Reconstruction Example')
plt.grid(True)
plt.show()
OutputSuccess
Important Notes

Sampling rate must be at least twice the highest frequency in the signal to avoid losing information (Nyquist rate).

Reconstruction methods like sinc interpolation give better results than simple zero-order hold.

In real communication, signals are often noisy, so filtering is important before sampling.

Summary

Sampling converts continuous signals into discrete numbers for digital use.

Reconstruction rebuilds the continuous signal from these samples.

Choosing the right sampling rate and reconstruction method is key to keeping signal quality.

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