信号处理实验全流程:从时域到频域再到滤波器设计

发布时间:2026/10/23 16:26:18
信号处理实验全流程:从时域到频域再到滤波器设计

简介:这份资源是南京邮电大学「信号分析与处理实验」课程的完整实验报告,面向正在修读数字信号处理、信号与系统相关课程的高校学生,以及需要借助 MATLAB 完成信号处理实验的初学者。报告系统记录了信号的产生和运算、连续时间信号的频域分析、信号的时域采样和重建、离散傅里叶变换与应用等核心实验,并延伸至连续时间系统的频域与复频域分析、数字滤波器设计及信号处理综合应用,覆盖从基本序列绘制到卷积运算、频谱分析的完整流程。资源包内含 1 个 docx 文档,压缩后约 1.02MB,文档中配有 MATLAB 程序示例、运行结果与图形分析,便于对照理解时域和频域特性。目前已有 952 人学习下载,适合作为实验预习、报告撰写参考与 DSP 入门练习的实操素材。

1. 信号分析与处理实验:一张从时域到频域再到滤波器的完整地图

如果你正在学信号与系统、数字信号处理,或者正在准备这门课的实验验收,大概率会有一种感觉:公式都认识,一上 MATLAB 就不知道从哪下手。这份实验报告覆盖了八个实验模块,从最基础的信号产生与运算,一路走到连续时间频域分析、时域采样与重建、离散傅里叶变换、系统频域与复频域分析、数字滤波器设计,最后落到综合应用。梳理下来会发现,它其实是一条非常清晰的主线:先学会“造信号”,再学会“看信号”,然后学会“采样与重建”,接着掌握“DFT 这个工具”,最后用“滤波器”把理论变成能用的系统。适合谁?适合正在做信号处理实验、准备实验考试、或者想用 MATLAB 把课本公式跑通一遍的人。这张地图的价值在于:它把零散的实验步骤串成了可复习的体系,而不是八个孤立的代码片段。

2. 信号产生与基本运算:从单位阶跃到线性卷积的复习重点

2.1 连续信号与离散序列的生成套路

实验一的核心是“用 MATLAB 把数学表达式变成可画的波形”。梳理下来会发现,所有序列生成都遵循同一个模式:先定义自变量范围,再定义参数,最后用向量化运算生成序列值。比如单位阶跃序列 u[n] 和 u[n+7] 的对比,本质上是在复习“移位”这个运算——u[n+7] 就是把 u[n] 向左移了 7 个点。代码里用zeros(1,10)和ones(1,20)拼接,实际上是在手动构造分段序列,这种写法在实验报告里很常见,但复习时要理解它背后的含义:序列在 n=-10 到 n=-1 取 0,n=0 到 n=20 取 1。

复指数序列 x[n]=1.5e^{(0.2+j3)n} 的实部和虚部分别绘制,这个实验点最容易忽略的是:复指数序列的实部是衰减振荡,虚部也是衰减振荡,但两者相位差 90 度。实指数序列 x[n]=2(0.8)^n 则是在复习“指数衰减”的基本形态。正弦序列 x[n]=2.5sin(0.16πn-π/2) 的基本周期计算是重点:数字频率 ω=0.16π,周期 N=2π/ω=12.5,但序列周期必须是整数,所以基本周期是 25。这里最容易翻车的地方是:很多人直接写 12.5,忽略了离散序列周期必须为整数的约束。

% 单位阶跃序列 u[n] 与 u[n+7] 的对比生成 n = -10:20; x = [zeros(1,10) 1 ones(1,20)]; % u[n]:n=0 处跳变 M = 7; xd = [zeros(1,10+M) 1 ones(1,20-M)]; % u[n+7]:左移7点 subplot(1,2,1); stem(n,x); xlabel('n'); ylabel('u[n]'); subplot(1,2,2); stem(n,xd); xlabel('n'); ylabel('u[n+7]');

这段代码的关键参数是zeros(1,10)对应 n=-10 到 n=-1 的 10 个点,ones(1,20)对应 n=0 到 n=20 的 21 个点。移位操作通过改变零填充的长度实现,左移 7 点就是在前面多补 7 个零,同时后面少 7 个一。复习时要能徒手写出这个拼接逻辑,而不是背代码。

2.2 序列运算与线性卷积的易错细节

序列的加法和乘法看起来简单,但实验里 x[n]={1,2,3,4} 和 y[n]={3,4,5,6} 的逐点乘,用的是.*而不是*。这是 MATLAB 里最容易踩的坑:矩阵乘法*和逐点乘法.*混用,结果完全不对。偶部与奇部的分解是另一个重点:偶部 xe[n]=0.5(x[n]+x[-n]),奇部 xo[n]=0.5(x[n]-x[-n])。实验里用fliplr(x)实现翻转,但要注意fliplr只翻转数值顺序,不改变时间轴索引,所以当 n 的范围不是以 0 为中心时,直接翻转会出错。正确的做法是先确认序列的时间轴关于原点对称,或者手动构造 x[-n]。

线性卷积 y[n]=x[n]*h[n] 是实验一的压轴。x[n]=(-1)^n 长度 15,h[n]=cos(0.25πn) 长度 8,卷积结果长度是 15+8-1=22。用conv(x,h)计算后,时间轴要重新定义为 0:21。这里最容易漏掉的是:卷积后的时间轴起点是两序列起点之和,终点是两序列终点之和。如果 x 和 h 的起点不是 0,时间轴计算会更复杂。复习时要记住公式:y 的长度 = N1+N2-1,y 的起点 = n1_start + n2_start。

提示:conv函数只返回数值向量,不返回时间轴。画图前必须手动构造正确的时间轴,否则波形位置会整体偏移。

3. 连续时间信号频域分析:傅里叶级数、吉布斯现象与语音频谱

3.1 周期矩形脉冲的频谱变化规律

实验二的核心是“从时域波形到频域谱线”。周期矩形脉冲信号的指数形式傅里叶级数,双边幅度谱和相位谱的绘制,重点在于理解频谱的离散性和谐波性。当 A=1,τ=0.1s,T=0.5s 时,谱线间隔是 1/T=2Hz,包络是 sinc 函数。修改 T 为 1s 和 2s 后,梳理下来会发现两个规律:第一,T 增大,谱线间隔变小,频谱变得更密集;第二,T 增大,各次谐波的幅度整体减小,因为能量被分散到了更多谐波上。这个对比是考试和实验验收的高频考点,很多人只记得“T 变大谱线变密”,却忘了幅度也在变小。

各次谐波叠加的实验(N=15,25,50)是在验证傅里叶级数的收敛性。N 较小时,合成波形有较大的谐波失真,边缘不够陡峭;N 增大,波形逐渐逼近矩形脉冲。但这里有一个反直觉的点:即使 N 很大,不连续点附近仍然存在过冲,这就是吉布斯现象。实验里用程序求出过冲最大幅值为 1.0896,约等于跳变幅度的 9%。这个数字要记住:吉布斯现象中,过冲量不随 N 增大而消失,而是趋于一个常数,大约是跳变幅度的 8.95%。

% 计算周期矩形脉冲有限项傅里叶级数合成的过冲 function p2_4(N) t = -2:10^(-4):2; A = 1; tau = 1; T = 2; Omega_0 = 2*pi/T; c0 = A*tau/T; f_N = c0*ones(1,length(t)); for k = 1:N f_N = f_N + 2*A*tau/T*sinc(k*Omega_0*tau/2/pi)*cos(k*Omega_0*t); end overshoot = max(f_N); fprintf('The maximum overshoot is %.4f\n', overshoot); end

这段代码的关键是sinc函数的参数写法:sinc(k*Omega_0*tau/2/pi)对应的是抽样函数 sin(x)/x 的形式。循环累加各次谐波,最后用max找过冲。复习时要能解释为什么过冲出现在不连续点附近,以及为什么 N 增大时过冲位置越来越靠近跳变点。

3.2 语音信号的频谱差异与男声转女声思路

