designing and simulating active filters (low-pass, high-pass, band-pass) in MATLAB, including frequency response analysis and time-domain signal filtering

Here’s a step-by-step guide to designing and simulating active filters (low-pass, high-pass, band-pass) in MATLAB, including frequency response analysis and time-domain signal filtering:


1. Active Filter Design Basics

Active filters use operational amplifiers (op-amps) combined with resistors and capacitors. MATLAB’s designfilt function (Signal Processing Toolbox) simplifies filter design.

Filter Types

  • Low-Pass Filter (LPF): Passes frequencies below a cutoff.
  • High-Pass Filter (HPF): Passes frequencies above a cutoff.
  • Band-Pass Filter (BPF): Passes frequencies within a range.

2. Filter Design in MATLAB

Low-Pass Filter (Butterworth Example)

matlab
Copy
% Design parameters
Fs = 1000;          % Sampling frequency (Hz)
Fpass = 100;        % Passband frequency (Hz)
Fstop = 200;        % Stopband frequency (Hz)
Apass = 1;          % Passband ripple (dB)
Astop = 40;         % Stopband attenuation (dB)

% Design Butterworth LPF
lpf = designfilt('lowpassiir', ...
    'PassbandFrequency', Fpass, ...
    'StopbandFrequency', Fstop, ...
    'PassbandRipple', Apass, ...
    'StopbandAttenuation', Astop, ...
    'SampleRate', Fs, ...
    'DesignMethod', 'butter');

High-Pass Filter (Chebyshev Example)

matlab
Copy
% Design parameters
Fpass = 200;        % Passband frequency (Hz)
Fstop = 100;        % Stopband frequency (Hz)

% Design Chebyshev HPF
hpf = designfilt('highpassiir', ...
    'PassbandFrequency', Fpass, ...
    'StopbandFrequency', Fstop, ...
    'PassbandRipple', 0.5, ...
    'StopbandAttenuation', 50, ...
    'SampleRate', Fs, ...
    'DesignMethod', 'cheby2');

Band-Pass Filter (Elliptic Example)

matlab
Copy
% Design parameters
Fstop1 = 50;        % Lower stopband (Hz)
Fpass1 = 100;       % Lower passband (Hz)
Fpass2 = 200;       % Upper passband (Hz)
Fstop2 = 250;       % Upper stopband (Hz)

% Design Elliptic BPF
bpf = designfilt('bandpassiir', ...
    'StopbandFrequency1', Fstop1, ...
    'PassbandFrequency1', Fpass1, ...
    'PassbandFrequency2', Fpass2, ...
    'StopbandFrequency2', Fstop2, ...
    'StopbandAttenuation1', 40, ...
    'PassbandRipple', 0.1, ...
    'StopbandAttenuation2', 40, ...
    'SampleRate', Fs, ...
    'DesignMethod', 'ellip');

3. Frequency Response Analysis

Visualize magnitude and phase responses using fvtool:

matlab
Copy
% Analyze LPF
fvtool(lpf, 'Analysis', 'freq');
title('Low-Pass Filter Frequency Response');

% Analyze HPF
fvtool(hpf, 'Analysis', 'freq');
title('High-Pass Filter Frequency Response');

% Analyze BPF
fvtool(bpf, 'Analysis', 'freq');
title('Band-Pass Filter Frequency Response');

4. Time-Domain Simulation

Test Signal Generation

Create a signal with multiple frequencies:

matlab
Copy
t = 0:1/Fs:1;       % Time vector (1 second)
f1 = 50;            % Low frequency (Hz)
f2 = 150;           % Mid frequency (Hz)
f3 = 300;           % High frequency (Hz)

% Composite signal
signal = sin(2*pi*f1*t) + 0.5*sin(2*pi*f2*t) + 0.2*sin(2*pi*f3*t);

Filter the Signal

matlab
Copy
% Apply LPF
filtered_lpf = filtfilt(lpf, signal);

% Apply HPF
filtered_hpf = filtfilt(hpf, signal);

% Apply BPF
filtered_bpf = filtfilt(bpf, signal);

Plot Results

matlab
Copy
figure;
subplot(4,1,1);
plot(t, signal); title('Original Signal'); xlabel('Time (s)');

subplot(4,1,2);
plot(t, filtered_lpf); title('LPF Output'); xlabel('Time (s)');

subplot(4,1,3);
plot(t, filtered_hpf); title('HPF Output'); xlabel('Time (s)');

subplot(4,1,4);
plot(t, filtered_bpf); title('BPF Output'); xlabel('Time (s)');

5. Example Output

  • Frequency Response:
    LPF Frequency Response
  • Time-Domain Filtering:
    Filtered Signals

6. Key Concepts

  1. Filter Design Methods:
    • Butterworth: Maximally flat passband, slower roll-off.
    • Chebyshev: Steeper roll-off, passband/stopband ripple.
    • Elliptic: Sharpest roll-off, ripple in both bands.
  2. Zero-Phase Filteringfiltfilt eliminates phase distortion by filtering forward and backward.

7. Advanced Topics

  1. Custom Transfer Functions:
    matlab
    Copy
    % Define a 2nd-order Butterworth LPF
    [b, a] = butter(2, Fpass/(Fs/2), 'low');
    filtered_signal = filtfilt(b, a, signal);
  2. Real-Time Simulation:
    Use dsp.SignalSource and dsp.Filter for streaming data.
  3. Noise Analysis:
    Add noise to the input signal and observe SNR improvement:

    matlab
    Copy
    noisy_signal = awgn(signal, 10, 'measured'); % Add 10 dB SNR noise
    filtered_noisy = filtfilt(lpf, noisy_signal);

8. Full MATLAB Code

Combine the code blocks above to create a script. Ensure the Signal Processing Toolbox is installed for designfilt and fvtool.

This framework allows you to:

  • Design active filters with custom specifications.
  • Validate frequency and time-domain behavior.
  • Compare different filter types and design methods