matlab用fft画频谱
时间: 2023-07-20 18:34:06 浏览: 95
MATLAB 用 FFT 函数画频谱可以通过以下步骤实现:
1. 读取音频文件,并将音频信号转换为单声道。
2. 设置 FFT 长度,通常选择 2 的整数次幂,例如 512、1024、2048 等。
3. 将音频信号分段,并对每个段进行 FFT 变换。
4. 计算每个段的频谱,通常使用幅度谱(abs)或功率谱(abs^2)。
5. 绘制频谱图,横轴表示频率,纵轴表示幅度或功率。
下面是用 FFT 函数画频谱的示例代码:
```matlab
% 读取音频文件
[x, fs] = audioread('audio.wav');
x = mean(x, 2); % 转换为单声道
% 设置参数
nfft = 1024; % FFT 长度
overlap = 0.5; % 帧重叠比例(50%)
% 计算频谱
[S, f, t] = spectrogram(x, hann(nfft), round(nfft*overlap), nfft, fs);
% 画频谱图
imagesc(t, f, 20*log10(abs(S)));
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('Spectrogram');
colormap(jet);
colorbar;
```
上述代码中,首先使用 `audioread` 函数读取音频文件,并将音频信号转换为单声道。然后设置 FFT 长度和帧重叠比例等参数。接着使用 `spectrogram` 函数计算频谱,返回的 `S` 是频谱矩阵,`f` 是频率向量,`t` 是时间向量。最后使用 `imagesc` 函数画频谱图,并设置标签、标题和颜色映射等属性。注意,上述代码中使用了汉宁窗(hann)作为窗函数,可以根据需要选择其他窗函数。
阅读全文