2023/1/12-2023/1/脑机接口学习内容一览:

这一篇博客里,主要在写博客的过程中总结和思考自己在前一段时间所进行的频域分析工作有何意义,以及探明时频分析几种主要方法的基本工作原理,最后做一下代码方面的总结。

1.频谱估计

在脑电信号分析的频谱估计方面,以傅里叶变换为基础实现多个方法。

1.1 傅里叶变换

在傅里叶变换方面,之前一直对该变换到底是如何实现的持有怀疑态度:很多教程都只讲解了傅里叶变换的原理,但是这只让我理解了傅里叶变换这个概念,傅里叶变换到底如何在计算机上实现?如何用傅里叶变换来处理一段信号?它是怎么将时域信号转化为频域信号的?这其中的具体实现过程让人很迷惑。但是参考文献【1】很好的解答了我这方面的疑问。

在Steven W. Smith, Ph.D.的解释中,实数傅里叶变换可以将一段长度为N的信号最多分解为N/2+1个正余弦信号,分解出的信号可以理解为是通过下标 0 - N/2 总共 N/2+1 个 Re[X] + Im[X] * i(这个i为复数)式子这种形式进行表示,其中前一个未知数表示cos频率幅度值,后一个表示sin频率幅度值,至于为什么把正弦塞到复数那里,这只是为了让式子表达和计算更加方便,而从N/2这个数量,我们可以联想到频谱中的最大频率为 freqs / 2。

其中频率幅度值与我之前一直疑惑的问题有关:傅里叶变换是如何从原始信号中判断出各个频率正余弦波的振幅的。从我的理解上来说,傅里叶变换就是把一个函数通过各频率的正余弦之和来等价表示。

1.1.2 DFT合成运算

从这里可以看出每一个时间点的振幅都由全部频率的某点振幅之和来综合表示。这同样也体现了傅里叶变换的缺陷之一,所有频率都对时段上的某点信号存在影响,难以分析非周期信号。

同样,从这个式子出发,我们可以看出如果k取0~N/2来表示Re和Im数组,则两个数组内下标为k的数代表的频率可计算为k / N hz,这也稍微解答了我之前的一些疑问。

如果我们手头已经有了通过信号分解得到的各个正余弦波的信息,那么可以用这个公式来合成源信号。证明不再赘述,此公式形式与傅里叶级数相似。

DFT中的相关转化同样参考【1】的频谱密度理解方式,我觉得未尝不可将频谱密度的离散点理解为以各点的带宽作为柱宽的柱状图,频谱密度其实是将每一个带宽范围内的频率幅度相加近似地以一个点的纵坐标来表示,因此DFT的合成公式可以看作是一种逼近的合成,这种合成的精细程度很明显取决于带宽的长度,带宽越小越精确。

1.1.2 DFT分解运算

1 通过联立方程进行求解, 但这是这种方法计算量非常的大且极其复杂,很少被采用

2 利用信号的相关性(correlation)进行计算

3 快速傅立叶变换(FFT)

相关性的计算其实比较好理解,就是把一个待检测信号波乘以另一个信号波,得到一个新的信号波,再把这个新的信号波所有的点进行相加,从相加的结果就可以判断出这两个信号的相似程度。可以通过把输入信号和每一种频率的正余弦信号进行相乘(关联操作),从而得到原始信号与每种频率的关联程度(即总和大小),这个结果便是我们所要的傅立叶变换结果,下面两个等式便是我们所要的计算方法:

为了便于理解,这里写一个特殊的例子:根据正交的概念,如果某次计算得到的相加和为0,则可以说明这个频率对原始信号没有贡献。

相关性计算虽然比较容易理解,但是根据我这些天写下的代码,相对于相关性计算,还是FFT即快速傅里叶变换使用的频率较高。

1.1.3快速傅里叶变换(FFT)

