用MATLAB绘制语音信号的频谱图和相位图
时间: 2023-06-25 13:02:16 浏览: 250
MATLAB绘制音频波形及频谱
要绘制语音信号的频谱图和相位图,需要进行以下步骤:
1. 读取语音信号,使用MATLAB中的`audioread`函数。
```matlab
[x, Fs] = audioread('filename.wav');
```
其中,`x`是语音信号的时间序列,`Fs`是采样率。
2. 对语音信号进行短时傅里叶变换(Short-Time Fourier Transform,STFT),得到频谱图和相位图。
```matlab
window = hamming(256); % 窗函数
noverlap = 128; % 重叠长度
nfft = 512; % FFT长度
[S, F, T] = spectrogram(x, window, noverlap, nfft, Fs);
A = abs(S); % 频谱幅度
P = angle(S); % 频谱相位
```
其中,`window`是窗函数,`noverlap`是重叠长度,`nfft`是FFT长度,`S`是STFT结果,`F`是频率向量,`T`是时间向量,`A`是频谱幅度,`P`是频谱相位。
3. 绘制频谱图。
```matlab
imagesc(T, F, 20*log10(A));
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
colorbar;
```
其中,`imagesc`函数用于绘制热力图,`axis xy`用于设置坐标轴方向,`xlabel`和`ylabel`用于设置坐标轴标签,`colorbar`用于添加颜色条。
4. 绘制相位图。
```matlab
imagesc(T, F, P);
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
colorbar;
```
与绘制频谱图类似,只是将`20*log10(A)`改为`P`即可。
完整代码如下:
```matlab
[x, Fs] = audioread('filename.wav');
window = hamming(256);
noverlap = 128;
nfft = 512;
[S, F, T] = spectrogram(x, window, noverlap, nfft, Fs);
A = abs(S);
P = angle(S);
subplot(2, 1, 1);
imagesc(T, F, 20*log10(A));
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
colorbar;
subplot(2, 1, 2);
imagesc(T, F, P);
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
colorbar;
```
阅读全文