根据给出的浊音语音,画出它分别加矩形窗和汉明窗的时域波形和短时频谱。写出实验步骤
时间: 2024-03-19 13:42:25 浏览: 59
实验步骤如下:
1. 准备浊音语音数据,可以使用录音设备录制或者从已有的语音库中获取。
2. 对语音数据进行预处理,包括去除静音段、去除噪声等。
3. 对预处理后的语音数据进行分帧,一般采用长度为20-30ms的帧长,帧与帧之间有50%的重叠。
4. 对每一帧的语音信号进行加窗,可以使用矩形窗或者汉明窗。矩形窗的形式为w(n)=1,汉明窗的形式为w(n)=0.54-0.46cos(2πn/N-1),其中N为窗长。
5. 对加窗后的语音信号进行傅里叶变换,得到每一帧的短时频谱。
6. 可以使用Matlab等软件对每一帧的时域波形和短时频谱进行绘制,观察加窗和不加窗的效果。
注意事项:
1. 浊音是一种特殊的声音,需要特别注意语音数据的预处理和分帧方式。
2. 加窗的目的是为了减少频谱泄露现象,提高频谱分辨率。
3. 绘制时域波形和短时频谱时,需要注意坐标轴的标尺和刻度,保证图像的准确性和可读性。
相关问题
根据给出的浊音语音,写出它分别加矩形窗和汉明窗的时域波形和短时频谱的matlab代码。 2、根据给出的清音语音,写出它分别加矩形窗和汉明窗的时域波形和短时频谱matlab代码
好的,以下是针对浊音语音和清音语音分别加矩形窗和汉明窗的时域波形和短时频谱的MATLAB代码:
浊音语音:
```matlab
% 加载语音信号
[x,fs] = audioread('voice.wav');
% 设置窗口大小及重叠长度
winlen = 0.025; % 窗口大小
winshift = 0.01; % 重叠长度
% 计算窗口长度和重叠长度的样点数
nwinlen = round(winlen*fs); % 窗口长度(样点数)
nwinshift = round(winshift*fs); % 重叠长度(样点数)
% 分帧加窗
nx = length(x);
nframe = floor((nx-nwinlen)/nwinshift)+1; % 帧数
w = rectwin(nwinlen); % 矩形窗
win = repmat(w, 1, nframe); % 窗矩阵
x_seg_rect = x(1:nwinlen+(nframe-1)*nwinshift) .* win; % 分帧加窗(矩形窗)
w = hamming(nwinlen); % 汉明窗
win = repmat(w, 1, nframe); % 窗矩阵
x_seg_ham = x(1:nwinlen+(nframe-1)*nwinshift) .* win; % 分帧加窗(汉明窗)
% 时域波形
t = (0:nx-1)/fs; % 时间轴
subplot(2,2,1);
plot(t,x,'k');
title('原始波形');
subplot(2,2,2);
plot(t(1:nwinlen+(nframe-1)*nwinshift),x_seg_rect,'k');
title('加矩形窗后波形');
subplot(2,2,3);
plot(t(1:nwinlen+(nframe-1)*nwinshift),x_seg_ham,'k');
title('加汉明窗后波形');
% 短时频谱
nfft = 512; % FFT点数
f = (0:nfft/2-1)*fs/nfft; % 频率轴
subplot(2,2,4);
spectrogram(x_seg_rect,winlen*fs,winshift*fs,nfft,fs,'yaxis');
title('加矩形窗后短时频谱');
subplot(2,2,5);
spectrogram(x_seg_ham,winlen*fs,winshift*fs,nfft,fs,'yaxis');
title('加汉明窗后短时频谱');
```
清音语音:
```matlab
% 加载语音信号
[x,fs] = audioread('voice.wav');
% 设置窗口大小及重叠长度
winlen = 0.025; % 窗口大小
winshift = 0.01; % 重叠长度
% 计算窗口长度和重叠长度的样点数
nwinlen = round(winlen*fs); % 窗口长度(样点数)
nwinshift = round(winshift*fs); % 重叠长度(样点数)
% 分帧加窗
nx = length(x);
nframe = floor((nx-nwinlen)/nwinshift)+1; % 帧数
w = rectwin(nwinlen); % 矩形窗
win = repmat(w, 1, nframe); % 窗矩阵
x_seg_rect = x(1:nwinlen+(nframe-1)*nwinshift) .* win; % 分帧加窗(矩形窗)
w = hamming(nwinlen); % 汉明窗
win = repmat(w, 1, nframe); % 窗矩阵
x_seg_ham = x(1:nwinlen+(nframe-1)*nwinshift) .* win; % 分帧加窗(汉明窗)
% 时域波形
t = (0:nx-1)/fs; % 时间轴
subplot(2,2,1);
plot(t,x,'k');
title('原始波形');
subplot(2,2,2);
plot(t(1:nwinlen+(nframe-1)*nwinshift),x_seg_rect,'k');
title('加矩形窗后波形');
subplot(2,2,3);
plot(t(1:nwinlen+(nframe-1)*nwinshift),x_seg_ham,'k');
title('加汉明窗后波形');
% 短时频谱
nfft = 512; % FFT点数
f = (0:nfft/2-1)*fs/nfft; % 频率轴
subplot(2,2,4);
spectrogram(x_seg_rect,winlen*fs,winshift*fs,nfft,fs,'yaxis');
title('加矩形窗后短时频谱');
subplot(2,2,5);
spectrogram(x_seg_ham,winlen*fs,winshift*fs,nfft,fs,'yaxis');
title('加汉明窗后短时频谱');
```
需要注意的是,上述代码中的`voice.wav`是需要替换为实际的语音文件名。另外,窗口大小和重叠长度的设置需要根据实际情况进行调整。
根据给出的浊音语音,画出它分别加矩形窗和汉明窗的时域波形和短时频谱,写出实验步骤
实验步骤:
1. 准备浊音语音数据,并将其导入Matlab环境中。
2. 将语音信号分帧,每帧长度为25ms,重叠长度为10ms。
3. 对每一帧信号进行加窗处理,分别使用矩形窗和汉明窗,得到时域波形。
4. 对每一帧信号进行傅里叶变换,得到短时频谱。
5. 分别绘制加矩形窗和汉明窗的时域波形和短时频谱。
以下是绘制时域波形和短时频谱的示例代码:
```matlab
% 导入语音信号
[x, fs] = audioread('voice.wav');
% 分帧
frame_length = 0.025; % 帧长为25ms
frame_shift = 0.01; % 帧移为10ms
frame_size = round(frame_length * fs);
shift_size = round(frame_shift * fs);
frame_num = fix((length(x) - frame_size) / shift_size) + 1;
frames = zeros(frame_size, frame_num);
for i = 1:frame_num
frames(:, i) = x((i-1)*shift_size+1 : (i-1)*shift_size+frame_size);
end
% 加矩形窗
rect_window = rectwin(frame_size);
rect_frames = frames .* rect_window;
% 加汉明窗
hamming_window = hamming(frame_size);
hamming_frames = frames .* hamming_window;
% 绘制时域波形
figure;
subplot(2, 1, 1);
plot(frames(:, 1));
title('原始语音信号');
subplot(2, 1, 2);
plot(rect_frames(:, 1));
hold on;
plot(hamming_frames(:, 1));
legend('矩形窗', '汉明窗');
title('加窗后的时域波形');
% 绘制短时频谱
rect_spec = abs(fft(rect_frames));
hamming_spec = abs(fft(hamming_frames));
rect_spec = rect_spec(1:frame_size/2+1, :);
hamming_spec = hamming_spec(1:frame_size/2+1, :);
rect_spec = rect_spec / max(max(rect_spec));
hamming_spec = hamming_spec / max(max(hamming_spec));
figure;
subplot(2, 1, 1);
imagesc(rect_spec);
axis xy;
xlabel('帧数');
ylabel('频率');
title('矩形窗下的短时频谱');
subplot(2, 1, 2);
imagesc(hamming_spec);
axis xy;
xlabel('帧数');
ylabel('频率');
title('汉明窗下的短时频谱');
```
注意:在实际操作中需要根据具体情况调整窗口长度、重叠长度等参数。
阅读全文