傅里叶变换与EEG傅里叶变换处理
EEG与傅里叶变换
The Basics of Signal Processing
spiking和LFP(local field potential)是两种不同的时间序列,所有的neural signals都属于这两类中的一类。
LFP活动是一个连续的过程,由一系列在时间上不断变化的电压组成。
spiking活动是一个点过程,假设所有的spike事件都是相同的,它由一系列的spike时间组成。
N t N_t Nt表示 t t t时间内发生的时间总数, λ = s p i k e e v e n t s / i n t e r v a l \lambda=spike events / interval λ=spikeevents/interval, δ t = 1 m s \delta t=1ms δt=1ms, d N t dN_t dNt是 N t N_t Nt的导数。也可以表示为 ζ t = t n + 1 − t n \zeta_t=t_{n+1}-t_n ζt=tn+1−tn,表示尖峰之间的时间间隔。
d N t = { 1 − λ δ t s p i k i n g − λ δ t e l s e dN_t= \begin{cases} 1-\lambda\delta t& \text{$spiking$}\\ -\lambda\delta t& \text{$else$} \end{cases} dNt={1−λδt−λδtspikingelse
Fourier transforms
time domain与frequency domain
time domain信号可以分解成多个正弦函数,将这些正弦函数的幅值映射即可得到frequency domain 。
χ
(
f
)
=
∑
t
=
1
N
e
x
p
(
–
2
π
i
f
t
n
)
\chi(f)=\sum_{t=1}^N{ exp(–2πiftn) }
χ(f)=t=1∑Nexp(–2πiftn)
将frequency domain 信号进行反傅里叶变换可以重新得到time domain信号。
Nyquist frequency, sampling theorem, and aliasing
点信号(离散傅里叶变换)和连续信号(傅里叶变换)都可以用frequency domain 表示。
sampling theorem指出,对band-limited(不包含Nyquist rate之外的能量) analog signal 采样时,如果信号所包含的频率不超过the Nyquist rate (B Hz),采样率为
F
s
=
1
/
δ
t
F_s=1/\delta t
Fs=1/δt至少为2B Hz时,我们就可以完美的重建原始信号。
同样,使用 F s F_s Fs进行采样时,我们可以重建出的最大频率就是 F s / 2 F_s/2 Fs/2=>Nyquist frequency。
如果我们以小于Nyquist frequency的二倍的速率对信号进行采样,我们就不能无误差地重建原始信号。产生错误的原因是,在信号采样过程中,存在于高于
F
s
/
2
F_s/2
Fs/2的频率的信号分量被混叠为较低的频率。一旦信号在
F
s
F_s
Fs处取样,我们就不能再区分频率成分大于
F
s
/
2
F_s/2
Fs/2Nyquist frequency的连续过程。
Anti-aliasing filters的作用是以低于采样的Nyquist frequency频率过滤低通信号以解决高频信号aliasing成低频信号。
Method of moments for stochastic processes
前提假设
1、当我们在一个实验中测量重复试验的神经信号时,我们假设我们在每个试验中记录的信号是同一潜在随机过程的不同实现或结果。
2、假设在每个试验中产生神经信号的随机过程的特性是平稳的,并且它们的统计特性即使在试验中也不会随时间而改变。
normalized:sampling rate=1,Nyquist frequency
∈
\in
∈(–1/2,1/2)
频谱分析依赖于另一个假设:产生神经信号的随机过程具有频谱表示。
将傅里叶变换得到的
x
(
f
)
x(f)
x(f)进行傅里叶逆变换得到信号。
x
t
=
∫
−
1
2
1
2
x
(
f
)
e
x
p
(
2
π
i
f
t
)
d
f
x_t=\int^{\frac{1}{2}}_{-\frac{1}{2}}{x(f)exp(2πift)}{\rm d}f
xt=∫−2121x(f)exp(2πift)df
对于连续过程(如LFP活动)和点过程(如spiking活动),假设可以用相同的光谱表示,因此尖峰序列
t
n
t_n
tn的傅立叶变换如下:
d
N
(
f
)
=
∑
t
=
1
N
e
x
p
(
2
π
i
f
t
n
)
dN(f)=\sum_{t=1}^N{ exp(2πiftn) }
dN(f)=t=1∑Nexp(2πiftn)
spectral analysis的目标:在frequency domain 内描述这些信号的统计特性。
method of moments通过估计概率分布的矩量来表征随机过程的统计性质。一阶矩表示平均值,二阶矩表示方差和协方差。
方差(*表示复共轭)
S
X
(
f
)
δ
(
f
–
f
ʹ
)
=
E
[
x
∗
(
f
)
x
(
f
ʹ
)
]
S_X(f) δ(f – fʹ) = E[x^*(f)x(fʹ)]
SX(f)δ(f–fʹ)=E[x∗(f)x(fʹ)]
S
d
N
(
f
)
δ
(
f
–
f
ʹ
)
=
E
[
d
N
∗
(
f
)
d
N
(
f
ʹ
)
]
S_{dN}(f) δ(f – fʹ) = E[dN^*(f)dN(fʹ)]
SdN(f)δ(f–fʹ)=E[dN∗(f)dN(fʹ)]
cross-spectrum是两个过程的covariance:
S
X
Y
(
f
)
δ
(
f
–
f
ʹ
)
=
E
[
x
∗
(
f
)
y
(
f
ʹ
)
]
S_{XY}(f) δ(f – fʹ) = E[x^*(f)y(fʹ)]
SXY(f)δ(f–fʹ)=E[x∗(f)y(fʹ)]
coherence是在每个频率下每个过程之间的correlation coefficient,只是由它们的variances归一化的covariance。
C
X
Y
(
f
)
=
S
X
Y
(
f
)
S
x
(
f
)
S
y
(
f
)
C_{XY}(f) =\frac{S_{XY}(f)}{\sqrt{Sx(f)Sy(f)}}
CXY(f)=Sx(f)Sy(f)SXY(f)
Multitaper spectral estimation
频谱的最简单估计称为periodogram,它与数据序列的平方成正比。
存在的两个问题:
1、bias
narrow-band bias与不同的附近频率信号混合有关
broad-band bias与不同的较远频率信号混合有关
2、variance
periodogram只将数据平方并不求平均,因此无法收敛,难以保持一致。
将数据乘以data taper,
w
t
w_t
wt,来减少bias。
χ
(
f
)
=
∑
t
=
1
N
w
t
x
t
e
x
p
(
–
2
π
i
f
t
n
)
\chi(f)=\sum_{t=1}^N{ w_tx_t exp(–2πiftn) }
χ(f)=t=1∑Nwtxtexp(–2πiftn)
data taper度减少了距离频率的影响,但代价是模糊了附近频率的频谱。导致narrow-band bias增大,broad-band bias减小。
variance问题通过求时间序列重叠部分的平均值来解决。
multitaper spectral estimation method可以同时解决bias和variance。对数据进行多次mulity orthogonal tapers和Fourier-transformed
tapered spectral estimates的平均值(
S
M
T
(
f
)
S_{MT}(f)
SMT(f)):
S
M
T
(
f
)
=
1
K
∑
t
=
1
N
∣
x
k
(
f
)
∣
2
S_{MT}(f) = \frac{1}{K}\sum_{t=1}^N|x_k (f)|^2
SMT(f)=K1t=1∑N∣xk(f)∣2
x
k
(
f
)
=
∑
t
=
1
N
w
t
(
k
)
x
t
e
x
p
(
–
2
π
i
f
t
)
x_k(f) = \sum_{t=1}^N w_t(k)x_t exp(–2πift)
xk(f)=t=1∑Nwt(k)xtexp(–2πift)
w t ( k ) w_t(k) wt(k)可由Slepian functions给出。 w t ( k , W , N ) w_t(k, W, N) wt(k,W,N) 中 k k k为第 k k k个Slepian functions, W W W为frequency bandwidth。对 w t w_t wt进行傅里叶变换后,问题转换成找到一个 w t w_t wt是频率集中在 [ – W , W ] [–W, W] [–W,W]。在约束条件下,最大化中心参数,得到的 w t ( k , W , N ) w_t(k, W, N) wt(k,W,N)的特征向量就是Slepian。前 2 N M 2NM 2NM的特征向量的值近似等于1,其余接近0。
demodulation:通过乘相位因子 e x p ( 2 π i f 0 t ) exp(2πif_0t) exp(2πif0t)可将Slepian由 [ – W , W ] [–W, W] [–W,W]平移到 [ f 0 – W , f 0 + W ] [f_0–W, f_0+W] [f0–W,f0+W]。
通常选择所需的分析半带宽 W W W为Slepian 1 / N 1/N 1/N,然后在多页分析中采用领先的 2 N W − 1 2NW-1 2NW−1Slepian函数作为数据锥度。其余的函数逐渐恶化了光谱浓度特性。
Bandwidth selection
在定性方面,应选择带宽参数以减少方差,而不是通过增加窄带偏差过度扭曲频谱。将时间带宽积nw固定在一个较小的数字上(通常为3或4),然后随着时间改变窗口长度,直到获得足够的光谱分辨率。时间-频率分辨率的最佳选择将取决于感兴趣的频段、信号的时间动态以及可用于增加给定估计自由度的试验次数。
Calculating error bars
multitaper method提供了一种自然的方法来估计与时间序列分析中获得的大多数相应的error bars 。
两种error bar:
1、asymptotic error bar:对于大的n,可以假定第k个傅里叶变换
x
k
(
f
)
x_k(f)
xk(f)是渐近的,在某些一般情况下是正态分布的。谱估计值是根据用
S
(
f
)
d
o
f
\frac{S(f)}{dof}
dofS(f)分布缩放的
χ
d
o
f
2
χ^2_{dof}
χdof2 渐近分布的。
d
o
f
dof
dof(degrees of freedom)由估算频谱的平均数据维度总数给出,等于试验次数乘以维度数。
2、 jackknife error bars:使用局部整体频率来估计光谱和所有其他光谱量的jackknife error bars。创建不同的估计,省去了data taper。创建一组光谱估计,形成一个empirical distribution,可以基于这种分布构造各种error bars。如果我们使用variance稳定变换,empirical distribution可以很好地近似使用Gaussian distribution。然后通过估计分布的variance并确定设置误差条的critical values,根据正常间隔计算误差条。
Correlation functions
correlation functions等价于计算光谱量,但具有重要的统计差异。temporal correlation functions的error bar是非局部的,意味着correlation functions在一个滞后时的不确定性受跨其他滞后的correlation functions值的影响,因此,必须通过假设不同时间段之间没有依赖关系来构造correlation functions的error bar。
Coherence
两个时间序列和相应的 multiple tapered的傅里叶变换
x
k
(
f
)
x_k(f)
xk(f),
y
k
(
f
)
y_k(f)
yk(f) ,可以定义coherence function如下:
C
X
Y
(
f
)
=
1
k
∑
k
x
k
∗
(
f
)
y
k
(
f
)
S
x
(
f
)
S
y
(
f
)
C_{XY}(f) =\frac{\frac{1}{k}\sum_kx_k^* (f)y_k(f)}{\sqrt{Sx(f)Sy(f)}}
CXY(f)=Sx(f)Sy(f)k1∑kxk∗(f)yk(f)
增加试验次数将增加估计的有效分辨率。
Regression using spectral feature vectors
周期信号检测是神经数据分析中经常出现的一个重要问题。这种信号可能由于周期性刺激而产生,并表现为50/60Hz线路噪声。在初步估计中,periodic components在spectrum中以尖峰的形式出现,而对于使用Slepians的multitaper estimation,由于narrow-band bias,尖峰出现在平顶上
我们考虑考虑一个嵌入在白噪声中的正弦曲线: x ( t ) = A c o s ( 2 π f t + ϕ ) + η ( t ) x(t) = A cos(2 πft + ϕ ) + η (t) x(t)=Acos(2πft+ϕ)+η(t),通常采用最小二乘法,通过最小化平方和 ∑ ∣ x ( t ) – A c o s ( 2 π f o t + φ ) ∣ 2 t ∑|x(t)–Acos(2πf_ot+φ)|^2t ∑∣x(t)–Acos(2πfot+φ)∣2t,得到 A A A和 φ φ φ。
从包含n个样本的数据序列开始,将方程的两边乘以带宽参数为
2
W
2W
2W的Slepian taper
w
k
(
t
)
w_k(t)
wk(t),然后进行傅立叶变换,得到以下结果
x
k
(
f
)
=
μ
U
k
(
f
–
f
o
)
+
μ
∗
U
k
(
f
–
f
o
)
+
N
k
(
f
)
x_k(f) = μU_k(f – f_o) + μ^*U_k(f – f_o) + N_k(f)
xk(f)=μUk(f–fo)+μ∗Uk(f–fo)+Nk(f)其中
μ
=
A
e
x
p
(
i
φ
)
μ = A exp(i φ )
μ=Aexp(iφ),
U
k
(
f
)
U_k(f)
Uk(f)和
N
k
(
f
)
N_k(f)
Nk(f)是
w
k
(
f
)
w_k(f)
wk(f)和
η
(
t
)
η(t)
η(t)的傅里叶变换。
如果
f
o
f_o
fo大于带宽
W
W
W,则
f
−
f
o
f-f_o
f−fo和
f
+
f
o
f+f_o
f+fo之间的间隔大于
2
W
2W
2W,而
u
k
(
f
−
f
o
)
u_k(f-f_o)
uk(f−fo)和
u
k
(
f
+
f
o
)
u_k(f+f_o)
uk(f+fo)的重叠最小。在这种情况下,可以设置
f
=
f
o
f=f_o
f=fo,忽略
u
k
(
f
+
f
o
)
u_k(f+f_o)
uk(f+fo)项,得到
f
=
f
o
f=f_o
f=fo 时的线性回归方程:
x
k
(
f
)
=
μ
U
k
(
O
)
+
N
k
(
f
o
)
x_k(f) = μU_k(O) + N_k(f_o)
xk(f)=μUk(O)+Nk(fo)约束条件:
μ
(
f
0
)
=
∑
k
=
1
K
U
k
(
O
)
x
k
(
f
o
)
∑
k
=
1
K
∣
U
k
(
O
)
∣
2
μ(f_0) =\frac{\sum_{k=1} ^KU_k(O) x_k (f_o) }{\sum_{k=1} ^K|Uk(O)|^2}
μ(f0)=∑k=1K∣Uk(O)∣2∑k=1KUk(O)xk(fo)
该模型的拟合优度可使用自由度为(2,2k−2)的 F-ratio 统计量进行测试,该统计量通常作为频率函数绘制,以确定频谱中重要正弦峰的位置:
F
(
f
)
=
(
K
−
1
)
∣
μ
(
f
)
∣
2
∑
k
=
1
K
∣
U
k
(
O
)
∣
2
∑
k
=
1
K
∣
x
k
(
f
)
–
μ
(
f
)
U
k
(
O
)
∣
F(f) =\frac{(K-1)|μ(f)|^2\sum_{k=1}^K|Uk(O)|^2}{\sum_{k=1}^K|x_k (f) – μ(f)U_k(O) |}
F(f)=∑k=1K∣xk(f)–μ(f)Uk(O)∣(K−1)∣μ(f)∣2∑k=1K∣Uk(O)∣2一旦计算出F-ratio ,F-test认为显著的、超过显著性水平
1
–
1
/
N
1–1/N
1–1/N的峰可以从原始过程中去除,以获得光谱平滑部分的重塑估计:
S
r
e
s
h
a
p
e
d
(
f
)
=
1
K
∑
k
=
1
K
∣
x
k
(
f
)
–
∑
i
μ
i
U
k
(
f
–
f
i
)
∣
S_{reshaped}(f) = \frac{1}{K}\sum_{k=1}^K | x_k (f) – \sum_iμ_iU_k(f – f_i)|
Sreshaped(f)=K1k=1∑K∣xk(f)–i∑μiUk(f–fi)∣这种重构估计可以用先前确定的线性分量进行扩充,以获得所谓的混合谱估计。
EEG傅里叶变换处理例子
选取数据集Music BCI (006-2015)Music BCI (006-2015)第一个数据集的第一个channel数据作为实验。
由于EEG是时间序列,很多高频信号非常重要,如果进行傅里叶变换时降采样会丢失很多重要的信息分量。因此不建议在原始数据的基础上进行降采样。所以本文采取的时选取连续一定长度的数据进行傅里叶变换,观察其特点。
代码
nfft=1000;%要进行变换的数据点的个数
Hz=200;%原始数据的采样频率
F=1:nfft;
tmp=fft(dataf(1,1:nfft));%进行傅里叶变换
figure
xlabel('频率(Hz)');
ylabel('幅值');
title('频率-幅度');
plot(F(1:nfft/2)*Hz/nfft,log(abs(tmp(1,1:nfft/2))));
效果图
傅里叶变换相当于将数据从空间域转换到频率域。变换后将其绘制成折线图的横坐标代表频率,纵坐标代表幅值。由于傅里叶变换后是对称的,所以我们只取前一半的数据。横坐标频率的范围只与原始数据的采样频率有关,为原始数据的采样频率的一半。如,本文使用的数据集的采样频率为200Hz,我们对前100个数据点进行傅里叶变换后,第50个点(傅里叶变换后的前一半)对应的频率即为200Hz/2=100Hz。
变换时使用的数据个数不影响横坐标的取值范围,但是决定对变换到频率域时,对频率的采样频率。即,在采样频率还是200Hz时,我们对前100个数据点进行傅里叶变换,相对于对频率采样了50次,也可以理解为将100Hz平均分成了 50份,每一份频率计算出了一个赋值。我们对前500个数据点进行傅里叶变换,相对于对频率采样了250次,即将100Hz平均分成了250份。
matlab中内置fft函数中的第二个参数当选择为大于数据点的个数时,相当于在数据点后面添加0直到长度满足第二个参数的大小,这样会使变换后的结果出现误差。我们使用同样的数据进行对比一下。
代码
nfft=1000;
fttsecond=nfft*2;%2^nextpow2(nfft);
Hz=200;
F=1:fttsecond;
tmp=fft(dataf(1,1:nfft),fttsecond);
figure
plot(F(1:fttsecond/2)*Hz/nfft,log(abs(tmp(1,1:fttsecond/2))));
xlabel('频率(Hz)');
ylabel('幅值');
title('频率-幅度');
效果图
我们可以对比这一张和上面的效果图,可以发现这一张波动要大一些,相比之下不如上一张平滑。因此,当我们需要采样更多的频率时,建议选取更多的数据点,而不是直接使用函数在数据后增加0。
我们可以发现经过傅里叶变换后得到的频率图并不是很光滑,因此我们考虑使用多次变换取平均的方法进行尝试。由于我们需要关注原始数据的能量(功率),应把多次变换后的结果进行平方后取平均再开方。
代码
Hz=200%hz
for i=1:64%数据集中有64个channel,对每一个channel分别进行处理
nfft = 200;
F=1:nfft
sumfft=zeros(1,nfft);
for j=1:10%对前十秒的数据每一秒变换后平方再取平均,最后再开方
datatmp=dataf(i,(j-1)*200+1:j*200)
ffttmp=fft(datatmp);
ffttmp=abs(ffttmp);
ffttmp=ffttmp.*ffttmp;
sumfft=sumfft+ffttmp;
end
sumfft=sqrt(sumfft./10);
plot(F(1:nfft/2)*Hz/nfft,log(sumfft(1:nfft/2)));
xlabel('频率(Hz)');
ylabel('幅值');
title('频率-幅度');
end
效果(以第一channel为例)
直接对前200个数据点进行傅里叶变换的对比图如下:
可以看出对功率进行平均后,效果好了很多。