实验二还包含一个非常实用的部分:录制男声和女声,做 FFT 后比较频谱。男声的基音频率低,波形振幅变化大,幅度谱能量集中在低频;女声基音频率高,波形更细致,幅度谱能量分布相对均匀。这个对比不仅是实验报告的内容,也是理解“基音频率”和“共振峰”概念的入口。男声转女声的方法,实验报告里列了五条:基频调整、声道长度调整、谐波调整、声道转换模型、声音特征转换。梳理下来会发现,最核心的是基频调整和声道长度调整,其他方法都是在这两个基础上的扩展。复习时要能说出:男声基频典型范围是 80-180Hz,女声是 160-300Hz,所以基频搬移是最直接的转换手段。

注意:语音频谱分析时,FFT 点数要足够大,否则频率分辨率不够,基音频率的谱峰可能分不开。通常取 1024 或 2048 点。

4. 时域采样与重建:奈奎斯特间隔、混叠判断与误差分析

4.1 采样定理的验证与混叠判断

实验三的核心是“采样间隔 Ts 如何影响频谱”。升余弦脉冲信号的频谱大部分集中在 [0, τ/2π] 之间,截止频率 Ωm=2,奈奎斯特间隔 Ts=π/2。当 Ts=π/2 时,采样后频谱未发生混叠;当 Ts=2 时,频谱发生了混叠。这个判断的逻辑是:采样后频谱是原频谱以 2π/Ts 为周期进行延拓,如果延拓后的频谱在相邻周期之间发生重叠,就是混叠。复习时要能画出频谱延拓的示意图,并解释为什么 Ts 越大,延拓周期越小,越容易混叠。

这里最容易翻车的地方是:很多人只记“Ts 小于奈奎斯特间隔就不混叠”,但实际判断时要看信号的最高频率分量,而不是只看信号的主瓣宽度。升余弦脉冲的频谱虽然大部分集中在 Ωm 以内,但理论上无限延伸,所以严格来说,只要 Ts 有限,总会有高频分量的混叠,只是混叠程度不同。实验里判断“未发生混叠”是指主瓣没有重叠,而不是绝对没有混叠。

4.2 信号重建与误差来源

信号重建的实验(P3_2)是用低通滤波器从采样信号中恢复原信号。当 Ts=2,低通滤波器截止频率 Ωc=Ωm 时,重建误差大大增加。误差来源有两个:第一,采样间隔增大导致混叠,高频分量折叠到低频,无法通过低通滤波器滤除;第二,低通滤波器截止频率减小,导致部分有效高频分量被滤除,表现为重建信号失真。这两个因素叠加,误差比 Ts=π/2 时大得多。

% 采样与重建的核心参数设置 Ts = 2; % 采样间隔,大于奈奎斯特间隔 pi/2 Wc = 2; % 低通滤波器截止频率,等于信号截止频率 t = 0:Ts:10; % 采样时间轴 x = cos(t); % 示例信号 % 重建:理想低通滤波在频域是截断,在时域是 sinc 插值 % 实际实验中用滤波器函数实现,误差通过与原信号对比计算

复习时要能解释:为什么 Ts 增大导致误差增大?因为混叠分量落在了重建滤波器的通带内,无法被滤除。为什么 Wc 减小也导致误差增大?因为部分有效信号分量被滤除了。这两个原因要分开说,不能混在一起。

提示:重建误差的计算通常用均方误差或最大绝对误差。实验报告里用的是波形对比,复习时要能写出误差公式。

5. 离散傅里叶变换与数字滤波器:从 DFT 到系统频域分析

5.1 DFT 的基本概念与 MATLAB 实现

离散傅里叶变换(DFT)是连接时域和频域的桥梁。实验四的核心是理解 DFT 的定义:X[k]=Σx[n]e^{-j2πkn/N},以及如何用 MATLAB 的fft函数计算。梳理下来会发现,DFT 的物理意义是:把有限长序列的频谱在 [0,2π] 上等间隔采样 N 个点。频率分辨率是 2π/N,所以 N 越大,频谱越精细。这里最容易忽略的是:DFT 隐含周期性,时域序列被周期延拓,频域也是离散周期谱。如果序列长度不是 N,需要补零到 N,补零不改变频谱形状,只是增加了采样密度。

