Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 非恒定采样频率的脑电信号重采样_Matlab_Signal Processing - Fatal编程技术网

Matlab 非恒定采样频率的脑电信号重采样

Matlab 非恒定采样频率的脑电信号重采样,matlab,signal-processing,Matlab,Signal Processing,我有一个非恒定采样频率的EEG信号,如下图所示 我试图对脑电信号进行重采样,以获得恒定的采样频率,以便更好地用于进一步分析 现在,我将信号分解为每个1秒的时间帧,并使用函数对它们重新采样,以获得恒定的采样频率。然而,由此产生的脑电图信号似乎是不正确的,在连接点有奇怪的波动 我认为我做得不对,所以如果可能的话,有人能提供更好的建议或给我指出正确的方向吗?谢谢 现有代码(在一个for循环中执行,每个for循环以1秒的时间帧遍历整个EEG信号): % Calculate resampling f

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

我试图对脑电信号进行重采样,以获得恒定的采样频率,以便更好地用于进一步分析

现在,我将信号分解为每个1秒的时间帧,并使用函数对它们重新采样,以获得恒定的采样频率。然而,由此产生的脑电图信号似乎是不正确的,在连接点有奇怪的波动

我认为我做得不对,所以如果可能的话,有人能提供更好的建议或给我指出正确的方向吗?谢谢

现有代码(在一个for循环中执行,每个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);

编辑:
重采样功能更改为使用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);
它似乎给了我更好的重采样数据,但我仍然不确定原始脑电信号的特征是否在重采样版本中得到保留


重新采样将仅从一个固定采样率转换为另一个固定采样率。要从非恒定采样率重新采样,必须知道每个原始样本的时间。如果您知道这些时间为
t\u orig\u sec
,则可以通过
interp1
命令将原始信号插入新的时基(
t\u new\u sec
)。您使用的插值类型(
线性
样条曲线
等)将影响插值过程产生的失真或谐波的类型

我推荐如下:

%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)。如果数据未以恒定速率到达PC,则可能是由于数据采集系统延迟将数据通过串行通信线路推出,也可能是由于操作系统延迟为接收到的串行通信提供服务

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


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

重新采样将仅从一个固定采样率转换为另一个固定采样率。要从非恒定采样率重新采样,必须知道每个原始样本的时间。如果您知道这些时间为
t\u orig\u sec
,则可以通过
interp1
命令将原始信号插入新的时基(
t\u new\u sec
)。您使用的插值类型(
线性
样条曲线
等)将影响插值过程产生的失真或谐波的类型

我推荐如下:

%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)。如果数据未以恒定速率到达PC,则可能是由于数据采集系统延迟将数据通过串行通信线路推出,也可能是由于操作系统延迟为接收到的串行通信提供服务

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

如果它发生变化,您有理由重新插值信号。要进行重新插入,您需要一个非常好的“时钟”来告诉您每个样本何时到达。我敢肯定,电脑内置的时钟不会给你提供你所需要的准确度的时间戳……时钟值可能看起来有很好的精度(即很多数字),但这并不意味着它是准确的,因为它在每个样本到达后立即给你准确的时间。我认为这里面有很多变化。这种可变性可能意味着您的重新插值将损坏信号m