【Python百日进阶-Web开发-音频】Day711 - 光谱表示 librosa.stft 短时傅里叶变换

news2024/11/15 12:00:16

文章目录

  • 一、光谱表示 Spectral representations
    • 1.1 librosa.stft
      • 1.1.1 语法与参数
      • 1.1.2 示例

一、光谱表示 Spectral representations

1.1 librosa.stft

https://librosa.org/doc/latest/generated/librosa.stft.html

1.1.1 语法与参数

librosa.stft(y, *, n_fft=2048, hop_length=None, win_length=None, window='hann', center=True, dtype=None, pad_mode='constant')[source]

短时傅里叶变换 (STFT)。
STFT 通过在短重叠窗口上计算离散傅里叶变换 (DFT) 来表示时频域中的信号。
此函数返回一个复值矩阵 D 使得
np.abs(D[…, f, t])f 是帧处频率仓的幅度t,并且
np.angle(D[…, f, t])f 是帧处频率仓的相位t。
整数t和f可以通过实用函数frames_to_sample和转换为物理单位fft_frequencies。

>参数
	ynp.ndarray [shape=(…, n)], real-valued
		输入信号。支持多通道。

	n_fftint > 0 [scalar]
		用零填充后窗口化信号的长度。STFT 矩阵的行数D为(1 + n_fft/2)。默认值n_fft=2048 samples 对应于 93 毫秒的物理持续时间,采样率为 22050 Hz,即 librosa 中的默认采样率。该值非常适合音乐信号。但是,在语音处理中,推荐值为 512,对应于 23 毫秒,采样率为 22050 Hz。无论如何,我们建议设置n_fft 为 2 的幂以优化快速傅里叶变换 (FFT) 算法的速度。
	hop_length:int > 0 [scalar]

number of audio samples between adjacent STFT columns.

Smaller values increase the number of columns in D without affecting the frequency resolution of the STFT.

If unspecified, defaults to win_length // 4 (see below).

	win_length:int <= n_fft [scalar]

Each frame of audio is windowed by window of length win_length and then padded with zeros to match n_fft.

Smaller values improve the temporal resolution of the STFT (i.e. the ability to discriminate impulses that are closely spaced in time) at the expense of frequency resolution (i.e. the ability to discriminate pure tones that are closely spaced in frequency). This effect is known as the time-frequency localization trade-off and needs to be adjusted according to the properties of the input signal y.

If unspecified, defaults to win_length = n_fft.

	windows:tring, tuple, number, function, or np.ndarray [shape=(n_fft,)]

Either:

a window specification (string, tuple, or number); see scipy.signal.get_window

a window function, such as scipy.signal.windows.hann

a vector or array of length n_fft

Defaults to a raised cosine window (‘hann’), which is adequate for most applications in audio signal processing.

	center:boolean
		如果True,y则填充信号以使帧 D[:, t] 以 y[t * hop_length]为中心。
		如果False,则D[:, t]从y[t * hop_length]开始。
		默认为True,这通过 librosa.frames_to_samples简化了D在时间网格上的对齐。但是请注意,在使用librosa.stream 分析信号时,center必须将其设置为False。

	dtype:np.dtype, optional
		D的复数类型。推断默认值以匹配输入信号的精度。

	pad_mode:string or function
		如果center=True, 这个参数被传递给np.pad用于填充信号的边缘y。默认情况下 ( pad_mode="constant") y两边用零填充。如果center=False,则忽略此参数。

>Returns
	D:np.ndarray [shape=(…, 1 + n_fft/2, n_frames), dtype=dtype]
		短期傅里叶变换系数的复值矩阵。

笔记
此函数缓存在 20 级。

1.1.2 示例

import librosa
import scipy
import librosa.display
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

y, sr = librosa.load(librosa.ex('trumpet'))
print(sr)  # 22050
print(y)
"""
[-1.4068224e-03 -4.4607223e-04 -4.1098078e-04 ...  7.9623060e-06
 -3.0417003e-05  1.2765067e-05]
"""
print(y.shape)  # (117601,)

