标签: spectrogram

如何更改 pyplot.specgram x 和 y 轴缩放比例?

我以前从未处理过音频信号,对信号处理知之甚少。不过,我需要使用matplotlib库中的pyplot.specgram函数来表示和音频信号。这是我如何做到的。

import matplotlib.pyplot as plt
import scipy.io.wavfile as wavfile

rate, frames = wavfile.read("song.wav")
plt.specgram(frames)
Run Code Online (Sandbox Code Playgroud)

我得到的结果是下面这个漂亮的频谱图: 在此处输入图片说明

当我查看我认为是域和域的x 轴和 y 轴时,我无法理解频率从0 到 1.0和时间从0 到 80k缩放的事实。它背后的直觉是什么,更重要的是,如何以人类友好的格式表示它,使频率为 0 到 100k,时间以秒为单位?

signal-processing matplotlib spectrogram

4
推荐指数
2
解决办法
8782
查看次数

3D 中的 Python 频谱图(如 matlab 的频谱图函数)

我的问题如下:

我拥有频谱图所需的所有值(scipy.fftpack.fft )。我想在 python 中创建一个 3D 频谱图。

在 MATLAB 中,这是一项非常简单的任务,而在 Python 中似乎要复杂得多。我尝试过 mayavi、3D 绘图 matplotlib,但我还没有设法做到这一点。

谢谢


我的代码:

import numpy as np
import pandas as pd
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.collections import PolyCollection

fs = 11240.
t = 10
time = np.arange(fs*t) / fs
frequency = 1000.
mysignal = np.sin(2.0 * np.pi * frequency * time)

nperseg = 2**14
noverlap = 2**13
f, …
Run Code Online (Sandbox Code Playgroud)

python fft matplotlib scipy spectrogram

4
推荐指数
1
解决办法
3748
查看次数

matlab中的频谱图 - 时间轴格式

我有一个从 0.20 ms 到 0.40 ms 的音调突发信号。从 0 到 0.20ms 和从 0.40ms 到 3.27ms 它为零。我做了 fft 显示大约 25 kHz 的频率内容。fft 点数为 32768,这也是时域信号的长度。

我正在尝试使用以下代码片段在 Matlab 中绘制频谱图

nfft = 32768;
dT = 1e-6;
fs = 1/dT;
window = hamming(nfft)
spectrogram(signal,window,[],nfft,fs)
Run Code Online (Sandbox Code Playgroud)

使用这个我得到了准确的频率描述,但时间轴是一个问题。

放大时域信号:

https://i.stack.imgur.com/gM2xw.png

25 kHz 时的频谱图:

在此处输入图片说明

matlab signal-processing spectrogram

4
推荐指数
1
解决办法
1186
查看次数

如何将seewave频谱图转换成wav文件

我想操作seewave音频频谱图,然后将其转换回.wav文件。一个简单的例子

library(tuneR)
library(seewave)

data(tico)
#generate spectrogram with phase information
spec_tico=spectro(tico,plot=FALSE,complex=TRUE,norm=FALSE,dB=NULL)
#manipulate spectrogram
spec_tico_new=dostuff(spec_tico)
#convert back into Wave object - but there is no function spectr2Wave!
tico_new=spectr2Wave(spec_tico_new,...)
Run Code Online (Sandbox Code Playgroud)

spectr2Waveseewave文档中找不到任何接近的内容。

你们知道如何在不深入研究wav文件规范并手动执行的情况下将其转换回来的方法吗?谢谢!

audio r spectrogram

3
推荐指数
1
解决办法
1013
查看次数

python,matplotlib:specgram数据数组值与specgram plot不匹配

我使用matplotlib.pyplot.specgram和matplotlib.pyplot.pcolormesh来制作地震信号的频谱图.

