以非恒定采样频率重新采样EEG信号

时间:2014-12-18 03:39:36

标签: matlab signal-processing

我有一个非恒定采样频率的EEG信号,如下图所示。

EEG Signal with a non-constant sampling frequency

我正在尝试对EEG信号进行重新采样,以获得恒定的采样频率,以便更好地用于进一步分析。

EEG Signal with a constant sampling frequency

现在,我将信号分成每个1秒的时间帧,并使用resample函数重新采样它们以获得恒定的采样频率。但是,由此产生的EEG信号似乎不正确,连接点出现奇怪的波动。

Resampled EEG Signal

我不认为我这样做是正确的,所以如果有可能,有人可以提供更好的建议或指出我正确的方向吗?感谢。

现有代码(在for循环中执行,在每个1秒的时间范围内通过整个EEG信号):

% Calculate resampling factors p & q
% Fs(currSecond) gives the number of samples within that time frame of 1 second
% nFS is the target sampling frequency (constant) to be achieved for each time frame

[p, q] = rat(nFs/Fs(currSecond), 0.0000000001);

% Calculate the end of data to be resampled
endSample = currSample + Fs(currSecond) - 1;

% Resample EEG data
EEG_Data_Resampled = ...
    resample(EEG_Data_Trimmed(currSample : endSample, 1:4), p, q, 0);

% Store resampled EEG data
nCombinedData(startRow : endRow, 2:5) = num2cell(EEG_Data_Resampled);

% Update starting sample for next iteration
currSample = currSample + Fs(currSecond);


修改:将resample函数更改为使用n值0

% If you let n = 0, resample performs a nearest-neighbor interpolation
% Resample EEG data
    EEG_Data_Resampled = ...
        resample(EEG_Data_Trimmed(currSample : endSample, 1:4), p, q, 0);

它似乎给了我更好的重采样数据,但我仍然不确定是否为重采样版本保留了原始EEG信号的功能。

enter image description here

1 个答案:

答案 0 :(得分:3)

重新采样只会从一个固定的采样率转换为另一个。要从非恒定采样率重新采样,您必须知道每个原始采样的时间。如果您知道这些时间为t_orig_sec,则可以通过t_new_sec命令将原始信号插入新的时基(interp1)。您使用什么类型的插值(linearspline等)会影响插值过程产生的失真或谐波类型。

我建议像:

%given: t_orig_sec and eeg_data
%interpolate to a new, fixed sample rate: fs

fs = 250;  %new sample rate in Hz
dt_sec = 1/fs;
t_new_sec = [t_orig_sec(1):dt_sec:t_orig_sec(end)]  %new time vector
new_eeg_data = interp1(t_orig_sec, eeg_data, t_new_sec, 'spline');

更大的问题是,你的eeg信号是否真的被采样不均匀。几乎每个数据采集系统都意味着连续信号(如EEG)以恒定速率采样。如果该数据未以恒定速率到达您的PC,则可能是由于数据采集系统中的延迟将数据推出串行通信线路,或者可能是由于操作系统延迟服务于接收到的串行数据通信。

在重新采样信号之前,我强烈建议您确认您的系统确实采样不均匀。我会将一个已知的恒定频率信号注入你的EEG系统(你可能需要用电阻器分割你注入的信号以获得更低的电压)。然后,我会查看为您注入的信号记录的数据。假设系统具有恒定的采样率并查看记录信号的频谱图。如果记录信号的频率稳定,那么您的EEG系统将以恒定的采样率正确记录。如果录制信号的频率发生变化,那么您将确认您的系统具有不同的采样率。

如果它变化,您有理由重新插入信号。要进行重新插入,你需要一个非常好的“时钟”来告诉你每个样本何时到达。我很确定PC中内置的时钟不会给你时间戳你需要的精确度......时钟值可能看起来具有良好的精度(即很多数字),但这并不意味着这是准确的,因为它可以在每个样品到达时立即为您提供准确的时间。我认为那里存在很多变化。这种可变性可能意味着您的重新插值会损坏信号,就像修复信号一样。