Academic Block

Logo of Academicblock.net

Digital Signal Processing (DSP) Using MATLAB

Digital Signal Processing (DSP) involves analyzing and manipulating signals using digital techniques. MATLAB provides a comprehensive set of tools for DSP, enabling users to model, analyze, and visualize signals efficiently.

Introduction to DSP Concepts

Signals can be represented as a series of numbers, and MATLAB treats signals as vectors or arrays. Common operations in DSP include filtering, Fourier transforms, convolution, and sampling.

Example 1: Signal Creation in Matlab

Signals can be generated in MATLAB using built-in functions or by defining them manually:

% Creating a discrete-time sinusoidal signal
fs = 1000; % Sampling frequency (Hz)
t = 0:1/fs:1-1/fs; % Time vector from 0 to 1 second
f = 5; % Frequency of the sine wave (Hz)
x = sin(2*pi*f*t); % Sinusoidal signal
plot(t, x); % Plot the signal
xlabel('Time (s)');
ylabel('Amplitude');
title('Sine Wave');

The above code generates and plots a sine wave of 5 Hz sampled at 1000 Hz.

Example 2: Measuring Key Signal Properties in MATLAB

Key signal properties such as amplitude, phase, signal-to-noise ratio (SNR), and total harmonic distortion (THD) are fundamental in analyzing signals in DSP. MATLAB provides built-in functions to calculate these properties effectively.

Analyzing a Composite Signal

Consider a composite signal comprising two sinusoidal components and random noise. We will measure its amplitude, phase, SNR, and THD.

% Signal Parameters
fs = 1000; % Sampling frequency (Hz)
t = 0:1/fs:1-1/fs; % Time vector (1 second duration)
f1 = 50; % Frequency of first sine wave (Hz)
f2 = 120; % Frequency of second sine wave (Hz)
A1 = 5; % Amplitude of first sine wave
A2 = 3; % Amplitude of second sine wave

% Create Composite Signal
signal = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t);
noise = 0.5*randn(size(t)); % Add Gaussian noise
noisy_signal = signal + noise; % Composite signal with noise

% Plot the Composite Signal
figure;
plot(t, noisy_signal);
xlabel('Time (s)');
ylabel('Amplitude');
title('Composite Signal');

Measuring Signal Amplitude and Phase

The amplitude and phase of the signal can be computed using the Fast Fourier Transform (FFT):

% Compute FFT
N = length(noisy_signal); % Number of points
X = fft(noisy_signal); % FFT of the signal
frequencies = (0:N-1)*(fs/N); % Frequency range
magnitude = abs(X)/N; % Magnitude
phase = angle(X); % Phase

% Extract Amplitude and Phase at Key Frequencies
[~, idx1] = min(abs(frequencies - f1)); % Index of f1
[~, idx2] = min(abs(frequencies - f2)); % Index of f2
amp_f1 = 2*magnitude(idx1); % Amplitude of f1
amp_f2 = 2*magnitude(idx2); % Amplitude of f2
phase_f1 = phase(idx1); % Phase of f1
phase_f2 = phase(idx2); % Phase of f2

