matlab语音信号时域波形图,加矩形窗和汉明窗后计算短时自相关归一化的结果
时间: 2023-11-29 22:19:34 浏览: 253
要计算语音信号的短时自相关归一化结果,需要先将语音信号分帧,并在每一帧上应用矩形窗或汉明窗。
假设你的语音信号为y,采样率为fs,时长为T,你想要使用256个采样点(即帧长为256个采样点)进行分帧,每帧之间重叠128个采样点,然后在每一帧上使用矩形窗或汉明窗,计算短时自相关归一化结果,则代码如下:
```
% 设置分帧参数
frame_length = 256; % 帧长
frame_step = 128; % 帧移
% 分帧
frames = buffer(y, frame_length, frame_length-frame_step);
% 应用窗函数
hamming_window = hamming(frame_length); % 汉明窗
rect_window = rectwin(frame_length); % 矩形窗
hamming_frames = bsxfun(@times, frames, hamming_window');
rect_frames = bsxfun(@times, frames, rect_window');
% 计算短时自相关归一化结果
hamming_autocorrs = xcorr(hamming_frames, frame_length-1, 'coeff');
rect_autocorrs = xcorr(rect_frames, frame_length-1, 'coeff');
% 取一半的自相关系数
hamming_autocorrs = hamming_autocorrs(:, frame_length:end);
rect_autocorrs = rect_autocorrs(:, frame_length:end);
% 绘制结果
figure;
subplot(2,1,1);
imagesc(hamming_autocorrs);
title('Hamming Window');
xlabel('Lag (samples)');
ylabel('Frame Index');
colorbar;
subplot(2,1,2);
imagesc(rect_autocorrs);
title('Rectangular Window');
xlabel('Lag (samples)');
ylabel('Frame Index');
colorbar;
```
其中,buffer函数用于分帧,hamming函数和rectwin函数用于生成汉明窗和矩形窗,bsxfun函数用于在每一帧上应用窗函数,xcorr函数用于计算短时自相关系数,imagesc函数用于绘制结果。
注意,在计算自相关系数时,需要将结果归一化,使用'coeff'选项即可实现。另外,为了避免边界效应,需要在结果中只取一半的自相关系数,即从帧长开始的位置开始截取。最后,我们将结果绘制成图像,横轴是自相关系数的滞后(即时间延迟),纵轴是帧的索引。
阅读全文