一、引言:信号处理与 MATLAB 的 “实战结合”
- 信号处理的工程价值:在通信、音频、雷达、医疗等领域的核心应用(如降噪、特征提取)
- MATLAB 为何是信号处理利器:Signal Processing Toolbox 工具优势、可视化能力、代码高效性
- 本文实战导向:聚焦 “滤波、傅里叶变换、频谱分析” 三大核心任务,从理论简化到代码落地,适合有 MATLAB 基础的信号处理入门者
二、信号处理基础:从 “信号认知” 到 “MATLAB 工具准备”
- 信号的核心概念(实战必要铺垫)
- 时域与频域:信号的两种基本描述维度(以 “正弦信号” 为例:时域看振幅随时间变化,频域看频率分量)
- 关键参数:采样频率(fs)、采样点数(N)、信噪比(SNR)的物理意义及对后续处理的影响
- MATLAB 信号处理基础操作
- 常用信号生成:用 sin cos 生成单频信号,randn 生成噪声信号,square sawtooth 生成周期信号(附示例代码:生成含噪声的复合信号 s = 2*sin(2*pi*50*t) + sin(2*pi*120*t) + 0.5*randn(size(t)))
- 信号时域查看:plot 函数绘制时域波形,subplot 对比多信号,xlabel 标注时间轴(含采样时间 t = 0:1/fs:1 的计算逻辑)
- 信号处理工具箱调用:help signal 快速查询工具函数,工作区查看信号数据类型(确保数值型适配后续运算)
三、傅里叶变换:从 “时域到频域” 的 MATLAB 实现
- 傅里叶变换核心意义(简化理论,聚焦应用)
- 核心作用:将时域复杂信号分解为不同频率的正弦分量(用 “音乐信号” 类比:时域是波形,频域是不同音符的组合)
- 离散傅里叶变换(DFT)与 FFT:FFT 是 DFT 的高效算法,MATLAB 中用 fft 函数实现,需明确 “采样频率与频率分辨率” 的关系(f = (0:N-1)*(fs/N) 频率轴计算逻辑)
- MATLAB 中 FFT 实战步骤
- 步骤 1:信号预处理 —— 确保信号长度(补零或截断),示例:对长度为 1000 的信号用 fft(x, 2048) 补零至 2048 点提升分辨率
- 步骤 2:调用 fft 与结果处理 ——X = fft(x) 得到复数频谱,计算幅度谱 abs(X)、相位谱 angle(X),并做幅度归一化(除以信号长度 N)
- 步骤 3:绘制单边频谱 —— 通过 f = fs*(0:(N/2))/N 截取正频率部分,避免双边频谱冗余(附代码:plot(f, 2*abs(X(1:N/2+1))) 及原理说明)
- 实战案例:复合正弦信号的傅里叶变换
- 任务:对 “2Hz + 5Hz 正弦信号” 做 FFT,验证频域是否准确分离频率分量
- 代码与解读:含信号生成、FFT 调用、频谱绘图完整代码,标注 “频谱峰值对应 2Hz 和 5Hz” 的结果验证
四、频谱分析:从 “频谱图” 到 “信号特征提取”
- 频谱分析的核心流程
- 预处理:去直流分量(x = x - mean(x))、加窗抑制频谱泄露(常用汉宁窗 w = hann(N); x_win = x.*w,对比加窗前后频谱差异)
- 关键指标提取:主频(频谱峰值对应的频率)、带宽(峰值半功率点的频率范围)、谐波分量识别
- MATLAB 频谱分析工具实操
- 命令行实现:基于 fft 自定义分析脚本(如计算信号主频 [max_amp, idx] = max(abs(X)); main_freq = f(idx))
- 可视化工具:Signal Analyzer 应用 —— 导入信号后一键生成频谱,交互式查看峰值频率,调整分析参数(采样频率、窗函数)
- 实战案例:含噪声信号的频谱分析
- 任务:从 “含高斯噪声的语音信号片段” 中提取基音频率
- 步骤:加载信号([x, fs] = audioread('voice.wav'))、做频谱分析、通过频谱峰值定位主要频率分量,对比无噪声信号验证准确性
五、滤波技术:从 “滤波器设计” 到 “噪声去除实战”
- 滤波基础与滤波器分类
- 核心目的:保留目标信号(如 50Hz 正弦波),去除噪声或干扰(如 200Hz 杂波)
- 常见类型:低通(保留低频)、高通(保留高频)、带通(保留特定频段)、带阻(去除特定频段),结合应用场景说明(如音频降噪用低通,心电信号去工频干扰用带阻)
- MATLAB 滤波器设计与实现
- 设计步骤(以 FIR 低通滤波器为例):
- 确定指标:截止频率(如 100Hz)、过渡带宽(如 20Hz)、阻带衰减(如 40dB)
- 工具调用:用 fdesign.lowpass 定义指标,design 函数生成滤波器系数(hd = design(fd, 'firwin', 'Window', 'hann'))
- 验证:用 freqz(hd) 绘制滤波器幅频响应,检查是否满足指标
- 滤波实现:用 filter 函数对信号滤波(y = filter(hd, x)),对比滤波前后时域波形与频谱
- 实战案例:带噪声信号的滤波去噪
- 任务:对 “含 150Hz 干扰的 50Hz 正弦信号” 设计带阻滤波器去除干扰
- 完整流程:设计带阻滤波器(中心频率 150Hz)、滤波处理、对比滤波前后信号的时域波形(噪声减弱)与频谱(150Hz 分量消失)
六、综合实战:语音信号的 “滤波 - 傅里叶变换 - 频谱分析” 全流程
- 案例目标:对一段含高频噪声的语音信号进行处理,提取清晰语音并分析其频谱特征
- 步骤拆解与代码实现
- 步骤 1:信号获取与查看 —— 用 audioread 加载语音信号,sound 播放原始信号,plot 绘制时域波形(观察噪声波动)
- 步骤 2:频谱分析 —— 用 FFT 做频域分析,定位噪声主要频率(如 3kHz 以上高频)
- 步骤 3:滤波设计 —— 根据噪声频率设计低通滤波器(截止频率 3kHz),用 filter 滤波
- 步骤 4:结果验证 —— 播放滤波后信号,对比滤波前后频谱(高频噪声分量消失),计算信噪比提升值
- 代码整合与关键注释:提供全流程可运行代码,标注 “滤波器指标设置”“FFT 参数调整” 等关键实操要点
七、总结与进阶方向
- 实战核心要点回顾:FFT 实现的频率轴计算、频谱分析的加窗技巧、滤波器设计的指标匹配
- 常见实操问题解决:频谱泄露的处理(加窗类型选择)、滤波后信号失真(滤波器过渡带宽调整)
- 进阶学习路径:
- 高级变换:短时傅里叶变换(STFT)在非平稳信号中的应用(MATLAB stft 函数)
- 工具深化:Signal Processing Toolbox 中滤波器设计工具(Filter Designer App)的图形化操作
- 工程拓展:结合通信系统(如 AM 信号解调)、振动分析(设备故障诊断的频谱特征提取)