根据给出的浊音语音,用matlab编写程序可以画出它分别加矩形窗和汉明窗的短时频谱
时间: 2024-03-26 14:38:14 浏览: 61
基于matlab实现频谱分析
5星 · 资源好评率100%
好的,以下是一个简单的Matlab程序,它可以绘制给定浊音语音的短时频谱,并分别使用矩形窗和汉明窗。请注意,您需要将程序中的文件路径替换为您自己的音频文件路径,并且需要调整一些参数(如窗口大小、帧移、窗函数类型等)以获得所需的结果。
```matlab
% 读取音频文件
[y, fs] = audioread('path/to/audio/file.wav');
% 定义参数
win_size = 0.03; % 窗口大小(单位:秒)
win_shift = 0.01; % 帧移(单位:秒)
win_type = 'hamming'; % 窗函数类型(可选:'rectwin'、'hamming'等)
nfft = 1024; % FFT点数
% 计算短时频谱
win = eval([win_type, '(', num2str(win_size*fs), ')']); % 创建窗函数
nframes = floor((length(y)-win_size*fs)/(win_shift*fs))+1; % 帧数
spec_rect = zeros(nfft/2+1, nframes); % 矩形窗
spec_hamming = zeros(nfft/2+1, nframes); % 汉明窗
for i = 1:nframes
y_frame = y((i-1)*win_shift*fs+1:(i-1)*win_shift*fs+win_size*fs); % 分帧
y_frame = y_frame.*win; % 加窗
spec_rect(:,i) = abs(fft(y_frame, nfft)).^2 / (win_size*fs); % 矩形窗
spec_hamming(:,i) = abs(fft(y_frame.*hamming(length(y_frame)), nfft)).^2 / (win_size*fs); % 汉明窗
end
% 绘图
figure;
subplot(211); imagesc(log10(spec_rect)); axis xy; colormap(jet); colorbar;
title('Rectangular Window');
xlabel('Frame'); ylabel('Frequency (Hz)');
subplot(212); imagesc(log10(spec_hamming)); axis xy; colormap(jet); colorbar;
title('Hamming Window');
xlabel('Frame'); ylabel('Frequency (Hz)');
```
执行上述程序后,将会展示一个包含两个子图的图形窗口,分别显示使用矩形窗和汉明窗的短时频谱。
阅读全文