请将上述整合为一个完整可行的实现代码
时间: 2024-09-16 22:06:04 浏览: 55
当然,以下是一个完整的MATLAB代码片段,用于读取WAV文件、绘制时域波形和频谱图:
```matlab
% 读取wav文件
[signal, Fs] = audioread('your_wav_file.wav');
% 定义时间轴
t = (0:length(signal)-1)/Fs;
% 绘制时域波形
figure;
plot(t, signal);
xlabel('Time (s)');
ylabel('Amplitude');
title('Waveform of the Audio Signal');
grid on; % 添加网格线
% 计算并绘制频谱图
nPerFrame = 1024; % 可调整帧大小
frameShift = nPerFrame / 2; % 帧移
frames = round(length(signal) - frameShift) / frameShift + 1;
window = hamming(nPerFrame); % 窗口函数,这里用了汉明窗
spectrogram = zeros(nPerFrame/2+1, frames);
for i = 1:frames
idxStart = (i - 1) * frameShift + 1;
idxEnd = idxStart + nPerFrame - 1;
if idxEnd > length(signal)
idxEnd = length(signal);
end
% 计算帧内FFT并归一化
frame = window .* signal(idxStart:idxEnd);
spec = abs(fft(frame)) ./ length(frame);
% 将结果添加到矩阵中
spectrogram(:, i) = spec(1:nPerFrame/2+1);
end
freqs = (0:nPerFrame/2) * Fs / frames;
imagesc(log10(abs(spectrogram))); % log-scale for better visibility
colormap(gray); % 设置颜色映射
colorbar;
xlabel('Frequency (Hz)');
ylabel('Frame Number');
title('Spectrogram of the Audio Signal');
grid minor; % 添加次要网格线
% 保存图片
saveas(gcf, 'waveform_and_spectrogram.png', 'png');
```
请注意替换`'your_wav_file.wav'`为你要读取的实际wav文件路径。这段代码会创建一个包含时域波形和频谱图的窗口,并将它们保存为名为`waveform_and_spectrogram.png`的图像文件。