disp(['Amplitude at ', num2str(f1), ' Hz: ', num2str(amp_f1)]);
disp(['Amplitude at ', num2str(f2), ' Hz: ', num2str(amp_f2)]);
disp(['Phase at ', num2str(f1), ' Hz: ', num2str(phase_f1), ' radians']);
disp(['Phase at ', num2str(f2), ' Hz

Fourier and Spectral Analysis in Matlab

Example 3: Performing Fourier Transform using Matlab

The Fourier Transform converts a time-domain signal into its frequency-domain representation:

% Fourier Transform of a signal
X = fft(x); % Compute the FFT
n = length(x); % Number of points in the signal
f = (0:n-1)*(fs/n); % Frequency range
amplitude = abs(X)/n; % Magnitude of FFT
plot(f, amplitude); % Plot the frequency spectrum
xlabel('Frequency (Hz)');
ylabel('Amplitude');
title('Frequency Spectrum');

The output plot will show the frequency components present in the signal.

Example 4: Inverse Fast Fourier Transform (IFFT) in MATLAB

The Inverse Fast Fourier Transform (IFFT) is used to reconstruct a time-domain signal from its frequency-domain representation. MATLAB provides the ifft function to compute the IFFT efficiently.

Reconstructing a Signal Using IFFT

Consider a signal composed of two sinusoidal components. We will compute its FFT to obtain the frequency-domain representation, then use the IFFT to reconstruct the original signal.

% Signal Parameters
fs = 1000; % Sampling frequency (Hz)
t = 0:1/fs:1-1/fs; % Time vector (1 second duration)
f1 = 50; % Frequency of first component (Hz)
f2 = 120; % Frequency of second component (Hz)
A1 = 3; % Amplitude of first component
A2 = 2; % Amplitude of second component

% Create Original Signal
signal = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t);

% Compute FFT
N = length(signal); % Number of points
X = fft(signal); % FFT of the signal
frequencies = (0:N-1)*(fs/N); % Frequency range

% Use IFFT to Reconstruct Signal
reconstructed_signal = ifft(X);

% Plot Original and Reconstructed Signal
figure;
subplot(2,1,1);
plot(t, signal);
xlabel('Time (s)');
ylabel('Amplitude');
title('Original Signal');

subplot(2,1,2);
plot(t, real(reconstructed_signal));
xlabel('Time (s)');
ylabel('Amplitude');
title('Reconstructed Signal');

Explanation of the IFFT Code

  • Original Signal: A time-domain signal composed of two sinusoidal components.
  • FFT: The frequency-domain representation of the signal is computed using fft.
  • IFFT: The ifft function reconstructs the original time-domain signal from the frequency-domain data.

Output Interpretation

The above code produces two plots:

  1. Original Signal: The first plot shows the time-domain representation of the original signal.
  2. Reconstructed Signal: The second plot shows the time-domain representation of the signal reconstructed using the IFFT. The two signals should closely match.

Notes:

  • Ensure that the length of the input to ifft matches the length of the original signal.
  • The reconstructed signal may have a negligible imaginary part due to numerical errors. Use the real function to extract the real part if needed.

Filters in MATLAB: Low-Pass, High-Pass, Band-Pass, and Band-Stop

Filters are essential in signal processing for isolating specific frequency components or removing unwanted noise. MATLAB provides various tools for designing and applying filters.

Example 5: Simple Low-Pass Filter in Matlab

% Low-pass filter design and application
fc = 10; % Cutoff frequency (Hz)
[b, a] = butter(6, fc/(fs/2)); % Design a 6th-order Butterworth filter
y = filter(b, a, x); % Apply the filter to the signal
plot(t, y); % Plot the filtered signal
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered Signal');

Example 6: Designing and Applying Filters

Consider a signal composed of multiple sinusoidal components. We will apply different filters to isolate or remove specific frequency ranges.

% Signal Parameters
fs = 1000; % Sampling frequency (Hz)
t = 0:1/fs:1-1/fs; % Time vector (1 second duration)
f1 = 50; % Frequency of first component (Hz)
f2 = 150; % Frequency of second component (Hz)
f3 = 300; % Frequency of third component (Hz)
signal = sin(2*pi*f1*t) + sin(2*pi*f2*t) + sin(2*pi*f3*t); % Composite signal

% Design Filters
lowPassFilter = designfilt('lowpassfir', 'PassbandFrequency', 100, 'StopbandFrequency', 120, 'SampleRate', fs);
highPassFilter = designfilt('highpassfir', 'PassbandFrequency', 200, 'StopbandFrequency', 180, 'SampleRate', fs);
bandPassFilter = designfilt('bandpassfir', 'StopbandFrequency1', 90, 'PassbandFrequency1', 100, 'PassbandFrequency2', 200, 'StopbandFrequency2', 210, 'SampleRate', fs);
bandStopFilter = designfilt('bandstopfir', 'PassbandFrequency1', 50, 'StopbandFrequency1', 100, 'StopbandFrequency2', 200, 'PassbandFrequency2', 300, 'SampleRate', fs);

% Apply Filters
lowPassed = filter(lowPassFilter, signal);
highPassed = filter(highPassFilter, signal);
bandPassed = filter(bandPassFilter, signal);
bandStopped = filter(bandStopFilter, signal);

% Plot Original and Filtered Signals
figure;
subplot(5,1,1);
plot(t, signal);
xlabel('Time (s)');
ylabel('Amplitude');
title('Original Signal');

subplot(5,1,2);
plot(t, lowPassed);
xlabel('Time (s)');
ylabel('Amplitude');
title('Low-Passed Signal');

subplot(5,1,3);
plot(t, highPassed);
xlabel('Time (s)');
ylabel('Amplitude');
title('High-Passed Signal');

subplot(5,1,4);
plot(t, bandPassed);
xlabel('Time (s)');
ylabel('Amplitude');
title('Band-Passed Signal');

subplot(5,1,5);
plot(t, bandStopped);
xlabel('Time (s)');
ylabel('Amplitude');
title('Band-Stopped Signal');

Explanation of the Code

  • Original Signal: The composite signal includes three sinusoidal components of different frequencies.
  • Filter Design: The designfilt function is used to design FIR filters for specific frequency ranges.
  • Filter Application: The filter function applies the designed filters to the signal.

Output Interpretation

The code generates five plots:

  1. Original Signal: The time-domain representation of the composite signal.
  2. Low-Passed Signal: Contains only the low-frequency component (f1).
  3. High-Passed Signal: Contains only the high-frequency components (f2 and f3).
  4. Band-Passed Signal: Contains the frequency components within the specified passband.
  5. Band-Stopped Signal: Excludes the frequency components within the specified stopband.

Notes:

  • The designfilt function provides flexibility to customize filter specifications.
  • Adjust the passband and stopband frequencies to meet specific requirements.
  • Ensure that the sampling frequency is at least twice the highest frequency in the signal (Nyquist criterion).

Example 7: Convolution in Matlab

Convolution is a fundamental operation in DSP, often used in filtering and system analysis:

% Convolution example
h = [1, 2, 3]; % Impulse response
x = [0, 1, 0, -1, 0]; % Input signal
y = conv(x, h); % Convolution
disp(y);
Output: [0 1 2 2 -1 -2 -3 0]

Example 8: Signal Sampling and Reconstruction

Sampling involves converting a continuous signal into a discrete signal, while reconstruction involves recovering the original signal from the sampled data:

% Downsampling a signal
downsampled_x = x(1:2:end); % Downsample by a factor of 2
plot(downsampled_x);
xlabel('Sample Index');
ylabel('Amplitude');
title('Downsampled Signal');

Useful MATLAB Functions for DSP

Function
Explanation
fft
fft(x) computes the Fast Fourier Transform of x.
ifft
ifft(X) computes the Inverse FFT of X.
filter
filter(b, a, x) applies a digital filter defined by coefficients b and a.
conv
conv(x, h) computes the convolution of signals x and h.
butter
butter(n, Wn) designs an nth-order Butterworth filter with cutoff Wn.

Practice Questions

Test Yourself

1. Create a sinusoidal signal and compute its FFT. Plot the frequency spectrum.

2. Design a low-pass filter with a cutoff frequency of 15 Hz and apply it to a noisy signal.

3. Perform convolution on two signals and analyze the result.

4. For example 4, Modify the code to include a third frequency component in the signal. Recompute the FFT and IFFT to verify reconstruction.

5. Design an FIR filter with different stopband and passband frequencies. Apply it to the original signal and analyze the result.