如何导出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
相关产品推荐
相关产品推荐

