实际上,由于计算机无法处理连续信号,因此
原始信号在特定位置采样到一组离散数据点
采样次数。采样速度称为采样率。例如
我们的大多数电路板使用250Hz的采样率,这意味着250个数据点将
,两个相邻数据点之间的间隔将
be 1/250秒=4毫秒。采样过程如下所示。
由于原始数据是离散的,FFT的输出也将是一组
离散数据点如下图所示。如果FFT采用L采样
采样率为Fs时的数据点(称为长度-L FFT),然后生成L
数据点或L频率箱,其中第i个箱(i从0开始)具有
i*Fs/L的中心频率,在频谱中与Fs/L一样宽。通常是L
是二的幂。由于原始FFT幅度谱是对称的,因此
然后折叠成单侧频谱以显示真实振幅。新的
频谱的频率范围为0~Fs/2,从信号中心开始
第0个到第1/2个箱子,总共覆盖1/2+1个箱子。
在浏览器专业版中打开你是开发人员吗?试用HTML到PDF API pdfcrowd。通用域名格式
如何在OpenBCI GUI中读取FFT图?
在GUI中,我们看到的FFT图基本上是
经过处理的信号(稍后在高级部分中解释),FFT的结果是
在dB空间中随时间平滑。
那么,如何读取给定的振幅谱?例如,如果您看到
给定如下图所示的FFT幅度谱,可以在
约12 Hz,约0.87 uV。这意味着原始信号是
主要由以12Hz左右的频率振动的正弦波组成-
0.87V至+0.87V。
事实上,原始信号是振幅为1.0V、频率为12Hz的正弦波
在浏览器专业版中打开你是开发人员吗?试用HTML到PDF API pdfcrowd.com
频率这种差异是在采样数据不一致时产生的
具有足够的代表性,则FFT将假设较小的幅度扩展
围绕频谱中的实际频率,并降低峰值振幅。
这种现象称为频谱泄漏。
为了处理频谱泄漏,引入了窗口函数。图像
下面显示了理想的傅立叶变换、无窗FFT和FFT
应用汉明窗口后。你可以看到,虽然峰值振幅是
在加窗后,频谱泄漏甚至衰减得更厉害。(更好
如果应用能量补偿)
随着时间的推移变得平滑?
由于EEG数据buff通常每1/5秒刷新一次,FFT计算
最新的数据集也是每1/5秒一次。然后对FFT值进行平滑处理
dB当前FFT值和最后一个FFT值之间的空间。平滑的
然后使用0-1之间的系数。因子是指前一个变量的权重
一组FFT值,因此因子越高,FFT越平滑。
钥匙:
1-1该峰值的频率约为10Hz,其振幅约为2
紫外线。
在浏览器专业版中打开你是开发人员吗?试用HTML到PDF API pdfcrowd.com
1-2因为采样率意味着一秒钟内有多少个数据点
必修的。在这种情况下,两个相邻数据点之间的时间跨度为1/250秒。
长度为256的FFT计算256个数据点。因此,时间跨度为256
数据点为256*1/250秒=1.024秒=1024毫秒。
1-3,因为0Hz是第0个箱子的中心频率,250 Hz是中心频率
第256格的频率,第25格的中心频率将为25*250/256
=24.41 Hz。由于20 Hz的可能指数为20*256/250=20.48,因此应
属于第20个箱子。(第20个箱子的中心频率为19.53
第21个箱子的频率为20.5,两个箱子之间的边界为19.53+20.5=
20.015Hz,因此20Hz落在第20个箱子的右半部分)。
1-4减少频谱泄漏的影响。
1-5它通常每1/5秒刷新一次。使绘图更平滑
需要平滑因子,例如0.9。
Lv2(中间):在GUI中使用FFT
以下任务是本节的目标。如果你能回答所有的问题,
您可以跳过本节,继续下一节。
//-------开始任务#2-------
任务2-1:起点
在GUI中有一个方便的地方来存放自己的FFT代码?
任务2-2:阿尔法峰
如何编写一段代码来查找
α波段,如果α波段定义为7-13 Hz?
在浏览器专业版中打开你是开发人员吗?试用HTML到PDF API pdfcrowd.com
任务2-3:信息流
从原始EEG数据到最终平滑FFT的过程是什么
?
//-------任务结束#2-------
在GUI中设置代码:
OpenBCI GUI使用Minim库计算FFT。
Nfft注册FFT的长度,fftBuff[]保存最新的FFT数据
从每个通道。
OpenBCI板的采样率可以通过调用
openBCI.get\u fs\u Hz()。Minim要求该采样率转换bin
索引到中心频率。
A.然后为FFT计算指定一个汉明窗口(以减少频谱
泄漏)。
如果你想用FFT创造一些有趣的东西,你的出发点是
下面是代码主干。之后,您可以通过搜索FFT\u freq\u Hz来找到它
检查OpenBCI GUI中的“所有选项卡”。
在浏览器专业版中打开你是开发人员吗?试用HTML到PDF API pdfcrowd.com
外回路通过所有可用通道,内回路通过
通过所有有效的FFT箱。
fftData(与fftBuff相同)保存nchan的单侧振幅谱
数据通道,每个通道有1/2+1个FFT箱。此数量的箱子
可以通过Minim提供的.specSize()函数访问。
然后在循环中,这两个值是您需要的:
fftData[Ichan]。indexToFreq(Ibin)是Minim库中的一个函数。它回来了
通过查找其索引得到FFT箱的中心频率(FFT图中的x值)。
fftData[Ichan]。getBand(Ibin)是Minim库中的一个函数。它返回
FFT箱在uV中的振幅。
钥匙:
2-1下载OpenBCI GUI的副本。打开编辑->查找,选中“全部”
选项卡”,键入“FFT\u freq\u Hz”。您应该能够找到所需的
密码
在浏览器专业版中打开你是开发人员吗?试用HTML到PDF API pdfcrowd.com
2-2代码示例(绿线是添加的行):
2-3在EEG buff内传递最新的256点原始EEG数据,a
计算前使用汉明窗,然后使用单边FFT频谱
计算并存储在fftBuff[]内,然后对fftBuff[]值进行平滑处理
具有以前的fftBuff[]值。
在浏览器专业版中打开你是开发人员吗?试用HTML到PDF API pdfcrowd.com
采样原始uV->汉明窗口->fftBuff[]->平滑fftBuff[]
3级(高级):更详细
这里没有测验。如果你喜欢,请阅读
关于GUI中FFT的整个故事:
导入最小库,初始化FFT:
计算FFT并转换为单波段:
在浏览器专业版中打开你是开发人员吗?试用HTML到PDF API pdfcrowd.com
在dB空间中平滑:
复制GUI过程的Matlab版本
概述:
(较旧版本的GUI根据原始数据计算FFT,较新版本将
对滤波后的数据应用FFT。此处使用滤波脑电图)
在浏览器专业版中打开你是开发人员吗?试用HTML到PDF API pdfcrowd.com
加窗和计算单边FFT幅度谱:
1、间隔定义为缓冲区自身刷新的速度。这里有50个数据点
250Hz采样率表示1/5秒。
2、为了减少频谱泄漏,对原稿应用汉明窗口
信号:temp\u han=temp\u dat.*hamming(L);
3.然后,计算FFT幅度的方程为:temp\u mag=abs(FFT(temp\u han));
4、为了将其转换为单边频谱,抛出FFT频谱的右半部分,
然后将除第一个(DC)和最后一个(在奈奎斯特频率下)外的任何点乘以
两个用于校正振幅:temp\u mag=temp\u mag(1:L/2+1);temp\u mag(2:end-1)=
2*temp\u mag(2:end-1);
dB空间中的平滑:
在浏览器专业版中打开你是开发人员吗?试用HTML到PDF API pdfcrowd.com
上述Matlab代码将很快提供。 |