% 输入人的语音信号 [y, Fs] = audioread('speech.wav'); % 设定自相关函数的最大延迟值 max_delay = round(0.02*Fs); % 计算自相关函数 r = xcorr(y, max_delay, 'coeff'); % 找到第一个峰值 [max_val, max_idx] = max(r); p = max_idx; % 计算基音频率 f0 = Fs/p;完善这个代码,使其绘制出基音频率曲线
时间: 2024-02-28 14:55:02 浏览: 123
随机信号及其自相关函数和功率谱密度的MATLAB实现
4星 · 用户满意度95%
以下是在计算出基音频率之后,绘制基音频率曲线的Matlab代码:
```matlab
% 定义帧长和帧移
frame_len = round(0.03*Fs);
frame_shift = round(0.01*Fs);
% 对语音信号进行分帧
num_frames = floor((length(y)-frame_len)/frame_shift)+1;
frames = zeros(frame_len, num_frames);
for i = 1:num_frames
idx = (i-1)*frame_shift+1;
frames(:,i) = y(idx:idx+frame_len-1);
end
% 计算每一帧的基音频率
f0 = zeros(num_frames, 1);
for i = 1:num_frames
r = xcorr(frames(:,i), max_delay, 'coeff');
[max_val, max_idx] = max(r);
p = max_idx;
f0(i) = Fs/p;
end
% 绘制基音频率曲线
t = (0:num_frames-1)*frame_shift/Fs;
figure;
plot(t, f0);
xlabel('Time (s)');
ylabel('Fundamental Frequency (Hz)');
```
在上述代码中,我们首先定义帧长和帧移,并对语音信号进行分帧。然后,计算每一帧的基音频率,并存储在`f0`数组中。最后,通过绘制基音频率随时间的变化曲线,展示基音频率的变化情况。
阅读全文