数字滤波器的设计是实验四的另一个重点。不同类型的滤波器(低通、高通、带通、带阻)设计,核心是确定滤波器阶数和截止频率。MATLAB 里常用butter、cheby1、ellip等函数。复习时要能说出:巴特沃斯滤波器通带最平坦,切比雪夫滤波器过渡带更陡但有波纹,椭圆滤波器过渡带最陡但通带和阻带都有波纹。选择哪种取决于具体应用对幅频特性的要求。

5.2 连续时间系统的频域与复频域分析

连续时间系统的频域分析,核心是系统函数 H(jω) 和频率响应。复频域分析则是拉普拉斯变换,系统函数 H(s),极点决定稳定性。梳理下来会发现,频域分析和复频域分析的关系是:频域是复频域在 s=jω 时的特例。实验里用 MATLAB 画波特图,观察幅频和相频特性,重点看截止频率、谐振峰和相位变化。最容易错的地方是:把 H(jω) 和 H(s) 混为一谈,忘记 s=σ+jω 中的实部 σ 对应衰减因子。

数字滤波器的应用实验,通常是用设计好的滤波器对含噪信号进行滤波,然后比较滤波前后的频谱。复习时要能解释:为什么滤波器能去噪?因为噪声的频谱通常分布在高频,而信号的频谱集中在低频,低通滤波器可以保留信号、抑制噪声。但如果噪声和信号频谱重叠,滤波器就无能为力了。

注意:设计滤波器时,截止频率要归一化到奈奎斯特频率。MATLAB 里butter函数的 Wn 参数是归一化频率,1 对应奈奎斯特频率。

6. 查漏补缺:一份可执行的复习清单与避坑指南

复习到这一步,最怕的是“每个实验都看过,但合上书就串不起来”。我的做法是:拿一张白纸,不翻代码,先画出八个实验的模块关系图——信号产生是输入,频域分析是观察手段,采样是离散化桥梁,DFT 是计算工具,滤波器是输出系统。画不出来,就说明某个环节还是散的。

下面这份清单是我自己每次复习都会走一遍的流程,按顺序过,基本能覆盖实验验收和笔试的高频考点:

复习模块必须能徒手写出的内容常见翻车点
信号产生单位阶跃、复指数、实指数、正弦序列的生成代码框架时间轴与序列长度不匹配
序列运算加、乘、移位、偶奇分解、卷积的时间轴计算*与.*混用;卷积后时间轴起点算错
傅里叶级数周期矩形脉冲频谱随 T 变化的规律;吉布斯过冲约 9%忘记 T 增大时幅度也减小
语音频谱男声女声基频范围;男转女的核心方法只记方法名,说不出基频搬移的具体含义
采样定理奈奎斯特间隔计算;混叠判断逻辑把“主瓣不重叠”当成“绝对不混叠”
信号重建误差增大的两个原因:混叠和滤波器截止频率把两个原因混在一起说
DFT频率分辨率 2π/N;补零的作用忘记 DFT 隐含周期性
滤波器设计巴特沃斯、切比雪夫、椭圆滤波器的区别截止频率忘记归一化

最容易忽略的是“时间轴”这件事。实验一里所有序列运算,只要时间轴错了,波形位置就全错。我自己的血泪经验是:每次用conv或fliplr之后,强制检查一遍时间轴的起点和终点,确认长度匹配。另一个容易漏的是采样定理里的“截止频率”定义——升余弦脉冲的截止频率不是主瓣宽度,而是频谱包络第一次过零点的位置,这个在实验提示里写得很清楚,但复习时经常被跳过。

还有一个玄学问题:为什么 N 增大,吉布斯过冲不消失?因为傅里叶级数在跳变点处收敛到跳变幅度的中点,而不是跳变值本身。有限项合成时,跳变点附近的振荡幅度趋于常数,这个常数就是过冲量。理解这一点,就不会再纠结“为什么 N 不够大”。

从那以后我每次做信号处理实验,都强制走一遍“时间轴检查 → 参数归一化检查 → 频谱混叠判断”这三步,基本没再翻过车。希望这份梳理能帮到你。

本文还有配套的精品资源,点击获取