写一段用matlab 对语音信号分帧加窗并做傅立叶变换的代码
时间: 2023-06-04 12:07:55 浏览: 1047
以下是用Matlab对语音信号进行分帧加窗并做傅立叶变换的样例代码:
% 读入语音信号
[s, fs] = audioread('speech.wav');
% 设定参数
frameLen = 256; % 帧长
frameShift = 128; % 帧移
win = hamming(frameLen); % 窗函数
% 分帧加窗
[sFrames, nFrames] = buffer(s, frameLen, frameLen-frameShift, 'nodelay');
sFrames = sFrames .* repmat(win, 1, nFrames);
% 傅立叶变换
sSpec = abs(fft(sFrames, frameLen));
sSpec = sSpec(1:frameLen/2+1, :); % 取正频率部分
f = (0:frameLen/2) * fs / frameLen; % 计算频率轴
% 绘制结果
figure;
imagesc(1:nFrames, f, 20*log10(sSpec+eps));
axis xy;
xlabel('Frame index');
ylabel('Frequency (Hz)');
title('Spectrogram');
colorbar;
阅读全文