S_center = librosa.stft(y)
print(S_center)
"""
[[ 1.9942708e-03+0.00000000e+00j  1.6542288e-03+0.00000000e+00j
   1.0328183e-03+0.00000000e+00j ... -2.2926326e-08+0.00000000e+00j
  -1.3249499e-07+0.00000000e+00j -1.3283957e-06+0.00000000e+00j]
 [-9.1869739e-04-3.66205000e-04j -1.4027286e-03+1.79366514e-04j
   4.1004395e-04-9.79877426e-04j ...  2.2314891e-08-1.08651239e-08j
  -9.0820201e-08-4.22441389e-08j  6.5005867e-07-1.15266187e-06j]
 [ 4.9593160e-04+2.89754127e-03j  2.1955024e-03-1.88621401e-03j
  -1.5042156e-03+4.51300322e-04j ... -1.6460707e-08+1.98847889e-08j
  -4.0321687e-08-1.12811755e-07j  6.7993113e-07+1.12290854e-06j]
 ...
 [-7.4050279e-04+9.60371017e-06j  3.6689549e-04-4.40829444e-06j
  -3.1608189e-07-1.19399476e-06j ... -1.4079569e-04+3.04138841e-04j
  -3.0000968e-04-6.39684324e-04j  8.6307281e-04+6.27736968e-04j]
 [ 7.4102602e-04-3.95785128e-06j -1.2137341e-06-3.67751083e-04j
   1.3524847e-06-2.02049563e-07j ... -1.5341908e-04-1.93013460e-04j
  -3.2897147e-05-1.13135975e-04j -8.3123025e-04-3.35008168e-04j]
 [-7.4161147e-04+0.00000000e+00j -3.6996530e-04+0.00000000e+00j
  -1.9221090e-06+0.00000000e+00j ...  1.9005347e-04+0.00000000e+00j
   5.1085511e-04+0.00000000e+00j  9.5983199e-04+0.00000000e+00j]]
"""
print(S_center.shape)  # (1025, 230)

S = np.abs(S_center)
print(S)
"""
[[1.9942708e-03 1.6542288e-03 1.0328183e-03 ... 2.2926326e-08
  1.3249499e-07 1.3283957e-06]
 [9.8899496e-04 1.4141499e-03 1.0622127e-03 ... 2.4819453e-08
  1.0016424e-07 1.3233313e-06]
 [2.9396757e-03 2.8944833e-03 1.5704575e-03 ... 2.5813943e-08
  1.1980121e-07 1.3127185e-06]
 ...
 [7.4056507e-04 3.6692197e-04 1.2351239e-06 ... 3.3514752e-04
  7.0654217e-04 1.0672152e-03]
 [7.4103661e-04 3.6775309e-04 1.3674936e-06 ... 2.4655956e-04
  1.1782178e-04 8.9619990e-04]
 [7.4161147e-04 3.6996530e-04 1.9221090e-06 ... 1.9005347e-04
  5.1085511e-04 9.5983199e-04]]
"""

# 使用左对齐的框架,而不是居中的框架
S_left = librosa.stft(y, center=False)
print(S_left)
"""
[[ 1.0328183e-03+0.00000000e+00j  5.3383765e-04+0.00000000e+00j
   4.0781524e-04+0.00000000e+00j ... -7.4833135e-09+0.00000000e+00j
  -1.3176041e-08+0.00000000e+00j -2.2926326e-08+0.00000000e+00j]
 [ 4.1004395e-04-9.79877426e-04j -7.3341822e-04+4.68304846e-04j
   2.9052317e-04-5.92359866e-04j ...  9.7249346e-09-5.20855403e-09j
  -1.3737805e-09+5.24641885e-10j  2.2314891e-08-1.08651239e-08j]
 [-1.5042156e-03+4.51300322e-04j  8.8845036e-04-9.47999768e-04j
  -8.5169246e-04+1.14679744e-03j ... -8.4719254e-09+9.02283581e-09j
   1.1467454e-08-1.22313732e-08j -1.6460707e-08+1.98847889e-08j]
 ...
 [-3.1608189e-07-1.19399476e-06j  1.2029817e-06+3.07988870e-07j
  -1.4841049e-07-1.11454945e-07j ... -4.5909670e-05+6.52485323e-06j
  -5.4250672e-06-6.11315627e-05j -1.4079569e-04+3.04138841e-04j]
 [ 1.3524847e-06-2.02049563e-07j  3.1585279e-07-7.99633824e-07j
   2.3395089e-07+9.38624680e-08j ... -4.4754495e-05-3.46280540e-05j
   1.0162088e-05+1.18790449e-05j -1.5341908e-04-1.93013460e-04j]
 [-1.9221090e-06+0.00000000e+00j -1.0158723e-06+0.00000000e+00j
  -4.8456741e-07+0.00000000e+00j ... -3.5932208e-05+0.00000000e+00j
   1.8500381e-05+0.00000000e+00j  1.9005347e-04+0.00000000e+00j]]
"""
print(S_left.shape)  # (1025, 226)

