Nội dung text FIR.docx
So sánh trực tiếp Câu 4: Hoàn thiện chương trình thiết kế bộ lọc, dựa theo tiêu chuẩn thiết kế As. Chương trình có dạng functionh = F IRwindow(wc, As) Code % Thiết kế bộ lọc FIR bằng phương pháp cửa sổ % Đầu vào: % wc: Tần số cắt chuẩn hóa (rad/sample) % As: Độ suy giảm dải triệt (dB) % Giá trị đầu vào ví dụ wc = pi/4; % Tần số cắt As = 40; % Độ suy giảm dải triệt % 1. Chọn loại cửa sổ và hệ số C if As <= 21 window_type = @rectwin; % Cửa sổ chữ nhật C = 0.6; elseif As <= 44 window_type = @hanning; % Cửa sổ Hanning C = 3.21; elseif As <= 53 window_type = @hamming; % Cửa sổ Hamming C = 3.47; else window_type = @blackman; % Cửa sổ Blackman C = 5.71; end
% 2. Tính chiều dài cửa sổ L L = ceil(C * (2 * pi) / wc); % Làm tròn lên để đảm bảo L là số nguyên if mod(L, 2) == 0 L = L + 1; % Đảm bảo L là số lẻ end % 3. Tính đáp ứng xung lý tưởng n = -(L-1)/2 : (L-1)/2; % Tạo dãy n từ -(L-1)/2 đến (L-1)/2 h_ideal = sin(wc * n) ./ (pi * n); % Đáp ứng xung lý tưởng h_ideal((L-1)/2 + 1) = wc / pi; % Xử lý giá trị tại n = 0 (tránh chia 0) % 4. Tạo cửa sổ và áp dụng w = window_type(L); % Tạo cửa sổ với chiều dài L h = h_ideal .* w'; % Áp dụng cửa sổ lên đáp ứng xung % 5. Hiển thị kết quả figure; subplot(2,1,1); stem(h, 'filled'); % Biểu diễn đáp ứng xung title('Impulse Response of FIR Filter'); xlabel('n'); ylabel('Amplitude'); subplot(2,1,2); [H, W] = freqz(h, 1, 1024); % Tính phổ biên độ plot(W/pi, 20*log10(abs(H))); % Vẽ đáp ứng tần số title('Frequency Response of FIR Filter'); xlabel('Normalized Frequency (\times\pi rad/sample)'); ylabel('Magnitude (dB)'); grid on; % Kết thúc chương trình disp('Thiết kế hoàn tất!'); Kết quả