clc; clear; close all; % ---------------------------------------------------------- % FIR Highpass Filter Design using Window Methods % ---------------------------------------------------------- % Specifications wp = 0.8 * pi; % Passband edge frequency ws = 0.7 * pi; % Stopband edge frequency wc = (ws + wp) / 2; % Cutoff frequency dw = abs(ws - wp); % Transition width for HPF M = ceil(1.8 * pi / dw) + 1; % No. of filter coefficients (make it odd) n = linspace(0, M-1, M); % Sample points % ---------------------------------------------------------- % Ideal Highpass filter impulse response % ---------------------------------------------------------- hd = (sin(pi * (n - (M-1)/2)) ./ (pi * (n - (M-1)/2))) ... - (sin(wc * (n - (M-1)/2)) ./ (pi * (n - (M-1)/2))); % Handle n = (M-1)/2 case using L'Hôpital's Rule hd((M-1)/2 + 1) = 1 - (wc / pi); % ---------------------------------------------------------- % Window Functions % ---------------------------------------------------------- W_rect = ones(1, M); % Rectangular window W_hamm = hamming(M)'; % Hamming window W_hann = hanning(M)'; % Hanning window % ---------------------------------------------------------- % Apply Windows to Ideal Impulse Response % ---------------------------------------------------------- h_rect = hd .* W_rect; h_hamm = hd .* W_hamm; h_hann = hd .* W_hann; % ---------------------------------------------------------- % Compute Frequency Response % ---------------------------------------------------------- [H_rect, w] = freqz(h_rect, 1, 1024); [H_hamm, ~] = freqz(h_hamm, 1, 1024); [H_hann, ~] = freqz(h_hann, 1, 1024); % Normalize frequency and magnitude w = w / (2 * pi); HN_rect = abs(H_rect) / max(abs(H_rect)); HN_hamm = abs(H_hamm) / max(abs(H_hamm)); HN_hann = abs(H_hann) / max(abs(H_hann)); % ---------------------------------------------------------- % Plot Results % ---------------------------------------------------------- figure; plot(w, 20 * log10(HN_rect), 'r', 'LineWidth', 1.5); hold on; plot(w, 20 * log10(HN_hamm), 'b', 'LineWidth', 1.5); plot(w, 20 * log10(HN_hann), 'g', 'LineWidth', 1.5); grid on; xlabel('\bf Normalized Frequency ----->'); ylabel('\bf Normalized Magnitude Response (dB) ----->'); title('\bf Highpass FIR Filter Designed Using Different Windows'); legend('Rectangular', 'Hamming', 'Hanning', 'Location', 'Best'); % ---------------------------------------------------------- % Display some info % ---------------------------------------------------------- fprintf('Number of coefficients (M): %d\n', M); fprintf('Cutoff frequency (rad): %.4f\n', wc); fprintf('Transition width (rad): %.4f\n', dw);