# 使用较短的跳跃长度
D_short = librosa.stft(y, hop_length=64)
print(D_short)
"""
[[ 1.9942708e-03+0.0000000e+00j  2.0245595e-03+0.0000000e+00j
   1.9468555e-03+0.0000000e+00j ... -1.6863929e-06+0.0000000e+00j
  -1.7487063e-06+0.0000000e+00j -1.7789796e-06+0.0000000e+00j]
 [-9.1869739e-04-3.6620500e-04j -7.4865157e-04-3.3484653e-04j
  -7.1702205e-04-2.1911871e-04j ...  1.4982434e-06-7.6076549e-07j
   1.6798145e-06-4.7158815e-07j  1.7701935e-06-1.3795959e-07j]
 [ 4.9593160e-04+2.8975413e-03j -1.0332313e-03+2.7302452e-03j
  -2.3815844e-03+1.8284258e-03j ... -9.8341661e-07+1.3487496e-06j
  -1.4770260e-06+9.0465647e-07j -1.7408884e-06+2.7701415e-07j]
 ...
 [-7.4050279e-04+9.6037102e-06j -6.7337602e-04+2.8923893e-04j
  -4.9616216e-04+5.0932058e-04j ...  7.8239013e-04-5.4693053e-04j
   4.7231969e-04-7.4939081e-04j  1.3690814e-04-7.9165393e-04j]
 [ 7.4102602e-04-3.9578513e-06j  7.1854488e-04-1.4679512e-04j
   6.5641786e-04-2.7571729e-04j ... -9.3884434e-04+1.8708868e-04j
  -8.5937575e-04+3.5740886e-04j -7.3320372e-04+4.9383269e-04j]
 [-7.4161147e-04+0.0000000e+00j -7.3425204e-04+0.0000000e+00j
  -7.1275508e-04+0.0000000e+00j ...  9.5271977e-04+0.0000000e+00j
   9.2443411e-04+0.0000000e+00j  8.8211324e-04+0.0000000e+00j]]
"""
print(D_short.shape)  # (1025, 1838)

# 显示频谱图
fig, ax = plt.subplots()
img = librosa.display.specshow(librosa.amplitude_to_db(S, ref=np.max),
                               y_axis='log', x_axis='time', ax=ax)
ax.set_title('Power spectrogram')
fig.colorbar(img, ax=ax, format='%+2.0f dB')
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2142672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能机巢+无人机:自动化巡检技术详解

智能机巢与无人机的结合&#xff0c;在自动化巡检领域展现出了巨大的潜力和优势。以下是对这一技术的详细解析&#xff1a; 一、智能机巢概述 智能机巢&#xff0c;也被称为无人机机场或无人机机巢&#xff0c;是专门为无人机提供停靠、充电、维护等服务的智能化设施。它不仅…

加密与安全_优雅存储二要素(AES-256-GCM )

文章目录 什么是二要素如何保护二要素&#xff08;姓名和身份证&#xff09;加密算法分类场景选择算法选择AES - ECB 模式 (不推荐)AES - CBC 模式 (推荐)GCM&#xff08;Galois/Counter Mode&#xff09;AES-256-GCM简介AES-256-GCM工作原理安全优势 应用场景其他模式 和 敏感…

LeetcodeTop100 刷题总结(一)

LeetCode 热题 100&#xff1a;https://leetcode.cn/studyplan/top-100-liked/ 文章目录 一、哈希1. 两数之和49. 字母异位词分组128. 最长连续序列 二、双指针283. 移动零11. 盛水最多的容器15. 三数之和42. 接雨水&#xff08;待完成&#xff09; 三、滑动窗口3. 无重复字符的…

TCADE--基于迁移成分分析和差分进化的多目标多任务优化

TCADE–基于迁移成分分析和差分进化的多目标多任务优化 title&#xff1a; Multitasking multiobjective optimization based on transfer component analysis author&#xff1a; Ziyu Hua, Yulin Li, Hao Sun, Xuemin Ma. journal&#xff1a; Information Sciences (Ins)…

最优化理论与自动驾驶(十):纯跟踪算法原理、公式及代码演示

纯跟踪算法&#xff08;Pure Pursuit Algorithm&#xff09;是一种用于路径跟踪的几何控制算法&#xff0c;广泛应用于自动驾驶、机器人导航等领域。其基本思想是通过选择预定路径上的目标点&#xff08;预瞄点&#xff09;&#xff0c;并控制转向角&#xff0c;使车辆不断逼近…

用于稀疏自适应深度细化的掩码空间传播网络 CVPR2024

目录 Masked Spatial Propagation Network for Sparsity-Adaptive Depth Refinement &#xff08;CVPR 2024&#xff09;用于稀疏自适应深度细化的掩码空间传播网络1 介绍2 算法流程2.1 问题建模2.2 Guidance Network2.3 MSPN 模块 3 实验结果3.1 稀疏度自适应深度细化对比试验…

COMDEL电源CX2500S RF13.56MHZ RF GENERATOR手侧

COMDEL电源CX2500S RF13.56MHZ RF GENERATOR手侧

如何让虚拟机的服务被主机访问

