了解频谱图的形状和 n_mels
Understanding the shape of spectrograms and n_mels
我正在浏览这两个 librosa 文档:melspectrogram
and stft
。
我正在研究可变长度的音频数据集,但我不太了解其形状。例如:
(waveform, sample_rate) = librosa.load('audio_file')
spectrogram = librosa.feature.melspectrogram(y=waveform, sr=sample_rate)
dur = librosa.get_duration(waveform)
spectrogram = torch.from_numpy(spectrogram)
print(spectrogram.shape)
print(sample_rate)
print(dur)
输出:
torch.Size([128, 150])
22050
3.48
我得到的有以下几点:
- 采样率是指每秒获取 N 个样本,在本例中为每秒 22050 个样本。
- window 长度是针对这段音频长度计算的 FFT。
- STFT是计算osFFT在小windows音频的时间。
- 输出的形状是(n_mels, t)。 t = duration/window_of_fft.
我正在尝试理解或计算:
什么是n_fft?我的意思是它对音频波到底做了什么?我在文档中阅读了以下内容:
n_fft : int > 0 [scalar]
length of the windowed signal after padding with zeros. The number of rows in the STFT matrix D is (1 + n_fft/2). The default value,
n_fft=2048 samples, corresponds to a physical duration of 93
milliseconds at a sample rate of 22050 Hz, i.e. the default sample
rate in librosa.
这意味着在每个 window 中采集了 2048 个样本,这意味着 --> 1/22050 * 2048 = 93[ms]。正在为每 93[ms] 的音频计算 FFT?
所以,这意味着 window 大小和 window 是用于过滤此帧中的信号?
在上面的示例中,我知道我得到了 128 个 Mel 频谱图,但这到底是什么意思?
什么是hop_length?阅读文档,我了解到如何将 window 从一个 fft window 转移到下一个?如果这个值是 512 而 n_fft = 也是 512,那是什么意思?这是否意味着它将花费 23[ms] 的 window,为此 window 计算 FFT 并跳过下一个 23[ms]?
如何指定我想要从一个 FFT window 重叠到另一个?
请帮忙,我看过很多计算频谱图的视频os,但我在现实生活中似乎看不到它。
理解频谱图输出维度的基本参数不一定是所用 FFT 的长度 (n_fft
),而是连续 FFT 之间的距离,即 hop_length
.
在计算 STFT 时,您计算多个短段的 FFT。这些段的长度为 n_fft
。通常这些段重叠(为了避免信息丢失),所以两个段之间的距离通常不是 n_fft
,而是 n_fft/2
。此距离的名称是 hop_length
。样本中也有定义。
所以当你有 1000 个音频样本时,hop_length 是 100,你得到 10 个特征帧(注意,如果 n_fft
大于 hop_length,你可能需要垫)。
在您的示例中,您使用的是默认值 hop_length
512。因此对于以 22050 Hz 采样的音频,您获得的特征帧速率为
frame_rate = sample_rate/hop_length = 22050 Hz/512 = 43 Hz
同样,填充可能会稍微改变这一点。
因此,对于 22050 Hz 的 10 秒音频,您会得到一个维度为 (128, 430)
的频谱图数组,其中 128 是 Mel bin 的数量,430 是特征的数量(在本例中为 Mel 频谱) .
我正在浏览这两个 librosa 文档:melspectrogram
and stft
。
我正在研究可变长度的音频数据集,但我不太了解其形状。例如:
(waveform, sample_rate) = librosa.load('audio_file')
spectrogram = librosa.feature.melspectrogram(y=waveform, sr=sample_rate)
dur = librosa.get_duration(waveform)
spectrogram = torch.from_numpy(spectrogram)
print(spectrogram.shape)
print(sample_rate)
print(dur)
输出:
torch.Size([128, 150])
22050
3.48
我得到的有以下几点:
- 采样率是指每秒获取 N 个样本,在本例中为每秒 22050 个样本。
- window 长度是针对这段音频长度计算的 FFT。
- STFT是计算osFFT在小windows音频的时间。
- 输出的形状是(n_mels, t)。 t = duration/window_of_fft.
我正在尝试理解或计算:
什么是n_fft?我的意思是它对音频波到底做了什么?我在文档中阅读了以下内容:
n_fft : int > 0 [scalar]
length of the windowed signal after padding with zeros. The number of rows in the STFT matrix D is (1 + n_fft/2). The default value, n_fft=2048 samples, corresponds to a physical duration of 93 milliseconds at a sample rate of 22050 Hz, i.e. the default sample rate in librosa.
这意味着在每个 window 中采集了 2048 个样本,这意味着 --> 1/22050 * 2048 = 93[ms]。正在为每 93[ms] 的音频计算 FFT?
所以,这意味着 window 大小和 window 是用于过滤此帧中的信号?
在上面的示例中,我知道我得到了 128 个 Mel 频谱图,但这到底是什么意思?
什么是hop_length?阅读文档,我了解到如何将 window 从一个 fft window 转移到下一个?如果这个值是 512 而 n_fft = 也是 512,那是什么意思?这是否意味着它将花费 23[ms] 的 window,为此 window 计算 FFT 并跳过下一个 23[ms]?
如何指定我想要从一个 FFT window 重叠到另一个?
请帮忙,我看过很多计算频谱图的视频os,但我在现实生活中似乎看不到它。
理解频谱图输出维度的基本参数不一定是所用 FFT 的长度 (n_fft
),而是连续 FFT 之间的距离,即 hop_length
.
在计算 STFT 时,您计算多个短段的 FFT。这些段的长度为 n_fft
。通常这些段重叠(为了避免信息丢失),所以两个段之间的距离通常不是 n_fft
,而是 n_fft/2
。此距离的名称是 hop_length
。样本中也有定义。
所以当你有 1000 个音频样本时,hop_length 是 100,你得到 10 个特征帧(注意,如果 n_fft
大于 hop_length,你可能需要垫)。
在您的示例中,您使用的是默认值 hop_length
512。因此对于以 22050 Hz 采样的音频,您获得的特征帧速率为
frame_rate = sample_rate/hop_length = 22050 Hz/512 = 43 Hz
同样,填充可能会稍微改变这一点。
因此,对于 22050 Hz 的 10 秒音频,您会得到一个维度为 (128, 430)
的频谱图数组,其中 128 是 Mel bin 的数量,430 是特征的数量(在本例中为 Mel 频谱) .