背景信息 - 使用pcolormesh的原因是我需要在光谱图数据阵列上进行算术,然后重新绘制得到的频谱图(对于三分量地震图 - 东,北和垂直 - 我需要计算水平频谱幅度和用水平光谱划分垂直光谱.使用谱图阵列数据比使用单个振幅谱更容易

我发现算术后的谱图有意想不到的值.经过进一步调查后发现,与使用pyplot.pcolormesh制作的频谱图和pyplot.specgram方法返回的数据数据相比,使用pyplot.specgram方法制作的频谱图具有不同的值.两个图/数组都应该包含相同的值,我无法弄清楚它们为什么没有.

示例:的情节

plt.subplot(513)
PxN, freqsN, binsN, imN = plt.specgram(trN.data, NFFT = 20000, noverlap = 0, Fs = trN.stats.sampling_rate, detrend = 'mean', mode = 'magnitude')
plt.title('North')
plt.xlabel('Time [s]')
plt.ylabel('Frequency [Hz]')
plt.clim(0, 150)
plt.colorbar()
#np.savetxt('PxN.txt', PxN)
Run Code Online (Sandbox Code Playgroud)

看起来与情节不同

plt.subplot(514)
plt.pcolormesh(binsZ, freqsZ, PxN)
plt.clim(0,150)
plt.colorbar()
Run Code Online (Sandbox Code Playgroud)

即使"PxN"数据阵列(即每个段的频谱图数据值)由第一种方法产生并在第二种方法中重新使用.

有人知道为什么会这样吗?

PS我意识到我对NFFT的价值不是一个平方数,但在我编码的这个阶段它并不重要.

PPS我不知道"imN"数组(来自pyplot.specgram的第四个返回变量)是什么以及它用于什么......

python arrays matplotlib spectrogram

3
推荐指数
1
解决办法
2423
查看次数

使用Librosa绘制Mel频谱图

我在使用声音的自定义文件路径在librosa中创建梅尔频谱图时遇到问题。

我正在遵循此文档:https : //librosa.github.io/librosa/generated/librosa.feature.melspectrogram.html

我看过这个堆栈溢出文章: 使用Librosa生成的频谱图看起来与Kaldi不一致?

但是,这些都没有帮助我解决问题。

import librosa
y, sr = librosa.load("path_to_my_wav_file")
librosa.feature.melspectrogram(y=y, sr=sr)
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
librosa.display.specshow(librosa.power_to_db(y,                                              
ref=np.max), y_axis='mel', fmax=8000, x_axis='time')
plt.colorbar(format='%+2.0f dB')
plt.title('Mel spectrogram')
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何修复此代码,以使其正确显示并将mel-spectrogram保存为jpg文件吗?谢谢!

python spectrogram librosa

3
推荐指数
1
解决办法
7679
查看次数

在 scipy 中重现 sox 频谱图

例如,我有一个带有语音的 wav 文件。

我可以使用 sox 创建漂亮的频谱图可视化:

wget https://google.github.io/tacotron/publications/tacotron2/demos/romance_gt.wav
sox romance_gt.wav -n spectrogram -o spectrogram.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我怎样才能在Python中重现这个频谱图?

这是使用scipy.signal.spectrogram的示例

input_file = 'temp/romance_gt.wav'
fs, x = wavfile.read(input_file)
print('fs', fs)
print('x.shape', x.shape)

f, t, Sxx = signal.spectrogram(x, fs)
print('f.shape', f.shape)
print('t.shape', t.shape)
print('Sxx.shape', Sxx.shape)
plt.pcolormesh(t, f, Sxx)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.savefig('spectrogram_scipy.png')
Run Code Online (Sandbox Code Playgroud)

但看起来有些参数不好或者有什么东西坏了: 在此输入图像描述

python scipy sox spectrogram

3
推荐指数
1
解决办法
1310
查看次数

从 FFT 数据创建波形数据?

正如您可能注意到的,我对 python 和声音处理非常陌生。我(希望)使用 python 以及 logfbank 和 mfcc 函数从波形文件中提取 FFT 数据。(logfbank 似乎提供了最有希望的数据,mfcc 输出对我来说看起来有点奇怪)。

在我的程序中,我想更改 logfbank/mfcc 数据,然后从中创建波形数据(并将它们写入文件中)。我确实没有找到任何有关从 FFT 数据创建波形数据的过程的信息。你们中有人知道如何解决这个问题吗?我将非常感激:)

到目前为止,这是我的代码:

from scipy.io import wavfile 
import numpy as np
from python_speech_features import mfcc, logfbank

rate, signal = wavfile.read('orig.wav')
fbank = logfbank(signal, rate, nfilt=100, nfft=1400).T
mfcc = mfcc(signal, rate, numcep=13, nfilt=26, nfft=1103).T 

#magic data processing of fbank or mfcc here

#creating wave data and writing it back to a .wav file here
Run Code Online (Sandbox Code Playgroud)

python signal-processing fft spectrogram mfcc

3
推荐指数
1
解决办法
2583
查看次数

为什么 librosa 库中的频谱图与实际音轨的持续时间不同?

我正在尝试绘制 16000Hz 16 位 .wav 语音音频的波形图和频谱图。我已成功获得以下图:

“about”一词的波图和频谱图

但是,频谱图上的时间值不正确。我确信我的采样率在整个程序中是一致的(16000Hz),但我仍然无法获得频谱图的正确时间值。

下面是我的Python脚本:

import matplotlib.pyplot as plt
import librosa
import librosa.display
import numpy as np

y, sr = librosa.load('about_TTS_0792.wav', sr=16000)
print("Current audio sampling rate: ", sr)

print("Audio Duration:", librosa.get_duration(y=y, sr=sr))

D = librosa.stft(y, hop_length=64, win_length=256)  # STFT of y
S_db = librosa.amplitude_to_db(np.abs(D), ref=np.max)

fig, ax = plt.subplots(nrows=2)

librosa.display.waveplot(y, sr=sr, ax=ax[0])
img = librosa.display.specshow(S_db, sr=sr, x_axis='s', y_axis='linear',ax=ax[1])
ax[1].set(title='Linear spectrogram')
fig.colorbar(img, ax=ax[1], format="%+2.f dB")
fig.tight_layout()

plt.show()
Run Code Online (Sandbox Code Playgroud)

此代码的输出:

Current audio sampling rate:  16000

Audio Duration: 0.792
Run Code Online (Sandbox Code Playgroud)

我不知道我错过了什么会导致 x …

python audio signal-processing spectrogram librosa

3
推荐指数
1
解决办法
2242
查看次数

需要解释specgram函数如何在python中工作(matplotlib - MATLAB兼容函数)

我正在努力将我的代码从 python 转换为目标 c。在 matplotlib.mlab.specgram 函数中,我在 fft 之前看到了 3 个重要的函数:

 result = stride_windows(x, NFFT, noverlap, axis=0)
 result = detrend(result, detrend_func, axis=0)
 result, windowVals = apply_window(result, window, axis=0,
                                      return_window=True)
 result = np.fft.fft(result, n=pad_to, axis=0)[:numFreqs, :]
Run Code Online (Sandbox Code Playgroud)

我试图调试以了解每个的目的。例如我有输入数组:

x = [1,2,3,4,5,6,7,8,9,10,11,12]
Run Code Online (Sandbox Code Playgroud)

在第一个函数 stride_windows 之后(这个是为了防止泄漏?),如果 NFFT = 4,noverlap = 2 那么:

x = [ [1,3,5,7,9],
      [2,4,6,8,10],
      [3,5,7,9,11],
      [4,6,8,10,12] 
    ]
Run Code Online (Sandbox Code Playgroud)

在 detrend 之后没有任何变化(我了解 fft 之前的 detrend)

在 apply_window 里面(我不明白这一步):

    xshape = list(x.shape) 
    xshapetarg = xshape.pop(axis) // =4
    windowVals = window(np.ones(xshapetarg, dtype=x.dtype))
    //result of 4 elements …
Run Code Online (Sandbox Code Playgroud)

python signal-processing fft matplotlib spectrogram

2
推荐指数
1
解决办法
1233
查看次数

标签 统计

spectrogram ×10

python ×7

signal-processing ×5

matplotlib ×4

fft ×3

audio ×2

librosa ×2

scipy ×2

arrays ×1

matlab ×1

mfcc ×1

r ×1

sox ×1