新闻详情

新闻详情

首页 / 资讯中心 / 详情

现代信号处理2020版习题答案初解:谱估计与自适应滤波

发布时间:2026/10/1 20:54:31来源:尧图网络
现代信号处理2020版习题答案初解:谱估计与自适应滤波
现代信号处理习题2020版答案初解这个标题点进来的人八成是两种状态一种是正拿着这门课的习题册被第7章自适应滤波或者第8章谱估计卡了两三个小时草稿纸写满也没对上后面的参考答案另一种是期末或者考研临近手里有一堆零散的笔记和答案截图想找一份能把思路串成一条线的复习材料。我自己这两种状态都经历过本科学的通信工程后来做算法方向现代信号处理这门课前后刷过两遍2020版这套习题我断断续续整理了将近两个月。所以这篇东西不是标准答案更像是一份初解——把我做题时踩过的坑、想通的路径、以及用代码反推答案的方法摊开来讲。它适合刚入门、正在被公式支配的同学也适合已经学完一遍、想回头把知识骨架理顺的人。核心关键词我会在正文里反复落到具体题目上现代信号处理、习题解答思路、2020版、谱估计、自适应滤波、滤波器设计。1. 动手之前先把习题骨架摸清楚很多人一上来就从第1题开始做做完前五题发现全是套路做到中间突然断层问题就出在没有先摸清整本书的骨架。我建议花半小时做一件事把目录抄一遍然后在每个章节旁边标注这道题属于能算还是能推。1.1 把知识点分成三类做题节奏完全不同第一类是纯计算题典型代表是z变换、DFT变换、卷积、滤波器阶数计算。这类题的特点是路径唯一只要公式记牢、计算不出错就能拿满分属于必须拿下的基本盘。做这类题的关键不是聪明是熟练度我一般会限时做一道z变换题控制在三分钟内。第二类是推导证明题比如证明Yule-Walker方程的Toeplitz结构、推导LMS的收敛条件、证明维纳滤波的正交性原理。这类题光背没用得理解每一步的逻辑动机考试里往往只占二三十分但它是区分学过和学懂的分水岭建议单独整理一个推导本。第三类是设计题比如给定通带阻带指标设计一个滤波器、给定阵列结构设计DOA估计算法。这类题综合性强得分点分散最容易丢分也最容易拉分。提示不要按题号顺序硬刷。我第一遍就是老实从头做结果第3章还有70%的题不会第4章又开始讲新东西整个人是崩的。正确做法是先按类型打散一类一类攻克。1.2 2020版和老版本的差别通常在哪不同年份的版本编排上的差别一般集中在三处一是新增了编程验证类题目要求用MATLAB或Python仿真某个算法并对比理论曲线二是谱估计部分的比重上升尤其是AR模型和子空间类算法三是应用题背景更贴近工程比如把单纯的滤波器设计包装成某采样系统需要抑制某频段干扰这种场景描述。理解这三点很重要因为一旦出现编程题你的复习策略就得从背公式切换到能复现。我在整理答案时发现凡是能用代码跑出曲线和参考答案对上的题记忆牢固度是不跑代码的三倍以上。后面第5节我会给一套具体的验证流程。1.3 我建议的做题顺序先做第1到第3章的纯计算题把离散时间信号、z变换、DFT这三块的手速练上来然后跳到滤波器设计章节集中突破最后回头啃谱估计和自适应滤波。理由很实际谱估计题里大量用到自相关函数、功率谱密度、矩阵特征分解这些工具在前面的章节已经反复出现过前面练熟了后面才有余力去理解算法思想而不是被计算本身拖死。2. 基础计算题里那些反复丢分的细节基础题看起来简单但恰恰是失分重灾区。我统计过自己前五次模拟的错题有四成错在z变换的收敛域、采样率换算、DFT分辨率这几个点上都是会做但做错的类型。2.1 z变换的收敛域比变换本身更容易错计算X(z)本身不难难的是收敛域ROC。核心判断规则就三条右序列的ROC在最外层极点之外左序列在最内层极点之内双边序列在两层极点之间的环形区域。很多人算出表达式就停笔了那是丢分行为。举个我自己做错的题x[n] a^n u[n] − b^n u[−n−1]两项的ROC分别是 |z||a| 和 |z||b|要存在公共收敛域必须满足 |a| |b|。如果题目里没给这个条件你得主动判断并说明当且仅当 |a||b| 时该序列的z变换存在。这个细节参考书里经常一笔带过但考试就是扣分点。还有一个高频考点因果性与稳定性的判断。判断一个系统是否因果看ROC是否在某圆外判断是否稳定看ROC是否包含单位圆。这两句话我建议你写在草稿纸最上面做题时对着看。我在整理2020版习题时发现几乎每章都有一道小题在考这个组合判断。2.2 采样与多速率题先画频谱再算数采样率相关的题不管是下采样、上采样还是采样率转换我的建议都是先画频谱图再动笔算数。因为这类题的错误绝大多数不是算错而是没想清楚频谱搬移的方向和叠加后的混叠情况。下采样M倍时域每M点取一点频域则是在0到2π上把原始频谱展宽M倍后叠加新采样率变成fs/M。这里有个陷阱下采样之前如果不做抗混叠滤波高频分量会折叠回来污染低频很多题故意不给滤波器让你判断某个频率成分会不会混叠到目标频段。判断方法很简单把该频率对新的奈奎斯特频率取模看看折到哪个位置。上采样L倍是在每两点之间插L−1个零频域是频谱压缩L倍并产生L−1个镜像必须接一个截止频率为π/L的低通滤波器把镜像滤掉。这类题的完整链路是插零—低通—增益补偿三步缺一不可滤波器增益要乘L才能恢复幅度。2.3 DFT的分辨率和栅栏效应别被补零骗了这是我最想强调的一点。频率分辨率由实际观测时间决定也就是Δf fs/N其中N是实际采样点数不是补零后的点数。补零只是在你已有的频谱上做内插让谱线看起来更密但两条真实谱线之间的分辨能力没有变。举个典型题采样率fs 1000 Hz采了N 200点那么Δf 5 Hz。如果信号里有两个频率成分分别位于100 Hz和103 Hz用这200点直接做DFT是分不开它们的因为间隔3 Hz小于分辨率5 Hz。这时候补零到1024点谱线间隔变成1000/1024 ≈ 0.98 Hz曲线好看了但两个峰依然糊在一起。要真正分开必须增加观测时间把N提到至少 fs/Δf 1000/3 ≈ 334点以上。栅栏效应是另一个常考点。当信号频率不落在谱线上时峰值会被压低最坏情况是频率正好落在两条谱线正中间幅度衰减到理论值的 2/π ≈ 0.637换算成dB大约是 −3.92 dB。这个数字建议记住很多选择题直接考它。泄漏则是因为截断导致非整周期信号的能量向邻近谱线扩散。加窗能压旁瓣代价是主瓣变宽分辨率下降。习题里常给矩形窗、汉宁窗、汉明窗、布莱克曼窗让你选记住它们的旁瓣电平矩形窗约 −13 dB汉宁窗约 −31 dB汉明窗约 −41 dB布莱克曼窗约 −57 dB。要求抑制强干扰时选旁瓣低的要求分辨两个靠近的成分时选主瓣窄的。3. 滤波器设计题从指标到系数的完整链路滤波器设计几乎是每套现代信号处理习题的必考大题也是最容易写出半页纸却拿不到几分的地方。原因是它步骤多每一步都有独立的得分点缺一环就断链。我把完整的解题链路拆成下面几步。3.1 巴特沃斯设计先算阶数再定截止频率拿到题目第一步永远是把数字指标翻译成模拟指标同时做预畸变。假设题目要求采样率fs 8 kHz通带边界0.2π处衰减不超过3 dB阻带边界0.5π处衰减至少40 dB。双线性变换的频率映射关系是 Ω 2 tan(ω/2)这里T归一化为1ω是数字角频率。通带ωp 0.2πΩp 2 tan(0.1π) 2 × 0.3249 0.6498阻带ωs 0.5πΩs 2 tan(0.25π) 2 × 1 2巴特沃斯阶数公式n ≥ log₁₀[(10^(As/10) − 1) / (10^(Ap/10) − 1)] / [2 log₁₀(Ωs/Ωp)]代入 Ap 3As 40分子log₁₀[(10⁴ − 1) / (10^0.3 − 1)] log₁₀(9999 / 0.9953) log₁₀(10046) ≈ 4.002分母2 log₁₀(2 / 0.6498) 2 log₁₀(3.078) 2 × 0.4883 0.9766n ≥ 4.002 / 0.9766 ≈ 4.10向上取整得n 5。阶数定下来后3 dB截止频率可以由通带或阻带任一端反推Ωc Ωp / (10^(Ap/10) − 1)^(1/(2n))代入得 Ωc 0.6498 / (0.9953)^0.1 ≈ 0.6498 / 0.99953 ≈ 0.6501。可以看出当Ap取3 dB时Ωc几乎就等于Ωp这也是为什么很多教材直接取Ωc Ωp。接下来的步骤是查5阶巴特沃斯的归一化极点反归一化展开成H(s)再做双线性变换 H(z) H(s)|_{s (1−z⁻¹)/(1z⁻¹)}最后整理成z⁻¹的有理分式。这一步计算量大但机械建议考试时把归一化系数表背下来一半能省不少时间。注意预畸变这一步千万别漏。我见过太多人直接拿数字频率ω去算阶数结果阶数算出来是对的因为比值差不多但截止频率定错最后幅频特性整体偏移整道题一分不给。3.2 FIR窗函数法阶数和窗型要一起选FIR设计比IIR简单但有两个容易搞混的点。第一个是阶数公式。对线性相位FIR过渡带宽度与阶数成反比近似关系是 N ≈ (A_s − 8) / (2.285 × Δω)其中Δω是过渡带宽度弧度A_s是阻带衰减dB。比如要求阻带衰减50 dB、过渡带宽度0.1π 0.314 rad则N ≈ (50 − 8)/(2.285 × 0.314) ≈ 42/0.7175 ≈ 58.5取N 59若需要奇数长度保证某种对称性取61。第二个是窗型的选择逻辑。很多人死记硬背哪个窗好其实判断标准很简单先看阻带衰减指标选第一个满足的窗再看过渡带如果满足衰减指标的窗过渡带太宽就加大阶数去补偿。具体参数对照如下。窗函数主瓣宽度rad最小阻带衰减dB适用场景矩形窗4π/N−13过渡带要求极窄对旁瓣不敏感汉宁窗8π/N−31通用分析泄漏抑制要求中等汉明窗8π/N−41语音、通用滤波布莱克曼窗12π/N−57强干扰抑制凯泽窗可调可调需要精确匹配指标时凯泽窗是唯一能通过参数β连续调节主瓣和旁瓣的窗当题目给的指标比较苛刻时优先考虑它。3.3 频率采样法和其他边缘考法有些习题会考频率采样法设计FIR做法是在频域直接给出N个采样值然后做IDFT得到h[n]。注意过渡带的采点技巧在两个采样点之间设置1到3个过渡点用优化方法比如线性规划确定它们的值能显著改善阻带衰减。还有一类题要求设计微分器或希尔伯特变换器这两类属于广义线性相位滤波器设计思路是先写出理想频率响应再套窗。微分器的理想响应是H(ω) jω希尔伯特变换器的幅度是1、相位是±90度设计时注意它们在ω0处是奇对称的采样点要避免在原点取非零值。4. 谱估计与自适应滤波最容易翻车的两大块这两块是现代信号处理区别于经典数字信号处理的核心也是习题里分值最高、最难的部分。我的经验是这两章的题必须理解算法背后的几何图像纯套公式基本做不下去。4.1 AR模型谱估计把Yule-Walker方程的手算套路练熟AR模型的谱估计公式是P(f) σ² / |1 Σ_{k1}^{p} a_k e^(−j2πfk)|²其中a_k是AR系数σ²是激励白噪声方差p是模型阶数。做题时通常给自相关序列r[0]、r[1]、…、r[p]要求解a_k。这时用Yule-Walker方程R a −r展开成矩阵形式就是一个Toeplitz方程组。手算时如果是低阶p1或p2直接代入解方程就行如果是高阶考试一般不会让你真手算会用Levinson-Durbin递推或者只要求你写出递推的矩阵表达式。p1的情况是最常考的r[0]a₁ −r[1]所以a₁ −r[1]/r[0]σ² r[0] a₁r[1] r[0](1 − |ρ₁|²)其中ρ₁ r[1]/r[0]是一阶自相关系数。这个结果非常常见建议直接记住。p2的情况要解一个2×2方程r[0]a₁ r[1]a₂ −r[1]r[1]a₁ r[0]a₂ −r[2]用克莱姆法则或者直接消元都行。解完之后算σ² r[0] a₁r[1] a₂r[2]。有个坑要注意AR谱估计对模型阶数非常敏感。阶数太低谱峰被平滑掉阶数太高会出现虚假谱峰。习题里常让你判断给出的谱估计图存在什么问题标准答案往往就是阶数选择不当导致虚假峰。4.2 子空间类算法MUSIC的手算步骤MUSIC是习题里出现频率最高的DOA算法因为它形式上漂亮推导也相对规整。核心流程是四步由阵列接收数据估计协方差矩阵 R E{xx^H}实际中常用K次快拍平均R̂ (1/K)Σ x(k)x^H(k)对R̂做特征分解得到特征值λ₁≥λ₂≥…≥λ_M和对应的特征向量前D个D是信源数大特征值对应的特征向量张成信号子空间剩下的M−D个张成噪声子空间E_n构造空间谱 P(θ) 1 / [a^H(θ) E_n E_n^H a(θ)]其中a(θ)是导向矢量。谱峰对应的角度就是波达方向估计值。手算题一般只给两个阵元、一个信源这时候M2D1噪声子空间只有一个特征向量计算量可控。步骤是先写出导向矢量 a(θ) [1, e^(−jπ sinθ)]^T半波长间距时然后算小特征值对应的特征向量最后代进谱函数求峰值。几个易错点一是特征向量要归一化二是要区分估计的协方差矩阵和理论协方差矩阵前者满秩做特征分解时信号子空间和噪声子空间不会有严格的分界得靠特征值大小判断信源数三是导向矢量的相位符号取决于阵列几何正负号弄反了角度会镜像。4.3 LMS和RLS步长与遗忘因子怎么定LMS的迭代是 w(n1) w(n) 2μ e(n) x(n)收敛条件是0 μ 1 / (M · λ_max)其中M是滤波器长度λ_max是输入自相关矩阵的最大特征值。实际做题时常用更宽松的估计0 μ 1 / (M · σ_x²)σ_x²是输入信号功率。比如M 32、输入是方差为1的白噪声那么μ 1/32 ≈ 0.031。工程上为了留余量一般取这个上界的1/3到1/10也就是0.003到0.01。RLS的更新里最关键的是遗忘因子λ通常取0.95到0.999。λ越接近1记忆越长、稳态误差越小但对非平稳环境的跟踪能力变差。习题里常考当系统突然变化时λ应该调大还是调小答案是调小因为需要更快遗忘旧数据。RLS的收敛速度比LMS快一个数量级代价是计算复杂度是O(M²)对比LMS的O(M)这个对比几乎每年都考。5. 用代码反推答案我自己的验证流程光靠手算一道题错了你也只是觉得不对但用代码跑一遍错在哪一步立刻暴露。我整理答案时给每类题都写了验证脚本这里挑几个最有用的分享。5.1 一个通用的谱估计验证模板import numpy as np import matplotlib.pyplot as plt # 生成AR(2)信号 np.random.seed(0) a np.array([1.0, -1.2, 0.6]) # AR系数注意a[0]1 N 1024 w np.random.randn(N) x np.zeros(N) for n in range(2, N): x[n] -a[1]*x[n-1] - a[2]*x[n-2] w[n] # 理论谱 f np.linspace(0, 0.5, 512) z np.exp(1j*2*np.pi*f) H 1.0 / (a[0] a[1]*z**-1 a[2]*z**-2) P_theory np.abs(H)**2 # 周期图估计 from scipy.signal import periodogram f_est, P_est periodogram(x, fs1.0, return_onesidedTrue) plt.plot(f, 10*np.log10(P_theory), labeltheory) plt.plot(f_est, 10*np.log10(P_est), labelperiodogram, alpha0.6) plt.legend(); plt.xlabel(Normalized freq); plt.ylabel(dB) plt.show()这段代码的价值在于你可以把题目给的AR系数代进去看理论谱长什么样再和习题里的图对照。如果对不上八成是某个系数的符号反了或者a[0]的归一化没处理好。5.2 对照检查的几个关键量每次做完题我会核对这几个量它们是最容易出错的哨兵指标自相关函数r[0]必须等于序列的能量如果不等说明求和范围错了滤波器幅频响应在通带边界和阻带边界分别代入ω值看衰减是否满足指标误差超过0.5 dB就要回头查预畸变DFT结果如果信号是实序列DFT的模必须关于N/2共轭对称不对称说明索引或者变换长度不对MUSIC谱峰位置把估计的角度代回导向矢量验证a(θ)与小特征向量正交内积应该接近0。提示验证脚本不要写完就扔。我建了一个文件夹按章节存复习的时候直接调出来改参数比重推一遍公式快得多。6. 常见错误速查与排查技巧下面这张表是我两个月里攒下来的基本上覆盖了80%的失分原因。做题卡住的时候直接查表比翻书快。现象可能原因排查动作z变换结果对ROC判错没分清左/右序列重新看u[n]还是u[−n−1]滤波器阶数算出来偏小忘了预畸变用Ω2tan(ω/2)重新换算幅频曲线整体平移截止频率定错用Ωc公式反推验证DFT峰值位置偏移一格索引从1开始数了确认谱线对应k·fs/N谱估计出现虚假峰AR阶数过高降低阶数或用AIC准则重选LMS不收敛步长超过上界检查μ是否小于1/(M·σ²)MUSIC谱峰镜像导向矢量符号反了检查阵元间距与相位符号双线性变换后阶数不变但系数错分子分母没同乘(1z⁻¹)^n手工展开验证最高次项再补两个书上不写但很实用的技巧。技巧一单位圆上验证。任何关于系统函数的题做完后把z e^(jω)代进去看幅频响应是否符合直觉。低通滤波器在ω0处增益应该接近1在ωπ处应该接近0高通反过来。两秒钟就能判断大方向对不对。技巧二量纲检查。功率谱密度的单位是功率每赫兹如果你算出来的谱值量级离谱地大或小多半是归一化因子漏了或者多乘了。特别是DFT的1/N、1/N²以及双边谱和单边谱的换算稍不留神就错。技巧三把结论代回原题验证。比如解出AR系数后用它重新计算r[1]和r[2]看是否和题目给的匹配。不匹配就说明方程列错了。这个动作我强烈建议养成习惯它能在交卷前救回不少分。我个人在做这套2020版习题时最深的一个体会是现代信号处理这门课答案本身的价值远不如通往答案的那条路。同一道滤波器设计题有人花二十分钟算出系数却不知道自己在干什么有人花四十分钟把每一步的物理意义想透后者的收益会延伸到后面所有的章节。我在整理这份初解的过程中真正让我卡住的从来不是计算而是为什么要做这一步——为什么要预畸变为什么要加窗为什么LMS的步长和滤波器长度成反比。把这些问号一个个拉直之后再回头看那些习题会发现它们其实是在用不同的角度反复问你同一个问题你对信号的频率特性到底理解到什么程度。另外说一个后续可以延伸的方向如果时间还够建议把每章的编程题自己动手重写一遍尤其是谱估计那部分把周期图、AR谱、MUSIC画在同一张图里对比你会对分辨率和方差这两个此消彼长的指标有非常直观的感受这比背十遍结论都管用。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

