信号分析框架

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第三方库


热门话题
安卓 studio安装的java Unity本机广告   java如何将映射转换为对象   java我试图使用rest控制器从h2数据库中检索记录,但它说没有数据集   反思为什么会抛出java。lang.InstanceException?   在opensuse中找不到Java/javac   java为Android上的谷歌地图添加了5900多个标记。如何有效地做   java如何在if语句中使用循环   java如何在JPA(Hibernate)中映射一对多关系和复合主键?   如何在Java中读取和写入外部进程?   Java线程。睡眠时间最短   java使用EclipseGradle插件如何离线托管和使用依赖项(库jar文件)   java为什么虚拟引用在排队时没有被清除?   java无法理解如何创建用于响铃报警的取消按钮   java解析不应通过注入容器错误发生   java Toast或ProgressDialog不显示   java在自定义对象上使用优先级队列的更好方法   java格式的。wmv文件。(或者任何视频文件都很好)   从页面调用另一个侦听器后,不会调用java JSF<f:ajax>侦听器   java注释ConfigApplicationContext不能多次刷新有什么原因吗?