根据给出的浊音信号,分别画出浊音信号的时域波形、加矩形窗和加汉明窗后计算短时自相关归一化后的结果。语音的抽样频率为8kHz,窗长为320。
时间: 2024-03-13 08:45:40 浏览: 136
好的,根据您的要求,我来逐步解释一下如何画出浊音信号的时域波形、加矩形窗和加汉明窗后计算短时自相关归一化后的结果。
1. 读取浊音信号
首先,我们需要读取浊音信号,假设该信号的文件名为"voiced.wav",可以使用MATLAB自带的audioread函数读取:
```
[x, Fs] = audioread('voiced.wav');
```
其中,x是浊音信号,Fs是抽样频率。
2. 画出浊音信号的时域波形
可以使用MATLAB的plot函数画出浊音信号的时域波形:
```
t = (0:length(x)-1)/Fs; % 时间轴
plot(t, x); xlabel('时间/s'); ylabel('幅度');
```
3. 加矩形窗
加矩形窗可以使信号在帧内平滑过渡,避免产生频谱泄露。可以使用MATLAB的rectwin函数生成矩形窗:
```
win = rectwin(320);
```
其中,320是窗长。
4. 加汉明窗
加汉明窗也是为了平滑过渡,同时还能减小帧边缘的振荡。可以使用MATLAB的hamming函数生成汉明窗:
```
win = hamming(320);
```
5. 分帧并进行短时自相关归一化
接下来,我们需要将信号分成若干帧,并在每一帧上计算短时自相关函数并归一化。可以使用MATLAB的buffer函数分帧,使用xcorr函数计算自相关函数,使用norm函数归一化:
```
frameLen = 320; % 帧长
frameShift = 160; % 帧移
frames = buffer(x, frameLen, frameLen-frameShift, 'nodelay'); % 分帧
frames = frames .* repmat(win, 1, size(frames,2)); % 加窗
acf = zeros(frameLen*2-1, size(frames,2)); % 自相关函数
for i = 1:size(frames,2)
acf(:,i) = xcorr(frames(:,i), 'biased');
acf(:,i) = acf(:,i) ./ norm(frames(:,i))^2;
end
```
其中,acf是自相关函数矩阵,每一列是一帧的自相关函数。
6. 可视化
可以使用MATLAB的subplot函数将时域波形、加矩形窗和加汉明窗后计算短时自相关归一化后的结果可视化:
```
subplot(2,2,1); plot(t, x); xlabel('时间/s'); ylabel('幅度'); title('时域波形');
subplot(2,2,2); plot(win); xlabel('样本序号'); ylabel('窗函数值'); title('加窗');
subplot(2,2,3); imagesc(acf); xlabel('帧序号'); ylabel('延迟'); title('自相关归一化');
```
这样就可以画出浊音信号的时域波形、加矩形窗和加汉明窗后计算短时自相关归一化后的结果了。需要注意的是,由于我们使用的是8kHz的抽样频率,所以每一帧的长度应该是320而不是256。
阅读全文