别再傻傻分不清!用Matlab代码实战解析频谱、幅度谱、相位谱和语谱图到底有啥区别

张开发
2026/4/20 10:22:53 15 分钟阅读

分享文章

别再傻傻分不清!用Matlab代码实战解析频谱、幅度谱、相位谱和语谱图到底有啥区别
语音信号处理实战用Matlab代码彻底搞懂频谱、幅度谱、相位谱与语谱图第一次接触语音信号处理时面对频谱、幅度谱、相位谱、功率谱、语谱图这些名词是不是感觉脑袋嗡嗡作响别担心这几乎是每个初学者的必经之路。今天我们就用Matlab代码通过同一个音频文件的处理直观展示这些谱的区别与联系。读完本文你将彻底明白它们各自的物理意义、计算方法和应用场景。1. 准备工作音频信号的基础认知在开始之前我们需要先理解音频信号在Matlab中的表示方式。一段音频信号在时域上就是一个实数向量其长度等于采样率乘以音频时长。例如采样率为8000Hz、时长15.6秒的音频在Matlab中就是一个124800维的向量。读取音频文件是第一步Matlab提供了多种方法% 读取.wav文件 [x, fs] audioread(test_audio.wav); % 读取.pcm文件 fid fopen(test_audio.pcm, r); x_pcm fread(fid, inf, int16); fclose(fid);这里有几个关键参数需要注意x: 音频信号数据fs: 采样率(Hz)x_pcm: PCM格式的音频数据提示建议使用.wav格式文件因为它自带采样率信息而.pcm文件需要额外指定采样率。2. 频谱分析从时域到频域的转换2.1 傅里叶变换基础傅里叶变换是将信号从时域转换到频域的核心工具。在Matlab中我们使用fft函数实现快速傅里叶变换(FFT)% 对音频信号进行傅里叶变换 X fft(x);FFT的结果是一个复数向量包含了两部分信息实部信号的余弦分量虚部信号的正弦分量这个复数向量就是我们所说的频谱它完整描述了信号在频域的特性。2.2 幅度谱信号能量的频率分布幅度谱展示的是信号中各频率成分的强度大小。计算方法是取FFT结果的模% 计算幅度谱 X_mag abs(X); % 绘制单边幅度谱 N length(x); f (0:N-1)*fs/N; % 频率轴 plot(f(1:N/2), X_mag(1:N/2)); xlabel(频率 (Hz)); ylabel(幅度); title(幅度谱);幅度谱的特点横轴频率(Hz)纵轴信号在该频率上的幅度对称性对于实数信号幅度谱关于Nyquist频率(fs/2)对称2.3 相位谱信号成分的时间关系相位谱记录了各频率成分的相位信息这对信号重建至关重要% 计算相位谱(弧度) X_phase angle(X); % 转换为角度并绘制 X_phase_deg X_phase * 180/pi; plot(f(1:N/2), X_phase_deg(1:N/2)); xlabel(频率 (Hz)); ylabel(相位 (度)); title(相位谱);相位谱的关键点描述了各频率成分的起始相位对语音信号的可懂度有重要影响在信号处理中常被忽视但重建信号时必不可少3. 功率谱与语谱图进阶分析工具3.1 功率谱能量视角的频域分析功率谱是幅度谱的平方表示信号功率在频域的分布% 计算功率谱 X_power X_mag.^2; % 绘制功率谱 plot(f(1:N/2), X_power(1:N/2)); xlabel(频率 (Hz)); ylabel(功率); title(功率谱);功率谱的特点物理意义更明确表示信号在各频率上的功率常用于噪声分析、系统辨识等领域与幅度谱相比更能突出主导频率成分3.2 语谱图时频联合分析语谱图是语音信号处理中最直观的工具之一它同时展示了信号在时间和频率上的能量分布% 语谱图参数设置 wlen 256; % 帧长 inc 32; % 帧移 win hamming(wlen); % 窗函数 % 分帧处理 y buffer(x, wlen, wlen-inc, nodelay); % 计算语谱图 Y fft(y); P abs(Y(1:wlen/21, :)).^2; % 功率谱 % 绘制语谱图 imagesc([0 length(x)/fs], [0 fs/2], 10*log10(P)); axis xy; colormap(jet); xlabel(时间 (s)); ylabel(频率 (Hz)); title(语谱图); colorbar;语谱图的解读要点横轴时间纵轴频率颜色深浅信号能量大小可以清晰看到共振峰、基频等语音特征4. 关键区别与典型应用场景现在我们已经了解了各种谱的计算方法下面通过表格对比它们的主要区别谱类型横轴纵轴信息内容主要应用场景频谱频率复数完整频域信息理论分析, 信号重建幅度谱频率幅度各频率成分强度频率成分分析, 滤波器设计相位谱频率相位各频率成分相位信号合成, 声源定位功率谱频率功率能量分布噪声分析, 系统辨识语谱图时间频率时频能量分布语音分析, 事件检测4.1 如何选择合适的分析工具根据不同的分析需求应该选择适当的谱分析方法只想看主要频率成分幅度谱或功率谱需要重建信号必须同时使用幅度谱和相位谱分析信号随时间变化语谱图比较不同信号的相似性频谱或功率谱4.2 实际案例分析让我们用一个实际语音信号(ah元音)来观察各种谱的表现% 录制或读取一个ah元音 [x, fs] audioread(vowel_ah.wav); % 计算各种谱 X fft(x); X_mag abs(X); X_phase angle(X); X_power X_mag.^2; % 绘制结果 figure; subplot(2,2,1); plot(...); title(幅度谱); subplot(2,2,2); plot(...); title(相位谱); subplot(2,2,3); plot(...); title(功率谱); subplot(2,2,4); % 语谱图通过对比可以发现幅度谱清晰显示共振峰频率相位谱呈现规律性变化功率谱更突出共振峰能量语谱图展示发音过程中的频率变化5. 常见问题与实用技巧5.1 频谱泄露与窗函数选择直接进行FFT会产生频谱泄露解决方法是在FFT前加窗% 加窗处理 win hamming(N); % 汉明窗 x_win x .* win; X_win fft(x_win);常用窗函数比较窗函数主瓣宽度旁瓣衰减适用场景矩形窗窄差暂态信号汉宁窗中等好一般分析汉明窗中等很好语音分析平顶窗宽优秀幅值测量5.2 频率分辨率与补零技巧频率分辨率Δffs/N。要提高分辨率可以增加采样点数N或者使用补零% 补零到原长度的4倍 N_fft 4*N; X_zpad fft(x, N_fft);注意补零不能提高真实频率分辨率但可以使频谱看起来更平滑。5.3 语谱图参数优化语谱图的效果很大程度上取决于参数选择帧长决定频率分辨率长帧频率分辨率高时间分辨率低短帧时间分辨率高频率分辨率低帧移通常为帧长的1/4到1/2窗函数汉明窗是最常用选择在实际项目中我发现帧长256-512点(对于8kHz采样率)、帧移64-128点通常能取得不错的效果。对于音乐信号分析可能需要更长的帧长来获得足够的频率分辨率。

更多文章