基于matlab2018,语音信号加汉明窗和矩形窗之后的时域图显示,并且要规避出现数组超过预设组大数组大小,同时修改左侧与右侧元素数目不同导致无法赋值的现象,同时解决上述程序第三十一行的左右元素不对称无法赋值的问题
时间: 2024-03-19 10:43:33 浏览: 38
以下是基于 MATLAB 2018 的语音信号加汉明窗和矩形窗之后的时域图显示的代码,同时解决了数组超过预设组大数组大小和左右元素不对称无法赋值的问题:
```matlab
% 读入原始语音信号
[x, fs] = audioread('test.wav');
% 设置窗口长度和重叠部分长度
win_len = 256;
overlap_len = win_len / 2;
% 生成汉明窗和矩形窗
ham_win = hamming(win_len);
rect_win = ones(win_len, 1);
% 对语音信号进行矩形窗加窗处理
x_rect = buffer(x, win_len, overlap_len, 'nodelay');
[n_samples, n_frames] = size(x_rect);
x_rect_win = zeros(size(x_rect));
for i = 1:n_frames
x_rect_win(:, i) = x_rect(:, i) .* rect_win;
end
x_rect_win = x_rect_win(:);
% 对语音信号进行汉明窗加窗处理
x_ham_win = zeros(size(x_rect_win));
for i = 1:n_frames
x_ham_win((i-1)*overlap_len+1:(i-1)*overlap_len+win_len) = ...
x_ham_win((i-1)*overlap_len+1:(i-1)*overlap_len+win_len) + ...
x_rect(:, i) .* ham_win;
end
% 显示矩形窗和汉明窗加窗后的时域图
subplot(2,1,1);
plot(x_rect_win);
title('Rectangular window');
subplot(2,1,2);
plot(x_ham_win);
title('Hamming window');
```
在上述代码中,使用了 `buffer` 函数将语音信号分帧,并通过循环将窗口加到每一帧上。同时,使用 `subplot` 函数将矩形窗和汉明窗加窗后的时域图显示在同一张图中,方便对比。
需要注意的是,如果窗口长度设置过大,会导致数组超过预设组大数组大小的问题。因此,需要根据具体信号的采样率和所需频率分辨率等因素进行选择。另外,如果左侧与右侧元素数目不同,也会导致无法赋值的问题。在代码中,使用了 `zeros` 函数初始化了 `x_ham_win` 变量,从而解决了这个问题。
阅读全文