快速傅里叶变换是离散傅里叶变换(DFT)的快速算法,这部分只看【1】不太懂,所以参考了文献【2】。

按照参考资料的讲解FFT是一种特殊的复数形式DFT,因此上一小节似乎不应该把它和联立方程和相关性计算方法列在一起,容易造成误解,在【2】中使用的是复杂度简化为nlgn后的分治快速算法,与【1】中的相关性算法不同,但是更加便于理解。

具体不再赘述,注意事项可查看【3】。

另外,在选取fft点数方面,N越大频率的分辨率越好,末尾补零能使数据更加平滑。

1.2 周期图法

周期图主要通过FFT变换计算得到功率值来展现功率谱。加窗周期图只取有限的一段数据进行傅里叶变换,加窗这个操作十分重要,能缓解傅里叶变换难以解决的跳变问题,具体参考【4】。平均周期图将总长为N的数据分为M个长为L段的数据段分别运算取平均,使方差显著减小,但是分辨率同样减小。

1.3 welch法和multitaper(多窗口)法

这两个方法在我们使用mne库的时候能经常看见,是函数中某一项参数的两个可选择项,应用范围较广,通过平均加窗数据来降低频率估计的方差。在使用的过程中,会自动计算我们所需要的最佳窗口长度,具体可参考【4】与【5】。

1.4 自回归ar模型

这种方法的原理看起来与神经网络比较相似,使用参数法通过特定模型来描述信号,估计模型参数,最后计算频谱。但是这个方法在mne中似乎并没有对应函数,非参数法引用比它更加广泛。


2.时频分析

频谱分析是建立在假设脑电信号是频谱固定且不随时间变化的稳定信号,然而我们清楚脑电信号不可能是稳定的,且频谱随时间变化。

2.1 短时傅里叶变换(STFT)

STFT建立在滑动窗口分析的基础上,即将数据分为多个短数据段,运用滑动窗口进行傅里叶变换来分析,从这方面看来前面的加窗估计似乎与之相似,其区别是在时域方面操作。这个方法综合前面的加窗法来看很容易理解。

2.2 小波变换

小波变换的自适应窗口变换使其更适合对于脑电信号的分析,具体mne函数可查看往期博客【6】。

学习总结:

  在这一模块的学习中,对傅里叶变换等时频分析方式具有了更深层次的原理理解,但是仍然需要在代码方面有所加强,接下来应该聚焦于机器学习结合脑电分析方面的学习,使自己的水平有更大的提升。

参考文献:

【1】理解傅里叶变换

【2】十分简明易懂的FFT(快速傅里叶变换)

【3】脑电的频谱分析和时频分析-EEG Processing and Feature 5

【4】理解FFT, STFT, 加窗的含义

【5】脑电分析mne库函数compute_psd()记录

【6】mne库脑电时频信号分析函数解读:小波变换及方法比较

