%% 练习一:Butterworth 数字低通滤波器设计 % 文件名: exercise1_butterworth.m % 学号:______ 姓名:______ %% 设计指标 Fs = 80000; % 采样频率 80 kHz Fp = 4000; % 通带边界 4 kHz Fst = 20000; % 阻带边界 20 kHz Rp = 0.5; % 通带最大衰减 0.5 dB Rs = 45; % 阻带最小衰减 45 dB %% Step 1: 频率归一化 % TODO 归一化到Nyquist频率 Wp = []; Ws = []; %% Step 2: 确定滤波器阶次 % TODO 使用 buttord 函数 N_butt = []; Wn_butt = []; fprintf('Butterworth滤波器: N = %d, Wn = %.6f\n', N_butt, Wn_butt); %% Step 3: 设计数字滤波器 % TODO 使用 butter 函数 num_d = []; den_d = []; %% Step 4: 计算频率响应 % TODO 使用 freqz 函数 H_butt = []; f = []; %% Step 5: 绘图 figure('Name', 'Butterworth滤波器'); % TODO 绘制幅度响应和相位响应 %% ======================================== % 🔍 提交前自检 (请勿修改以下代码) % ======================================== vars_chk = {'N_butt', 'Wn_butt', 'num_d', 'den_d', 'H_butt'}; miss = {}; for i = 1:length(vars_chk) if ~exist(vars_chk{i}, 'var') || isempty(eval(vars_chk{i})) miss{end+1} = vars_chk{i}; end end if ~isempty(miss) fprintf(2, '❌ 错误:以下变量未赋值或为空:%s\n', strjoin(miss, ', ')); else fprintf('✅ 练习一变量检查通过。\n'); end
%% 练习二:Chebyshev I 型数字低通滤波器设计 % 文件名: exercise2_chebyshev.m % 学号:______ 姓名:______ %% 设计指标 (与练习一相同) Fs = 80000; Fp = 4000; Fst = 20000; Rp = 0.5; Rs = 45; %% Step 1: 频率归一化 % TODO 归一化到Nyquist频率 Wp = []; Ws = []; %% Step 2: 确定滤波器阶次 % TODO 使用 cheb1ord 函数 N_cheb = []; Wn_cheb = []; fprintf('Chebyshev I 滤波器: N = %d, Wn = %.6f\n', N_cheb, Wn_cheb); %% Step 3: 设计数字滤波器 % TODO 使用 cheby1 函数 num_d_cheb = []; den_d_cheb = []; %% Step 4: 计算频率响应 % TODO 使用 freqz 函数 H_cheb = []; f = []; %% Step 5: 绘图 figure('Name', 'Chebyshev I 滤波器'); % TODO 绘制幅度响应和相位响应 %% Step 6: 与Butterworth对比 % TODO 绘制对比图,比较阶数差异 %% ======================================== % 🔍 提交前自检 (请勿修改以下代码) % ======================================== vars_chk = {'N_cheb', 'Wn_cheb', 'num_d_cheb', 'den_d_cheb', 'H_cheb'}; miss = {}; for i = 1:length(vars_chk) if ~exist(vars_chk{i}, 'var') || isempty(eval(vars_chk{i})) miss{end+1} = vars_chk{i}; end end if ~isempty(miss) fprintf(2, '❌ 错误:以下变量未赋值或为空:%s\n', strjoin(miss, ', ')); else fprintf('✅ 练习二变量检查通过。\n'); end
%% 练习三:Elliptic (Cauer) 数字低通滤波器设计 % 文件名: exercise3_elliptic.m % 学号:______ 姓名:______ %% 设计指标 (与练习一、二相同) Fs = 80000; Fp = 4000; Fst = 20000; Rp = 0.5; Rs = 45; %% Step 1: 频率归一化 % TODO 归一化到Nyquist频率 Wp = []; Ws = []; %% Step 2: 确定滤波器阶次 % TODO 使用 ellipord 函数 N_ellip = []; Wn_ellip = []; fprintf('Elliptic 滤波器: N = %d, Wn = %.6f\n', N_ellip, Wn_ellip); %% Step 3: 设计数字滤波器 % TODO 使用 ellip 函数 num_d_ellip = []; den_d_ellip = []; %% Step 4: 计算频率响应 % TODO 使用 freqz 函数 H_ellip = []; f = []; %% Step 5: 绘图 figure('Name', 'Elliptic 滤波器'); % TODO 绘制幅度响应和相位响应 %% Step 6: 三种滤波器综合对比 % TODO 绘制三种滤波器对比图,输出阶数对比 %% ======================================== % 🔍 提交前自检 (请勿修改以下代码) % ======================================== vars_chk = {'N_ellip', 'Wn_ellip', 'num_d_ellip', 'den_d_ellip', 'H_ellip'}; miss = {}; for i = 1:length(vars_chk) if ~exist(vars_chk{i}, 'var') || isempty(eval(vars_chk{i})) miss{end+1} = vars_chk{i}; end end if ~isempty(miss) fprintf(2, '❌ 错误:以下变量未赋值或为空:%s\n', strjoin(miss, ', ')); else fprintf('✅ 练习三变量检查通过。\n'); end
%% 练习四:分析与思考题
% 文件名: exercise4_analysis.m
% 学号:______ 姓名:______
%% 思考题 A1: 音频处理系统中的滤波器选择
fprintf('========== A1: 音频处理系统 ==========\n\n');
fprintf('场景: 设计一个音频均衡器的低通滤波器\n\n');
% TODO 填写推荐的滤波器类型及理由
fprintf('推荐选择: ______ 滤波器\n\n');
fprintf('理由:\n');
fprintf('1. ______\n');
fprintf('2. ______\n');
fprintf('3. ______\n\n');
%% 思考题 A2: 通信系统中的滤波器选择
fprintf('========== A2: 通信系统 ==========\n\n');
fprintf('场景: 设计一个多路复用系统的信道选择滤波器\n\n');
% TODO 填写推荐的滤波器类型及理由
fprintf('推荐选择: ______ 滤波器\n\n');
fprintf('理由:\n');
fprintf('1. ______\n');
fprintf('2. ______\n');
fprintf('3. ______\n\n');
%% 思考题 A3: 实时系统的滤波器设计考量
fprintf('========== A3: 实时系统 ==========\n\n');
fprintf('场景: 嵌入式系统实时信号处理\n\n');
% TODO 分析关键考量因素
fprintf('关键考量因素:\n\n');
fprintf('1. ______\n');
fprintf('2. ______\n');
fprintf('3. ______\n');
fprintf('4. ______\n\n');
fprintf('实际建议:\n');
fprintf('______\n\n');