You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何导出Scikit-Maad中rois.find_rois_cwt的振幅时间数据为CSV

获取Scikit-Maad中rois.find_rois_cwt的振幅-时间原始数据

问题背景

使用Scikit-Maad库的rois.find_rois_cwt函数时,需要提取第一个子图中振幅随时间变化的原始数据并保存为CSV,但该函数未直接输出这类数据。尝试修改源码因依赖过多受阻,提取坐标轴数据时因变量名错误报错。

解决方案

方法1:从可视化坐标轴中提取数据

确保正确接收函数的所有返回值,再从对应坐标轴对象中提取曲线数据:

import maad
from maad import sound, rois
import pandas as pd

# 加载音频文件(路径用r前缀避免转义问题)
s, fs = sound.load(r"C:\Users\Student\Project Stuff\Our Audio Files\190324\240319_0086_F.wav")

# 调用函数并接收完整返回值:ROI数据框、两个图对象、两个坐标轴对象
df_rois, fig1, ax1, fig2, ax2 = rois.find_rois_cwt(
    s, fs, flims=(600,1800), tlen=3, th=-0.000001,
    display=True, save_df=True, savefilename='240319_0086_F_rois.csv'
)

# 从第一个子图(振幅-时间曲线)提取x(时间)和y(振幅)数据
time_data = ax1.lines[0].get_xdata()
amplitude_data = ax1.lines[0].get_ydata()

# 保存为CSV文件
pd.DataFrame({'时间(s)': time_data, '振幅': amplitude_data}).to_csv('振幅时间数据.csv', index=False)

方法2:手动复现函数计算逻辑(不依赖可视化)

直接调用rois.find_rois_cwt内部用到的cwt函数,自行计算振幅包络,无需开启可视化:

import maad
from maad import sound, rois
import numpy as np
import pandas as pd

s, fs = sound.load(r"C:\Users\Student\Project Stuff\Our Audio Files\190324\240319_0086_F.wav")
flims = (600,1800)
tlen = 3

# 1. 计算连续小波变换,得到时频矩阵、时间轴、频率轴
Sxx, tn, fn, ext = rois.cwt(s, fs, flims=flims, tlen=tlen)
# 2. 计算时间维度上的最大振幅(即振幅包络,对应子图曲线)
amplitude_envelope = np.max(np.abs(Sxx), axis=0)
# 3. 时间轴直接使用tn变量
time_axis = tn

# 保存数据
pd.DataFrame({'时间(s)': time_axis, '振幅': amplitude_envelope}).to_csv('振幅时间数据_手动计算.csv', index=False)

说明

  • 方法1简单直接,但必须开启display=True才能生成坐标轴对象,适合单文件调试;
  • 方法2不依赖可视化,可批量处理音频文件,更适合自动化分析场景。

内容的提问来源于stack exchange,提问作者SmishSmashSmosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:43:17