很难想象,我接下来要介绍的脑波信号处理居然是我的微机原理课程设计,虽然这跟微机根本没有任何关系hhh。在这次课设中,我和我的团队做的是《基于脑波控制的3D念力飞车游戏》,所以这里就需要对脑波信号进行处理,提取人的专注度作为车的加速度来进行控制。
这里的脑波获取用的是神念的TGAM模块,这玩意加条带子戴在头上一个某宝上居然要卖600左右,确实是坑人。带上后,能够获取到的是512Hz的脑波原始信号和1Hz的专注度,但是1Hz的频率根本无法实现控制,所以这里决定自行实现对人脑专注度的提取。
要对脑波信号进行处理,首先要弄清楚脑波检测仪所获取到的脑波数据的量纲和意义,经过咨询售卖该检测仪的商家,商家给出了原始数据与检测仪接触皮肤点的实时电压公式为:
V o l t a g e = r a w d a t a ∗ ( 1.8 / 4096 ) Voltage=rawdata*(1.8/4096) Voltage=rawdata∗(1.8/4096)
得到了脑电波原始数据后,开始查阅论文和学习数字信号处理的相关知识。由于国内脑波信号处理领域仍未成熟,资料稀缺,于是开始大量翻阅外文文献,了解到关于快速傅里叶变换、小波变换、小波包变换等信号处理的方法,最终确定了脑电波专注度提取的大体方案:
首先进行小波包变换,将原始脑波信号进行分解,再根据四种基本脑波频率范围从脑波包的分解树数据中进行信号重构。对四种重构后的基本脑波信号通过快速傅里叶变换从时域变换到频域,再对四种脑波信号进行能量谱分析,最终根据专注度与脑波信号能量谱之间的关系计算出专注度。
介绍小波包变换前,首先需要对介绍一下小波变换。对于一个连续的周期信号,可以将其分解为一组频率不同的三角函数信号的线性组合,这就是傅里叶级数的本质,将信号从时域投影到频域中的不同频段上来完成分解。当这个周期信号的周期趋近于无穷大时,傅里叶级数就变成了傅里叶变换。数学表达为:
F ( ω ) = ∫ − ∞ ∞ f ( t ) e − i ω t d t F(\omega)=\int_{-\infty}^{\infty} f(t) e^{-i \omega t} d t F(ω)=∫−∞∞f(t)e−iωtdt
由于三角函数是一个无限长的信号,在时域上不具有局部性, 傅里叶变换对于非平稳信号的分解会遗失其在时域上的变化信息,即产生吉布斯效应。小波变换就是为了解决对非平稳信号的分解问题而产生的数学方法。
对于任意能量有限信号 f ( t ) f(t) f(t),其连续小波变换(CWT)定义为
W f ( a , b ) = 1 a ∫ − ∞ ∞ ψ ∗ ( t − b a ) d t W_{f}(a, b)=\frac{1}{\sqrt{a}} \int_{-\infty}^{\infty} \psi *\left(\frac{t-b}{a}\right) d t Wf(a,b)=a1∫−∞∞ψ∗(at−b)dt
其中 ψ ( t ) \psi(t) ψ(t) 是母小波或者基本小波, 满足 ψ ( ± ∞ ) = 0 , ψ ( 0 ) = 0 , ∫ − ∞ ∞ ψ ( t ) d t = 0 \psi(\pm \infty)=0, \psi(0)=0, \int_{-\infty}^{\infty} \psi (t) d t=0 ψ(±∞)=0,ψ(0)=0,∫−∞∞ψ(t)dt=0
小波变换将无限长的三角函数基转换成有限长会衰减的小波基,解决了傅里叶变换的吉布斯效应。
小波包分解,又称为最优子带树结构正是对小波变换的进一步优化。其主要的算法思想是:在小波变换的基础上,在每一级信号分解时,除了对低频子带进行进一步分解,也对高频子带进行进一步分解。最后通过最小化一个代价函数,计算出最优的信号分解路径,并以此分解路径对原始信号进行分解。
记小波包变换中的父小波 Φ ( t ) \Phi(t) Φ(t) 为 μ 0 0 ( t ) \mu_{0}^{0}(t) μ00(t), 母小波 Ψ ( t ) \Psi(t) Ψ(t) 为 μ 1 0 ( t ) \mu_{1}^{0}(t) μ10(t), 其中的上标 表示该小波包所在的分解级数, 下标表示该小波包在分解树等级里的位置。
于是上述的递推关系可以表述如下:
{ μ 2 n L − 1 ( t ) = ∑ k h k μ n L ( t − k ) , μ n L ( t − k ) = μ n L − 1 ( 2 t − k ) μ 2 n + 1 L − 1 ( t ) = ∑ k g g k μ n L ( t − k ) , μ n L ( t − k ) = μ n L − 1 ( 2 t − k ) \left\{\begin{array}{l} \mu_{2 \mathrm{n}}^{\mathrm{L}-1}(t)=\sum_{\mathrm{k}} \mathrm{h}_{\mathrm{k}} \mu_{\mathrm{n}}^{\mathrm{L}}(\mathrm{t}-\mathrm{k}), \mu_{\mathrm{n}}^{\mathrm{L}}(t-k)=\mu_{\mathrm{n}}^{\mathrm{L}-1}(2 t-k) \\ \mu_{2 \mathrm{n}+1}^{\mathrm{L}-1}(t)=\sum_{\mathrm{k}}^{\mathrm{g}} \mathrm{g}_{\mathrm{k}} \mu_{\mathrm{n}}^{\mathrm{L}}(\mathrm{t}-\mathrm{k}), \mu_{\mathrm{n}}^{\mathrm{L}}(t-k)=\mu_{\mathrm{n}}^{\mathrm{L}-1}(2 t-k) \end{array}\right. {μ2nL−1(t)=∑khkμnL(t−k),μnL(t−k)=μnL−1(2t−k)μ2n+1L−1(t)=∑kggkμnL(t−k),μnL(t−k)=μnL−1(2t−k)
即有
{ μ 2 n ( t ) = ∑ k h k μ n L ( 2 t − k ) μ 2 n + 1 ( t ) = ∑ k g k μ n L ( 2 t − k ) \left\{\begin{array}{l} \mu_{2 \mathrm{n}}(t)=\sum_{\mathrm{k}} \mathrm{h}_{\mathrm{k}} \mu_{\mathrm{n}}^{\mathrm{L}}(2 \mathrm{t}-\mathrm{k}) \\ \mu_{2 \mathrm{n}+1}(t)=\sum_{\mathrm{k}} \mathrm{g}_{\mathrm{k}} \mu_{\mathrm{n}}^{\mathrm{L}}(2 \mathrm{t}-\mathrm{k}) \end{array}\right. {μ2n(t)=∑khkμnL(2t−k)μ2n+1(t)=∑kgkμnL(2t−k)
其中 h k 、 g k \mathrm{h}_{\mathrm{k}} 、 \mathrm{~g}_{\mathrm{k}} hk、 gk 的定义同小波变换, μ \mu μ 即称为小波包。在小波包变换中, 常用的 代价函数为信息樀函数。最小化代价函数, 也即是最大化逐级信号分解的信息樀。 通过小波包变换, 设置最大分解等级为 9 , 可以将原始脑波数据逐步分解并 存储到分解树中。
人脑是凭借不同频率的脑波来传递信息的,就像广播、电视台的指挥中心利用电波发送信息一样,其中根据频率范围,可以划分为四张脑波—— α , β , θ , δ \alpha,\beta,\theta,\delta α,β,θ,δ, α \alpha α脑波对应的频率范围为7.808 ~ 13.176 Hz、 β \beta β脑波对应的频率范围为13.908 ~30.012 Hz, θ \theta θ脑波对应的频率范围为3.904~7.076 Hz, δ \delta δ脑波对应的频率范围0.488 ~2.928Hz为根据四个脑电节律的频率范围,分别计算它们所包含的最少分解节点数。
通过计算, α \alpha α脑波的分解节点为(31,53), β \beta β脑波的分解节点为(56,122), θ \theta θ脑波的分解节点为(15,28), δ \delta δ脑波脑波的分解节点为(2,11)。根据最少分解节点可以将这四种脑波信号重构出来。
快速傅里叶变换 (FFT) 的原理是假设多项式 f ( x ) = a 0 + a 1 ∗ x + ⋯ + a n − 2 ∗ f(x)=a_{0}+a_{1} * x+\cdots+a_{n-2} * f(x)=a0+a1∗x+⋯+an−2∗ x n − 2 + a n − 1 ∗ x n − 1 x^{n-2}+a_{n-1} * x^{n-1} xn−2+an−1∗xn−1, 那么我们可以按 a a a 下标的奇偶性将 f ( x ) f(x) f(x) 分成两部分, 即:
{ f 1 ( x ) = a 0 + a 2 x 1 + a 4 x 2 + ⋯ + a n − 2 x n 2 − 1 f 2 ( x ) = x ( a 1 + a 3 x + a 5 x 2 + ⋯ + a n − 1 x n 2 − 1 \left\{\begin{array}{l} f_{1}(x)=a_{0}+a_{2} x^{1}+a_{4} x^{2}+\cdots+a_{n-2} x^{\frac{n}{2}-1} \\ f_{2}(x)=x\left(a_{1}+a_{3} x+a_{5} x^{2}+\cdots+a_{n-1} x^{\frac{n}{2}-1}\right. \end{array}\right. {f1(x)=a0+a2x1+a4x2+⋯+an−2x2n−1f2(x)=x(a1+a3x+a5x2+⋯+an−1x2n−1
则有 f ( x ) = f 1 ( x 2 ) + x f 2 ( x 2 ) f(x)=f_{1}\left(x^{2}\right)+x f_{2}\left(x^{2}\right) f(x)=f1(x2)+xf2(x2), 带入 ω n k ( k < n 2 ) \omega_{n}^{k}\left(k<\frac{n}{2}\right) ωnk(k<2n) 可得
f ( ω n k ) = f 1 ( ω n 2 k ) + ω n k f 2 ( ω n 2 k ) = f 1 ( ω n 2 k ) + ω n k f 2 ( ω n 2 k ) f\left(\omega_{n}^{k}\right)=f_{1}\left(\omega_{n}^{2 k}\right)+\omega_{n}^{k} f_{2}\left(\omega_{n}^{2 k}\right)=f_{1}\left(\omega_{\frac{n}{2}}^{k}\right)+\omega_{n}^{k} f_{2}\left(\omega_{\frac{n}{2}}^{k}\right) f(ωnk)=f1(ωn2k)+ωnkf2(ωn2k)=f1(ω2nk)+ωnkf2(ω2nk)
带入 ω n k + n 2 ( k < n 2 ) \omega_{n}^{k+\frac{n}{2}}\left(k<\frac{n}{2}\right) ωnk+2n(k<2n) 可得
f ( ω n k + n 2 ) = f 1 ( ω n 2 k + n ) + ω n k + n 2 f 2 ( ω n 2 k + n ) = f 1 ( ω n 2 k ∗ ω n n ) − ω n k f 2 ( ω n 2 k ∗ ω n n ) f\left(\omega_{n}^{k+\frac{n}{2}}\right)=f_{1}\left(\omega_{n}^{2 k+n}\right)+\omega_{n}^{{ }^{k+\frac{n}{2}}} f_{2}\left(\omega_{n}^{2 k+n}\right)=f_{1}\left(\omega_{n}^{2 k} * \omega_{n}^{n}\right)-\omega_{n}^{k} f_{2}\left(\omega_{n}^{2 k} * \omega_{n}^{n}\right) f(ωnk+2n)=f1(ωn2k+n)+ωnk+2nf2(ωn2k+n)=f1(ωn2k∗ωnn)−ωnkf2(ωn2k∗ωnn)
= f 1 ( ω n 2 k ) − ω n k f 2 ( ω n 2 k ) =f_{1}\left(\omega_{n}^{2 k}\right)-\omega_{n}^{k} f_{2}\left(\omega_{n}^{2 k}\right) =f1(ωn2k)−ωnkf2(ωn2k)
由于原始的傅里叶变换计算量巨大, 采用快速傅里叶变换可以极大提升运算 速度, 并且将四种基本脑波信号实现从时域到频域的转换 。
针对四种脑波,分别计算其能量谱。能量谱的计算公式为
E = ∑ i = 0 n ∣ f ( t ) ∣ 2 E=\sum_{i=0}^{n}|f(t)|^{2} E=i=0∑n∣f(t)∣2
经过查阅论文,人脑专注度与不同基本脑波之间的能量谱有着一定的关系,当人脑的注意力较为集中时, β \beta β脑波的能量值明显高于 α \alpha α脑波和 θ \theta θ脑波,反之则 β \beta β脑波的能量值低于 α \alpha α脑波和 θ \theta θ脑波,即 α \alpha α脑波和 θ \theta θ脑波占主导地位。综合三种脑波能量值,可以得到评估人脑专注度的数值指标为:
attention = E ( α ) + E ( θ ) E ( β ) \text { attention }=\frac{E(\alpha)+E(\theta)}{E(\beta)} attention =E(β)E(α)+E(θ)
方式一:
源码
方式二:
文章末尾公众号中可以直接下载
基于脑电波的注意力训练研究
基于脑电信号的疲劳驾驶检测与预警技术研究
喜欢的话可以关注一下我的公众号技术开发小圈,尤其是对深度学习以及计算机视觉有兴趣的朋友,我会把相关的源码以及更多资料发在上面,希望可以帮助到新入门的大家!