matlab求语音信号的频谱、幅值、相位
时间: 2023-06-19 07:07:44 浏览: 105
可以使用MATLAB中的fft函数来求语音信号的频谱、幅值、相位。
先读入语音信号,例如:
```matlab
[y, fs] = audioread('speech.wav');
```
其中,y为语音信号的波形数据,fs为采样率。
然后可以对语音信号进行短时傅里叶变换(STFT)来得到频谱,代码如下:
```matlab
win = hamming(256); % 窗函数
nfft = 512; % fft点数
noverlap = 128; % 窗口重叠
[S, F, T] = spectrogram(y, win, noverlap, nfft, fs);
```
其中,S为频谱,F为频率向量,T为时间向量。
接下来可以将频谱转换为幅值和相位,代码如下:
```matlab
A = abs(S); % 幅值
P = angle(S); % 相位
```
最后可以画出频谱图、幅值图和相位图,代码如下:
```matlab
% 频谱图
imagesc(T, F, 20*log10(abs(S)));
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
colorbar;
title('Spectrogram');
% 幅值图
plot(F, A);
xlabel('Frequency (Hz)');
ylabel('Amplitude');
title('Amplitude Spectrum');
% 相位图
plot(F, P);
xlabel('Frequency (Hz)');
ylabel('Phase (rad)');
title('Phase Spectrum');
```
其中,20*log10(abs(S))是为了将频谱转换为分贝单位的幅度。
阅读全文