基于matlab2018,语音信号加汉明窗和矩形窗之后的时域图显示,并且要规避出现数组超过预设组大数组大小,同时修改左侧与右侧元素数目不同导致无法赋值的现象,同时解决输入不是一个向量的问题
时间: 2024-03-19 09:43:40 浏览: 60
以下是针对基于 MATLAB 2018 的语音信号加汉明窗和矩形窗之后的时域图显示,同时解决了数组超过预设组大数组大小、左侧与右侧元素数目不同导致无法赋值、输入不是一个向量的问题的代码:
```matlab
% 读取语音信号
[x, fs] = audioread('test.wav');
% 矩形窗和汉明窗的长度
win_len = 256;
% 重叠部分长度
overlap_len = win_len / 2;
% 生成矩形窗和汉明窗
rect_win = ones(win_len, 1);
ham_win = hamming(win_len);
% 将语音信号分帧
x_frame = buffer(x, win_len, overlap_len, 'nodelay');
% 帧数和样本数
[n_samples, n_frames] = size(x_frame);
% 初始化加窗后的语音信号
x_rect_win = zeros(n_samples * n_frames, 1);
x_ham_win = zeros(n_samples * n_frames, 1);
% 对每一帧进行窗函数加窗
for i = 1:n_frames
% 矩形窗加窗
x_rect_win((i-1)*overlap_len+1:(i-1)*overlap_len+win_len) = ...
x_frame(:, i) .* rect_win;
% 汉明窗加窗
x_ham_win((i-1)*overlap_len+1:(i-1)*overlap_len+win_len) = ...
x_frame(:, 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` 函数将语音信号分帧,并通过循环将窗口加到每一帧上。为了规避左侧与右侧元素数目不同导致无法赋值的问题,使用了 `zeros` 函数初始化了 `x_rect_win` 和 `x_ham_win` 变量,从而保证两边元素数目相同。另外,使用了 `size` 函数获取帧数和样本数,并使用 `ones` 函数和 `hamming` 函数生成了矩形窗和汉明窗。
需要注意的是,输入不是一个向量的问题,可以通过在读取语音信号时使用 `audioread` 函数,获取到的是一个列向量,从而避免了这个问题。
阅读全文