📜  八度图图例 - Matlab (1)

📅  最后修改于: 2023-12-03 14:50:04.439000             🧑  作者: Mango

八度图图例 - Matlab

在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');

这会生成一个简单的八度图,如下所示:

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函数将字符串作为图例添加到图像中。此代码将生成以下图像:

Octave Plot with Legend

如上所述,我们可以在Matlab中轻松绘制八度图并添加自定义的图例。