EEG信号分析:关于时频分析方面的个人理解相关推荐

  1. MATLAB仿真方波:周期,频谱,脉宽对信号影响(时频分析)

    目录 前言 一. 生成方波以及仿真不同的周期 二. 方波的频谱与谱线 三. 方波脉冲宽度(脉宽)的仿真 总结 前言 信号处理可以把信号中蕴含的信息变得显然,其中的转变就包括映射(mapping)和变换 ...

  2. 时频分析方法总结:傅里叶级数及傅里叶变换、STFT 、小波变换、Wigner-Ville 分布

    前言: 一.傅里叶变换的机理 一个能量无限的正弦信号和源信号乘积并求和得到某个频率下的系数,随着频率的增加,正弦信号改变,再次求得系数,依次构成了频谱图 傅里叶级数及傅里叶变换 https://blo ...

  3. 基于汉宁窗、多窗口和小波的时频分析

    文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注. 如何使用汉宁窗.多窗口和小波对单个对象的脑电信号进行时频分析?(本文以MEG数据为例)相信你看完这篇文章,会有所收获. 我们先来认识一下汉 ...

  4. 信号的时频分析MATLAB,[转载]时频特性分析(Matlab)

    最近瞅了一些关于时频分析工具箱的matlab函数使用方法,总结一下吧. 我使用的是2011a的matlab,貌似没有自带的时频分析工具箱,可以到网上下载,google一搜就能搜到,安装后就可以使用了( ...

  5. matlab时频分析工具箱安装_科研小班 | 加州大学伯克利分校 | 物理、电子工程:MATLAB信号和数据处理课题...

    科研小班 | 加州大学伯克利分校 | 物理.电子工程:MATLAB信号和数据处理课题(2021.1月开课)​mp.weixin.qq.com 工程研究领域中,实验.模拟往往都会产生海量的数据.对这些数 ...

  6. 实验二 语音信号基本时频分析(待更改)

    实验二 语音信号基本时频分析 1.实验目的 1.1 学习与掌握语音信号的分帧及加窗 1.2 了解并分析信号加汉明窗及矩形窗后的差别 1.3 分析清音与浊音的时域及频谱域波形特征(画图.对比) 1.4 ...

  7. 关于通用雷达信号的时频分析与图像绘制(Matlab)

    关于通用雷达信号的时频分析与图像绘制(Matlab) 最近在研究雷达信号的调制识别,所以对通用的雷达信号种类进行了时频域上的研究,下面小结给大家,从信号的原理到matlab的时频图绘制. 信号种类 这 ...

  8. 跳频信号 matlab,time-frequency 关于跳频信号的时频分析过程,介绍的比较详细 matlab 259万源代码下载- www.pudn.com...

    文件名称: time-frequency下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 73 KB 上传时间: 2014-10-16 下载次数: 14 提 ...

  9. LFM信号加噪、时频分析、滤波

    前言 线性调频(Linear Frequency Modulation,LFM)信号具有很大的时宽带宽积,可获得很大的脉冲压缩比,是雷达系统和声呐系统广泛采用的一种信号形式. LFM信号的数学表达式为 ...

最新文章

  1. 另类寻找百度文库下载地址
  2. 45种可以拿到Webshell的程序
  3. 封装请求 request.js
  4. 1月17日学习内容整理:Scrapy框架补充之pipeline,去重规则
  5. 全网最全console命令解析总结
  6. java实验报告_Java实验报告(一)
  7. 剖析人生赚钱五大境界颠覆你的认知
  8. mysql分区数据覆盖_彻底搞懂MySQL分区
  9. 有哪些建议给应届毕业生(转载知乎某大佬)
  10. [kriging](一)网上下载的kriging克里金的C++程序的初步调试
  11. 根据E-R图设计数据库表
  12. 大数据实训室课程体系设计案例分享
  13. 浅谈PHP代码执行的大致流程(opcode)
  14. C# 对JS解析AJX请求JSON并绑定到html页面的一些心得
  15. USACO Monthly Expense
  16. 啦啦外卖60.1最新版本全开源独立版本源码小程序+app+h5全端
  17. lscat cnindex php,BJDCTF2020--web-复现
  18. 如何判断winme,winxp,win2000等操作系统
  19. 手机信号弱或服务器维护,只需几步,即可解决手机信号弱的问题
  20. js 一次元素点击响应2个事件函数

热门文章

  1. 天翼云弹性计算服务器,获取天翼云Windows弹性云主机的密码操作步骤
  2. JavaWeb开发与代码的编写(二十四)
  3. rockchip rk3566 android11 网口log报错: DMA engine initialization failed
  4. 迟到的2020年终总结
  5. 离散数学-集合-笛卡尔积-07
  6. App Inventor 2 题库设计制作流程
  7. 如何查看本地是否安装oracle, 查看安装的Oracle客户端版本
  8. 区块链当前的发展现状
  9. android 背光控制,Android P背光策略分析(一)
  10. 人生,又怎会一如初见?