自适应遗传算法在配电网DG选址定容中的Matlab复现与调试 2026/10/1 22:55:29

自适应遗传算法在配电网DG选址定容中的Matlab复现与调试

第一次拿到这个课题,我的第一反应是:这不就是把遗传算法套到配电网DG选址定容上,换个自适应算子,然后在IEEE33和IEEE118上各跑一遍的事儿吗?等我真正动手复现才发现,细节远比想象中多。今天这篇就把整个复现…

阅读更多 →
智能表单实战:Schema 建模、条件显隐、校验时机与自动填充 2026/10/1 22:55:29

智能表单实战:Schema 建模、条件显隐、校验时机与自动填充

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
PVE服务器硬件监控:CPU温度、硬盘温度与UPS状态集成指南 2026/10/1 22:55:28

PVE服务器硬件监控:CPU温度、硬盘温度与UPS状态集成指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DevHub深度拆解:AI一键生成应用与成本账本的设计之道 2026/10/1 22:55:21

DevHub深度拆解:AI一键生成应用与成本账本的设计之道

写这篇稿子之前,我先说明一下背景。最近我在产品的选型阶段,密集接触了一批"AI一键生成应用"的工具,其中一个让我印象特别深的就是 DevHub。它的起点其实很简单——你在输入框里用自然语言描述一个想要的东西,比如"…

阅读更多 →
TestableMock自定义Mock处理器:从字节码增强到测试替身实战 2026/10/1 22:55:21

TestableMock自定义Mock处理器:从字节码增强到测试替身实战

我刚开始用TestableMock那阵子,一直把它当Mockito的“平替”来用——写个MockMethod,把外部依赖替换掉,省去一堆when().thenReturn()的样板代码。直到有个老项目里的一个静态工具类怎么都Mock不生效,我才开始认真翻它的源码&#…

阅读更多 →
Gin中间件详解:从执行链路原理到工程落地实践 2026/10/1 22:55:21

Gin中间件详解:从执行链路原理到工程落地实践

在Go的Web开发圈子里,Gin早就是事实上的标配框架了。很多人用它写接口,Handler里塞满了一坨一坨的重复逻辑:接口要不要登录、要不要打日志、要不要捕获panic、要不要做跨域……刚开始不觉得,等业务长起来,每个接口都来…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