求和频谱

Summing Frequency Spectrums

我有一组来自 EEG 设备的数据,我想从中找到 Matlab 中不同脑电波的强度。我尝试使用 EEGLAB,但不确定如何使用,所以此时我只是使用 Matlab 中的 dsp 工具箱。

对于背景:我有 15 个时期,长度为 4 秒。该设备以 256 Hz 采样,并且有 264 个传感器,因此每个 epoch 每个传感器有 1024 个数据点,即我的原始数据是 264 x 1024 x 15。基线被删除。每个时期的数据最终将用于训练分类器,所以我单独处理每个时期。稍后我会拿出更多的数据样本。

无论如何,到目前为止我所做的是对数据应用 Hann 过滤器,然后对过滤后的数据应用 运行 fft。所以现在我有了频域的信息。但是,我不太确定如何从 fft 桶的功率到某些频带的功率(例如 alpha 8-13),以获得我寻求的值。

我知道答案应该很简单,但我似乎无法在网上找到我想要的答案,然后某些来源推荐使用小波变换,这进一步混淆了?这是我到目前为止的一点代码,输入 "data" 是一个纪元,即 264 x 1024.

% apply a hann window
siz = size(data);
hann_window = hann(siz(2));
hann_window = repmat(hann_window.', siz(1), 1);
hann_data = data.' * hann_window; 

% run fft
X = fft(hann_data, [], 2);
X_mag = abs(X);
X_mag = X_mag.';

感谢协助!

如果我对你的问题的理解是正确的,那么你想要缩放 FFT 输出以获得正确的功率。为此,您需要除以用于 FFT 的样本数。

X_mag = abs(X)/length(hann_data); % This gives the correct power.

查看此question了解更多信息。

正确缩放内容后,您可以通过对从频带开始到结束的内容进行积分来找到频带(例如 8 - 13 Hz)中的功率。由于您正在处理离散值,因此它是 discrete integration。从角度看,这相当于改变频谱分析仪的分辨率带宽。