对WHUT_10k 及 we 语音按宽带(帧长15ms)和 窄带(帧长40ms),hamming 窗,帧移50%,分别画出相应的LPC语谱图(帧移占帧长50%)。作为比较,同时给出对应的基于短时FFT的语谱图
时间: 2024-03-21 08:39:54 浏览: 109
语音信号的短时分析,包括:分帧、短时能量、短时平均幅度、短时过零率、短时自相关函数、短时幅差、倒谱等
5星 · 资源好评率100%
好的,下面是 MATLAB 代码实现。首先,我们需要读取音频文件,并将其分帧。这里使用的是 Hamming 窗:
```matlab
% 读取音频文件
[x, fs] = audioread('WHUT_10k.wav');
% [x, fs] = audioread('we.wav');
% 确定分帧参数
frame_length_wide = 15e-3; % 宽带帧长15ms
frame_length_narrow = 40e-3; % 窄带帧长40ms
frame_shift_wide = frame_length_wide/2; % 宽带帧移占帧长50%
frame_shift_narrow = frame_length_narrow/2; % 窄带帧移占帧长50%
frame_size_wide = round(frame_length_wide*fs);
frame_size_narrow = round(frame_length_narrow*fs);
frame_shift_size_wide = round(frame_shift_wide*fs);
frame_shift_size_narrow = round(frame_shift_narrow*fs);
% 分帧
wide_frames = buffer(x, frame_size_wide, frame_size_wide-frame_shift_size_wide, 'nodelay');
narrow_frames = buffer(x, frame_size_narrow, frame_size_narrow-frame_shift_size_narrow, 'nodelay');
```
然后,我们可以计算 LPC 系数和 LPC 谱图。这里使用的是 Hamming 窗:
```matlab
% 宽带LPC谱图
for i = 1:size(wide_frames, 2)
% 计算LPC系数
a = lpc(wide_frames(:, i), 12);
% 计算LPC谱图
[h, w] = freqz(1, a, frame_size_wide, fs);
wide_lpc_spectrum(:, i) = 20*log10(abs(h));
end
% 窄带LPC谱图
for i = 1:size(narrow_frames, 2)
% 计算LPC系数
a = lpc(narrow_frames(:, i), 12);
% 计算LPC谱图
[h, w] = freqz(1, a, frame_size_narrow, fs);
narrow_lpc_spectrum(:, i) = 20*log10(abs(h));
end
```
接下来,我们可以计算基于短时 FFT 的语谱图:
```matlab
% 宽带短时FFT谱图
wide_stft = spectrogram(x, hann(frame_size_wide), frame_size_wide-frame_shift_size_wide, frame_size_wide, fs);
wide_stft_spectrum = 20*log10(abs(wide_stft));
% 窄带短时FFT谱图
narrow_stft = spectrogram(x, hann(frame_size_narrow), frame_size_narrow-frame_shift_size_narrow, frame_size_narrow, fs);
narrow_stft_spectrum = 20*log10(abs(narrow_stft));
```
最后,我们可以画出 LPC 谱图和基于短时 FFT 的语谱图:
```matlab
% 画图
subplot(2, 2, 1)
imagesc(wide_lpc_spectrum)
set(gca, 'YDir', 'normal')
xlabel('Frame')
ylabel('Frequency (Hz)')
title('Wideband LPC spectrum')
subplot(2, 2, 2)
imagesc(narrow_lpc_spectrum)
set(gca, 'YDir', 'normal')
xlabel('Frame')
ylabel('Frequency (Hz)')
title('Narrowband LPC spectrum')
subplot(2, 2, 3)
imagesc(wide_stft_spectrum)
set(gca, 'YDir', 'normal')
xlabel('Frame')
ylabel('Frequency (Hz)')
title('Wideband STFT spectrum')
subplot(2, 2, 4)
imagesc(narrow_stft_spectrum)
set(gca, 'YDir', 'normal')
xlabel('Frame')
ylabel('Frequency (Hz)')
title('Narrowband STFT spectrum')
```
该代码将绘制出宽带和窄带 LPC 谱图,以及对应的基于短时 FFT 的语谱图。
阅读全文