📅  最后修改于: 2023-12-03 14:50:04.439000             🧑  作者: Mango
在Matlab中,八度图通常用于表示频率分析结果,例如音频信号分析。本文将详细介绍如何在Matlab中绘制八度图,并添加自定义的图例。
首先,我们需要准备一组示例数据。以音频信号为例,示例数据可以使用Matlab自带的gong
音频数据:
[y, Fs] = audioread('gong.wav');
以下是该音频信号的频率分析结果:
Y = abs(fft(y));
L = length(y);
P2 = Y/L;
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
接下来,我们可以使用semilogx
函数绘制八度图:
f0 = 440; % 参考频率
semitones = 12*log2(f/f0); % 计算半音数
semilogx(f, 20*log10(P1), 'linewidth', 2);
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Octave Plot');
这会生成一个简单的八度图,如下所示:
我们可以使用legend
函数为图例添加自定义内容。以下是一个示例代码片段,展示了如何添加自定义的图例:
f0 = 440; % 参考频率
semitones = 12*log2(f/f0); % 计算半音数
semilogx(f, 20*log10(P1), 'linewidth', 2);
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Octave Plot');
% 添加图例
legend(sprintf('%.0f Hz (%+.0f semitones)', [f; semitones]), 'location', 'southwest');
在图例中,我们使用sprintf
函数生成一个格式化字符串,显示相应频率的半音数。使用legend
函数将字符串作为图例添加到图像中。此代码将生成以下图像:
如上所述,我们可以在Matlab中轻松绘制八度图并添加自定义的图例。