当我们在虚拟机上写了一个服务器&#xff0c;在宿主机访问时&#xff0c;出现无法访问的情况。这可能是虚拟机网络的设置问题。 查看虚拟机防火墙是否关闭 在终端输入&#xff1a; systemctl status firewalld 如果是active就说明防火墙是开启的&#xff0c;需要关闭。 输入…

高级I/O知识分享【epoll || Reactor ET,LT模式】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;接口 epo…

SpringBoot 消息队列RabbitMQ 消息可靠性 数据持久化 与 LazyQueue

介绍 在默认情况下&#xff0c;RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟 一旦MO宕机&#xff0c;内存中的消息会丢失内存空间有限&#xff0c;当消费者故障或处理过慢时&#xff0c;会导致消息积压&#xff0c;引发MQ阻塞 在消息队列运行的过程中&#xf…

LeetCode 815.公交路线(BFS广搜 + 建图)(中秋快乐啊)

给你一个数组 routes &#xff0c;表示一系列公交线路&#xff0c;其中每个 routes[i] 表示一条公交线路&#xff0c;第 i 辆公交车将会在上面循环行驶。 例如&#xff0c;路线 routes[0] [1, 5, 7] 表示第 0 辆公交车会一直按序列 1 -> 5 -> 7 -> 1 -> 5 -> …

物理感知扩散的 3D 分子生成模型 - PIDiff 评测

PIDiff 是一个针对蛋白质口袋特异性的、物理感知扩散的 3D 分子生成模型&#xff0c;通过考虑蛋白质-配体结合的物理化学原理来生成分子&#xff0c;在原理上&#xff0c;生成的分子可以实现蛋白-小分子的自由能最小。 一、背景介绍 PIDiff 来源于延世大学计算机科学系的 Sang…

vue2基础系列教程之v-model及面试高频问题

v-model是表单组件里面的核心知识点&#xff0c;这个指令给我们写表单业务带来了很大的方便。 元素标签上的 v-model 指令用于双向绑定数据,它是一个语法糖&#xff0c;可以用于代替 v-bind:value 和 input 例如&#xff1a;<input v-model"message" placeholder…

VTD激光雷达(6)——06_OptiX_Variables

文章目录 前言一、总结 前言 感谢VTD官方学习资料 一、 1、 总结 学海无涯回头是岸

curl格式化json之jq工具?

jq 是一个轻量级的命令行工具&#xff0c;用于解析、操作和格式化 JSON 数据。它类似于 sed 或 awk&#xff0c;但专门用于处理 JSON 格式。使用 jq&#xff0c;你可以从复杂的 JSON 数据中提取所需的信息&#xff0c;格式化输出&#xff0c;进行数据筛选&#xff0c;甚至修改 …

正点原子阿尔法ARM开发板-IMX6ULL(六)——通过官方SDK完成实验

文章目录 一、引言1.1 cc.h1.2 main.c1.2 fsl_common.h、MCIMX6Y2.h、fsl_iomuxc.h1.3 对于宏定义能多个参数 其他 一、引言 在开发过程中&#xff0c;如果一个人来写寄存器、汇编等东西&#xff0c;会变得特别繁琐&#xff0c;好在官方NXP官方给出了SDK包&#xff0c; 1.1 c…

牛客周赛 Round 60(下)

构造序列 题目描述 登录—专业IT笔试面试备考平台_牛客网 运行代码 #include <iostream> #include<stdio.h> #include<math.h> using namespace std; int main() {int n, m;cin >> n >> m;int minVal min(n, m);int maxVal max(n, m);cout …

如何解决“json schema validation error ”错误? -- HarmonyOS自学6

一. 问题描述 DevEco Studio工程关闭后&#xff0c;再重新打开时&#xff0c;出现了如下错误提示&#xff1a; json schema validation error 原因&#xff1a; index.visual或其他visual文件中的left等字段的值为负数时&#xff0c;不能以”-0.x“开头&#xff0c;否则就会…

了解华为云容器引擎(Cloud Container Engine)

1.什么是云容器引擎&#xff1f; 云容器引擎&#xff08;Cloud Container Engine&#xff0c;简称CCE&#xff09;提供高度可扩展的、高性能的企业级Kubernetes集群。借助云容器引擎&#xff0c;您可以在华为云上轻松部署、管理和扩展容器化应用程序。云容器引擎是一个企业级的…

【Android】使用Room数据库解决本地持久化

【Android】使用Room数据库解决本地持久化 Room概述 Room 是一个持久性库&#xff0c;属于 Android Jetpack 的一部分。 Room 是 SQLite 数据库之上的一个抽象层。Room 并不直接使用 SQLite&#xff0c;而是负责简化数据库设置和配置以及与数据库交互方面的琐碎工作。此外&a…