FFT分析的终极指南
在OpenBCI GUI和Matlab中
这是OpenBCI和Matlab中FFT的终极指南!!
您可能想知道FFT是什么意思,您可能想使用它的一些值
在GUI中,但不知道在何处以及如何重新实现
从GUI到Matlab的漂亮FFT供将来使用…
从入门级到高级,希望您能在这里找到所需的一切处理后的信号(稍后在高级部分中解释),FFT的结果为
在dB空间中随时间平滑。
那么,如何读取给定的振幅谱?例如,如果您看到
给定如下图所示的FFT振幅谱,您可以在
大约12Hz,大约0.87uV。这意味着原始信号是
主要由以大约12Hz振动的正弦波组成-
0.87V至+0.87V。
实际上,原始信号是振幅为1.0V、频率为12Hz的正弦波
在浏览器中打开PRO版本您是开发人员吗?试用HTML转PDF API频率当采样数据不是
具有足够的代表性,那么FFT将假定较小的振幅扩展
并降低峰值振幅。
这种现象称为频谱泄漏。
为了处理频谱泄漏,引入了窗口函数。图像
下面显示了理想的傅里叶变换、无窗FFT和FFT
在应用hamming窗口之后。你可以看到,虽然峰值振幅是
在加窗之后,频谱泄漏被减少。(更好
如果应用能量补偿)
随着时间的推移变得平滑?
由于EEG数据buff通常每1/5秒刷新一次,FFT计算
也每1/5秒更新一次最新数据集。然后将FFT值平滑化
当前FFT值和最后FFT值之间的dB间隔。光滑的
然后使用0-1之间的因子。该系数表示前一项的权重
一组FFT值,因此因子越高,FFT将越平滑。
钥匙:
1-1该峰值的频率约为10Hz,振幅约为2
uV。
在浏览器中打开PRO版本您是开发人员吗?试用HTML转PDF API pdfcrow.com
1-2因为采样率意味着一秒钟内有多少个数据点
必修的。在这种情况下,两个相邻数据点之间的时间跨度为1/250秒。
长度为256的FFT计算256个数据点。因此,256
数据点是256*1/250s=1.024s=1024ms。
1-3因为0Hz是第0个音箱的中心频率,250Hz是中心频率
第256个二进制的频率,第25个二进制的中心频率将为25*250/256
=24.41赫兹。由于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。
2级(中级):在GUI中使用FFT
下面的任务是本节的目标。如果你能回答所有问题,
您可以跳过这一节,继续下一节。
//-------开始任务#2-------
任务2-1:起点
在GUI中方便地放置您自己的FFT代码?
任务2-2:阿尔法峰
如何编写一段代码来查找峰值频率(峰值频率)
α带,如果α带定义为7-13 Hz?
在浏览器中打开PRO版本您是开发人员吗?试用HTML转PDF API pdfcrow.com
任务2-3:信息流
从原始EEG数据到最终平滑FFT的过程是什么
?
//-------任务#2结束------
在GUI中设置代码:
OpenBCI GUI使用Minim库来计算FFT。
Nfft登记FFT的长度,fftBuff[]保存最近的FFT数据
从每个通道。
OpenBCI板的采样率可以通过调用
openBCI.get_fs_Hz()。Minim要求此采样率转换bin
索引为中心频率。
然后指定Hamming窗口进行FFT计算(以减少频谱
泄漏)。
如果你想用FFT创造一些有趣的东西,你的出发点是
下面的代码主干。您可以在以下位置搜索FFT_freq_Hz
检查OpenBCI GUI中的“所有选项卡”。
在浏览器中打开PRO版本您是开发人员吗?试用HTML转PDF API pdfcrow.com
外部循环通过所有可用通道,内部循环通过
通过所有有效的FFT箱。
fftData(与fftBuff相同)持有nchan的单边振幅谱
并且每个信道具有L/2+1个FFT箱。此数量的垃圾箱
可以通过Minim提供的.specSize()函数访问。
然后在循环中,这两个值就是您需要的值:
fftData[Ichan]。indexToFreq(Ibin)是Minim库中的一个函数。它又回来了
通过查找其索引来确定FFT箱的中心频率(FFT图中的x值)。
fftData[Ichan]。getBand(Ibin)是Minim库中的一个函数。它返回
FFT箱的振幅(uV)。
钥匙:
2-1下载OpenBCI GUI的副本。打开编辑->查找,选中“全部”
tabs”,输入“FFT_freq_Hz”。你应该能够找到所需的
密码
在浏览器中打开PRO版本您是开发人员吗?试用HTML转PDF API pdfcrow.com
2-2代码样本(绿线为
1级(初学者):理解FFT图
下面的任务是本节的目标。如果你能回答所有问题,
您可以跳过这一节,继续下一节。任务1-1:阅读情节
如果阿尔法频带定义为7–13Hz之间的频带,则可以看到
发布时间:2016年8月3日
加入我们的邮件列表并了解最新信息
开放式BCI
登录
参加
通过使用本地广告,您可以轻松地获取数据
在浏览器中打开PRO版本您是开发人员吗?试用HTML转PDF API pdfcrow.com
在下面的图像中,该带中的峰值。那么频率是多少
这个峰值的振幅?这是什么意思?
任务1-2:采样率和时间跨度
如果FFT的长度为256,采样率为250Hz。有多少
它计算的数据是多少毫秒?
任务1-3:垃圾箱的中心频率和索引
如果FFT的长度为256,采样率为250Hz。如果箱子的索引
从0开始,那么第25个bin的中心频率是多少?索引是什么
20Hz属于哪个箱子?
任务1-4:窗口功能
在浏览器中打开PRO版本您是开发人员吗?试用HTML转PDF API pdfcrow.com
使用窗口函数有什么好处?
任务1-5:缓冲区刷新和平滑因子
FFT缓冲区通常刷新自己的速度有多快?如果FFT的默认值
GUI中的平滑因子为0.75,并且您希望FFT绘图为偶数
在时间上更平滑,您应该选择更高还是更低的值?
//------–任务#1结束------
首先,为什么要FFT?
众所周知,脑电波有时会表现出一些有节奏的行为。
例如,当一个健康的人闭上眼睛时
脑波将显示一种节奏模式,每秒振动7-13次,并且
这种模式被称为阿尔法波。由于此特征与频率相关,因此FFT
可用于容易地显示频率分量
α活性。
在浏览器中打开PRO版本您是开发人员吗?试用HTML转PDF API pdfcrow.com
阿尔法活动(您可以在两个相邻条之间计数大约10个峰值,即。
1秒内10次循环)
什么是FFT?
快速傅里叶变换(FFT)是一个非常强大的工具,可以揭示
即使当信号受到噪声影响时。
FFT起源于傅里叶变换(FT),一种数学方法
通过将任何周期信号分解为
正弦和余弦波的组合。为了适应数字信号
提出了傅立叶变换的版本,并命名为离散傅立叶
变换(DFT)。为了更有效地计算DFT,一种更快的算法是
开发了FFT。
从《金融时报》开始,下面是一个动画(来自维基百科),说明了它是如何做到的
作品你可以看到方波信号被分解成正弦和余弦
不同频率(频率分量)的波,以及每个频率
分量有一个特定的振幅(和相位,尽管我们不会详细说明
这)。动画中的蓝色图形称为振幅谱。
它显示了不同频率下的振幅,其中水平轴
纵轴表示振幅。
在浏览器中打开PRO版本您是开发人员吗?试用HTML转PDF API pdfcrow.com
实际上,由于计算机无法处理连续信号
原始信号被采样成一组离散数据点
采样时间。采样速度称为采样率。例如
我们的大多数电路板使用250Hz的采样率,这意味着250个数据点将
并且两个相邻数据点之间的间隔将
采样过程如下所示。
由于原始数据是离散的,FFT的输出也将是一组
离散数据点,如下图所示。如果FFT取L采样
采样率为Fs的数据点(称为length-L FFT),然后生成L
数据点或L个频率区间,其中第i个区间(i从0开始)具有
中心频率为i*Fs/L,并且在频谱中与Fs/L一样宽。通常为L
是二的幂。由于原始FFT振幅谱是对称的
然后折叠成单边谱以揭示真实振幅。新的
频谱的频率范围为0~Fs/2,从
第0个至第L/2个垃圾箱,总共覆盖L/2+1个垃圾箱。
在浏览器中打开PRO版本您是开发人员吗?试试HTML到PDF的API pdfcrow。通用域名格式
如何在OpenBCI GUI中读取FFT图?
在GUI中,我们看到的FFT图基本上是FFT振幅谱 |