信号分析框架

saff的Python项目详细描述


安全

为您提供信号分析框架

一个简单的信号分析框架,其目标是代码的清晰性和解决方案的重现性。插件架构 旨在鼓励科学家和数据分析师之间建立模块化代码。它提供了信号的基本结构 储存和分析管道。

安装

pip3 install saffy

源代码

建议使用Virtualenv!

将软件包下载到项目目录

git clone https://github.com/PPierzc/saffy.git

安装依赖项

pip3 install -r ./saffy/requirements.txt

用法

importsaffysig=saffy.SignalManager(generator=signal_data)

基本信号管理器实例结构
fielddescription
fssampling frequency
num_channelsnumber of channels
channel_namesname for each channel
datathe signal in the structure of (epoch x channel x signal)
ttime vector
epochsnumber of epochs
tagsposition of tags in signal
spectrummatrix of spectrum
spectrum_freqsvector of frequencies
phasematrix of phase

信号管理器初始化函数

它接受一个标记参数:generatorfilename

发电机

结构词典

data = {
      'fs': # float,
      'num_channels': # integer,
      'channel_names': # list of strings,
      'epochs': # integer,
      't': # time array,
      'tags': # list,
      'data': # Signal Matrix
  }
saffy.SignalManager(generator=data)
文件名

由svarog生成的文件的名称。3个文件,例如data.rawdata.xmldata.tag

saffy.SignalManager(filename='data')

插件

插件是从插件管理器继承的类。它们扩展了基本信号管理器的功能。 有些插件是现成的

过滤器

添加基本筛选器

图形

添加显示信号数据的功能

韦尔奇

计算韦尔奇谱

希尔伯特

计算希尔伯特变换

创建自定义插件

您可能需要添加一些自定义功能。

插件开发的建议约定如下。 所有要额外存储的数据都应该以字典的形式存储,字典的形式分配给一个同名的变量 作为插件。

插件函数前面应该有插件名称。

importsaffyclassCustomPlugin(saffy.PluginManager):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)self.custom={'param':'some value'}defcustom_function(self):# do somethingpasssaffy.SignalManager.register_plugin(CustomPlugin)sig=saffy.SignalManager(generator=signal_data)sig.custom_function()

示例

如何使用saffy进行脑电数据分析的一个简短示例。

defgenerate_signal():data={'fs':512,'num_channels':3,'channel_names':['C3','C4','d1'],'epochs':1}T=20t=np.arange(0,T,1/data['fs'])mu_freq=10beta_freq=23net_freq=50data['data']=np.zeros((data['epochs'],data['num_channels'],len(t)))forepochinrange(data['epochs']):data['data'][epoch][0]+=(0.1*t+0.1)*sin(t,mu_freq)data['data'][epoch][0]+=(0.1*t+0.1)*sin(t,beta_freq)data['data'][epoch][0]+=sin(t,net_freq)data['data'][epoch][0]+=0.3*noise(t)data['data'][epoch][1]+=(0.1*t+0.1)*sin(t,mu_freq)data['data'][epoch][1]+=(0.1*t+0.1)*sin(t,beta_freq)data['data'][epoch][1]+=sin(t,net_freq)data['data'][epoch][1]+=0.3*noise(t)data['data'][epoch][2][::5*data['fs']]=1data['data'][epoch][2][0]=0data['t']=tdata['tags']=[]returndataEEG=saffy.SignalManager(generator=generate_signal())EEG.set_tags_from_channel('d1')EEG.remove_channel('d1')PRE_EEG=EEG.copy('pre')PRE_EEG.set_epochs_from_tags(-4,-2)PRE_EEG.welch_spectrum()PRE_EEG.spectrum=np.mean(PRE_EEG.spectrum,axis=0)PRE_EEG.spectrum=np.reshape(PRE_EEG.spectrum,(1,*PRE_EEG.spectrum.shape))POST_EEG=EEG.copy('post')POST_EEG.set_epochs_from_tags(0.5,2.5)POST_EEG.welch_spectrum()POST_EEG.spectrum=np.mean(POST_EEG.spectrum,axis=0)POST_EEG.spectrum=np.reshape(POST_EEG.spectrum,(1,*POST_EEG.spectrum.shape))fig,ax=plt.subplots(nrows=max([PRE_EEG.num_channels,POST_EEG.num_channels]),ncols=1,sharex=True,sharey=True,figsize=(10,10))PRE_EEG.graphics_spectrum_plot(fig,ax,'Change',label='Pre')POST_EEG.graphics_spectrum_plot(fig,ax,color='#0000ff',label='Post')forainax:a.legend()plt.show()plt.close()

alt text

贡献

如果您喜欢这个项目并想添加一些内容,那么请创建一个拉取请求。

  • 标题应该很快概括出您添加的目标
  • 在描述中,深入了解您所做的更改及其原因。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java置换相关算法   在Java中读取/打开文本文件   java为什么这段代码不适用于CodeEval?   java如何将日历转换为JSON   从txt文件中读取字符串并将其存储到java中的字符数组中   字符编码Java ResourceBundles umlauts搞砸了   java为什么hashmap会根据总大小而不是填充的存储桶调整大小   java如何将Excel单元格中的数字字符串读取为字符串(而不是数字)?   java Guava的LocalCache无法使用,为什么?   java有没有办法强制JVM在单个处理器或内核上运行   java Eclipse不安装软件   将字节转换为java字符串(可能是汉字)   Java正则表达式:提取函数名   JavaTestNG:如何从多个类中指定测试方法顺序?