Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 频谱图中的时间步长差_Python_Matplotlib_Signal Processing_Fft_Librosa - Fatal编程技术网

Python 频谱图中的时间步长差

Python 频谱图中的时间步长差,python,matplotlib,signal-processing,fft,librosa,Python,Matplotlib,Signal Processing,Fft,Librosa,我有一个10秒长的音频文件。如果我使用matplotlib生成spectrogram,那么与librosa生成的spectrogram相比,我会得到不同的时间步数 代码如下: fs = 8000 nfft = 200 noverlap = 120 hop_length = 120 audio = librosa.core.load(path, sr=fs) # Spectogram generated using matplotlib spec, freqs, bins, _ = plt.s

我有一个10秒长的音频文件。如果我使用
matplotlib
生成
spectrogram
,那么与
librosa
生成的spectrogram相比,我会得到不同的时间步数

代码如下:

fs = 8000
nfft = 200
noverlap = 120
hop_length = 120

audio = librosa.core.load(path, sr=fs)

# Spectogram generated using matplotlib
spec, freqs, bins, _ = plt.specgram(audio, nfft, fs, noverlap = noverlap)

print(spec.shape) # (101, 5511)


# Using librosa
spectrogram_librosa = np.abs(librosa.stft(audio,
                                              n_fft=n_fft,
                                              hop_length=hop_length,
                                              win_length=nfft,
                                              window='hann')) ** 2
spectrogram_librosa_db = librosa.power_to_db(spectrogram_librosa, ref=np.max)

print(spectrogram_librosa_db.shape) # (101, 3676)

有人能给我解释一下为什么在时间步长上有很大的差异,以及如何确保两者都产生相同的输出?

< P>这是因为<代码> NoVLIPU/<代码> < PLT.Script > <代码>考虑与音频段重叠的点的数量,而<代码> HopeStime考虑段之间的步骤。

尽管如此,两个结果之间仍然有2个点的差异,但这很可能是由于边界

将numpy导入为np
进口藏红花
将matplotlib.pyplot作为plt导入
path=librosa.util.example_audio_file()
fs=8000
nfft=200
noverlap=120#重叠
跳长=80步
音频,fs=librosa.core.load(路径,sr=fs)
#使用matplotlib生成的spectrogram
规格、频率、料仓,u=plt.specgram(
音频,NFFT=NFFT,Fs=Fs,noverlap=noverlap,
)
规范=np.log10(规范+1e-14)
印刷品(规格形状)#(1016144)
#使用librosa
光谱图_librosa=(
np.abs(
librosa.stft(
音频
n_fft=nfft,
跃点长度=跃点长度,
win_长度=nfft,
window=“hann”,
)
)
** 2
)
光谱图\u librosa\u db=librosa.power\u至\u db(光谱图\u librosa,ref=np.max)
打印(光谱图_librosa_db.shape)#(1016146)
图,ax=plt子批次(2)
ax[0]。pcolorfast(规范)
ax[1]。pcolorfast(光谱图)
plt.show()
这将输出以下图片: