标签: spectrogram

什么是频谱图,如何设置其参数?

我试图绘制我的时域信号的谱图:

N=5000;
phi = (rand(1,N)-0.5)*pi;
a = tan((0.5.*phi));
i = 2.*a./(1-a.^2);
plot(i);
spectrogram(i,100,1,100,1e3);
Run Code Online (Sandbox Code Playgroud)

问题是我不明白参数和应该给出的值.我正在使用这些值,我参考了MATLAB的在线文档spectrogram.我是MATLAB的新手,我只是没有理解.任何帮助将不胜感激!

matlab signal-processing fft spectrogram

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

在specgram matplotlib中切割未使用的频率

我有一个采样率为16e3的信号,其频率范围为125到1000 Hz.因此,如果我绘制一个规格,我会得到一个非常小的颜色范围,因为所有未使用的频率.

香港专业教育学院试图通过设置斧头限制修复它,但这不起作用.

有没有办法切断未使用的频率或用NaN替换它们?

将数据重新采样到2e3将不起作用,因为仍有一些未使用的频率低于125 Hz.

谢谢你的帮助.

python frequency matplotlib spectrogram

8
推荐指数
2
解决办法
7167
查看次数

将Colorbar添加到频谱图

我正在尝试将色条添加到光谱图中.我已经尝试了我在网上找到的每一个例子和问题线程,但没有人解决过这个问题

请注意,'spl1'(数据拼接1)是来自ObsPy的跟踪.

我的代码是:

fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.75, 0.7, 0.2]) #[left bottom width height]
ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.60], sharex=ax1)
ax3 = fig.add_axes([0.83, 0.1, 0.03, 0.6])

t = np.arange(spl1[0].stats.npts) / spl1[0].stats.sampling_rate
ax1.plot(t, spl1[0].data, 'k')

ax,spec = spectrogram(spl1[0].data,spl1[0].stats.sampling_rate, show=False, axes=ax2)
ax2.set_ylim(0.1, 15)
fig.colorbar(spec, cax=ax3)
Run Code Online (Sandbox Code Playgroud)

它出现了错误:

Traceback (most recent call last):

  File "<ipython-input-18-61226ccd2d85>", line 14, in <module>
    ax,spec = spectrogram(spl1[0].data,spl1[0].stats.sampling_rate, show=False, axes=ax2)

TypeError: 'Axes' object is not iterable
Run Code Online (Sandbox Code Playgroud)

迄今为止的最佳结果:

用以下代码替换上面的最后3行:

ax = spectrogram(spl1[0].data,spl1[0].stats.sampling_rate, show=False, axes=ax2)
ax2.set_ylim(0.1, 15)
fig.colorbar(ax,cax=ax3)
Run Code Online (Sandbox Code Playgroud)

产生这个: …

python spectrogram python-2.7

7
推荐指数
1
解决办法
3003
查看次数

如何处理 CNN 中使用的音频频谱图的动态输入大小?

很多文章都在使用 CNN 来提取音频特征。输入数据是具有时间和频率两个维度的频谱图。

创建音频频谱图时,您需要指定两个维度的确切大小。但它们通常不是固定的。可以通过窗口大小来指定频率维度的大小,但是时域呢?音频样本的长度不同,但CNNs的输入数据的大小应该是固定的。

在我的数据集中,音频长度范围从 1s 到 8s。填充或切割总是对结果影响太大。

所以我想更多地了解这种方法。

speech-recognition signal-processing spectrogram conv-neural-network

7
推荐指数
1
解决办法
2163
查看次数

如何修复:MatplotlibDeprecationWarning:当 X 和 Y 具有与 C 相同的尺寸时,阴影='平坦' 自 3.3 起已弃用

我是 python 编程的菜鸟,但在尝试从 RAVDESS 数据集 wav 文件绘制频谱图时,我一直在与这些错误作斗争。这是代码;

`for file in range(0 , len(listOfFiles) , 1):
    windows_size = 20
    sample_rate , samples = wavfile.read(listOfFiles[file])
    nperseg = int(round(20 * sample_rate / 1e3))   
    frequencies , times, spectrogram = signal.spectrogram(samples, sample_rate) 
    plt.pcolormesh(times, frequencies, spectrogram)
    plt.imshow(spectrogram)
    plt.ylabel('Frequency [Hz]')
    plt.xlabel('Time [sec]')
    plt.show()`
Run Code Online (Sandbox Code Playgroud)

这是错误

<ipython-input-16-dc119f345487>:14: WavFileWarning: Chunk (non-data) not understood, skipping it.
  sample_rate , samples = wavfile.read(listOfFiles[file])
<ipython-input-16-dc119f345487>:14: WavFileWarning: Incomplete chunk ID: b'\x00', ignoring it.
  sample_rate , samples = wavfile.read(listOfFiles[file])
<ipython-input-16-dc119f345487>:17: MatplotlibDeprecationWarning: shading='flat' when X and Y …
Run Code Online (Sandbox Code Playgroud)

python speech-recognition matplotlib wav spectrogram

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

如何在python中生成一维信号的频谱图?

我不知道怎么做这个,我得到了一个例子,谱图,但这是2D.

我这里有代码生成混合频率,我可以在fft中选择这些,我怎样才能在频谱图中看到这些?我很欣赏我的例子中的频率不随时间而变化; 这是否意味着我会在谱图上看到一条直线?

我的代码和输出图像:

# create a wave with 1Mhz and 0.5Mhz frequencies
dt = 2e-9
t = np.arange(0, 10e-6, dt)
y = np.cos(2 * pi * 1e6 * t) + (np.cos(2 * pi * 2e6 *t) * np.cos(2 * pi * 2e6 * t))
y *= np.hanning(len(y))
yy = np.concatenate((y, ([0] * 10 * len(y))))

# FFT of this
Fs = 1 / dt  # sampling rate, Fs = 500MHz = 1/2ns
n = len(yy)  # length …
Run Code Online (Sandbox Code Playgroud)

python spectrogram

6
推荐指数
1
解决办法
1万
查看次数

scipy.signal.spectrogram与matplotlib.pyplot.specgram比较

以下代码使用scipy.signal.spectrogram或生成频谱图matplotlib.pyplot.specgram

specgram但是,该功能的色彩对比度相当低。有办法增加吗?

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

# Generate data
fs = 10e3
N = 5e4
amp = 4 * np.sqrt(2)
noise_power = 0.01 * fs / 2
time = np.arange(N) / float(fs)
mod = 800*np.cos(2*np.pi*0.2*time)
carrier = amp * np.sin(2*np.pi*time + mod)
noise = np.random.normal(scale=np.sqrt(noise_power), size=time.shape)
noise *= np.exp(-time/5)
x = carrier + noise
Run Code Online (Sandbox Code Playgroud)

使用matplotlib.pyplot.specgram将产生以下结果:

Pxx, freqs, bins, im = plt.specgram(x, NFFT=1028, Fs=fs)
x1, x2, …
Run Code Online (Sandbox Code Playgroud)

signal-processing matplotlib scipy spectrum spectrogram

6
推荐指数
1
解决办法
3465
查看次数

使用scipy.signal.spectrogram时频谱图错误

当我通过使用以下代码使用matplotlib中的plt.specgram时,生成的频谱图是正确的

import matplotlib.pyplot as plt
from scipy import signal
from scipy.io import wavfile
import numpy as np

sample_rate, samples = wavfile.read('.\\Wav\\test.wav')

Pxx, freqs, bins, im = plt.specgram(samples[:,1], NFFT=1024, Fs=44100, noverlap=900)
Run Code Online (Sandbox Code Playgroud)

使用matplotlib生成的频谱图

但是,如果我通过使用scipy页面中给出的示例代码和以下代码来生成频谱图,则会得到以下内容:

import matplotlib.pyplot as plt
from scipy import signal
from scipy.io import wavfile
import numpy as np

sample_rate, samples = wavfile.read('.\\Wav\\test.wav')

frequencies, times, spectrogram = signal.spectrogram(samples[:,1],sample_rate,nfft=1024,noverlap=900, nperseg=1024)

plt.pcolormesh(times, frequencies, spectrogram)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

要调试这是怎么回事,我尝试使用Pxxfreqsbins,通过第一种方法生成的,然后使用第二种方法绘制出来的数据:

plt.pcolormesh(bins, freqs, Pxx)
plt.ylabel('Frequency [Hz]') …
Run Code Online (Sandbox Code Playgroud)

python audio scipy spectrogram

6
推荐指数
1
解决办法
2399
查看次数

梅尔谱图和MFCC之间的区别

我使用的librosa库转换音乐段成美尔频谱,以用作输入我的神经网络,如图中的文档在这里

这与MFCC有何不同?使用这两种方法都有什么优点或缺点?

spectrogram mfcc librosa

6
推荐指数
2
解决办法
3851
查看次数

了解频谱图和 n_mels 的形状

我正在浏览这两个 librosa 文档:melspectrogramstft

我正在研究可变长度的音频数据集,但我不太了解形状。例如:

(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)
Run Code Online (Sandbox Code Playgroud)

输出:

torch.Size([128, 150])
22050
3.48
Run Code Online (Sandbox Code Playgroud)

我得到的有以下几点:

  1. 采样率是每秒获取 N 个样本,在本例中每秒获取 22050 个样本。
  2. 窗口长度是针对该音频长度周期计算的 FFT。
  3. STFT 是在音频的小时间窗口内进行 FFT 计算。
  4. 输出的形状为(n_mels, t)。t = 持续时间/fft 窗口。

我试图理解或计算:

  1. n_fft是什么?我的意思是它到底对音频波做了什么?我在文档中读到以下内容:

    n_fft : int > 0 [标量]

    用零填充后加窗信号的长度。STFT 矩阵 D 的行数为 (1 + n_fft/2)。默认值 n_fft=2048 个样本,对应于 22050 Hz 采样率下的 93 毫秒物理持续时间,即 librosa 中的默认采样率。


    这意味着在每个窗口中采集 2048 个样本,这意味着 --> 1/22050 * 2048 = 93[ms]。每 …

python audio spectrogram audio-processing librosa

6
推荐指数
1
解决办法
1万
查看次数