46 lines
1.1 KiB
Matlab
46 lines
1.1 KiB
Matlab
function signal_filtered = firFilter(N, cutoffFreq, signal, samplingFreq)
|
|
%{
|
|
function signal_filtered = firFilter(N, cutoffFreq, signal, samplingFreq)
|
|
Ex: signal_filtered = firFilter(30, [5 20], x, 200)
|
|
|
|
Task: Apply an FIR bandpass filter to a signal.
|
|
|
|
Inputs:
|
|
- N: filter order
|
|
- cutoffFreq: 2-element vector [low high] for bandpass cutoff (Hz)
|
|
- signal: input signal to be filtered
|
|
- samplingFreq: sampling frequency (Hz)
|
|
|
|
Output:
|
|
- signal_filtered: the filtered output signal
|
|
|
|
Author: Tikea TE
|
|
Date: 16/04/2025
|
|
%}
|
|
|
|
% Normalize the cutoff frequency
|
|
Wn = cutoffFreq / (samplingFreq / 2); % Normalize to Nyquist
|
|
|
|
% Design the FIR bandpass filter using Hamming window
|
|
b = fir1(N, Wn, 'bandpass', hamming(N+1));
|
|
a = 1; % FIR filter has only numerator
|
|
|
|
% Apply filter
|
|
signal_filtered = filter(b, a, signal);
|
|
|
|
% Plot frequency response
|
|
figure;
|
|
freqz(b, a, 1024, samplingFreq);
|
|
title('Frequency Response of FIR Filter');
|
|
grid on;
|
|
|
|
% Plot impulse response
|
|
figure;
|
|
impz(b, a);
|
|
title('Impulse Response of FIR Filter');
|
|
xlabel('Samples (n)');
|
|
ylabel('Amplitude');
|
|
grid on;
|
|
|
|
end
|