matlab脑电信号特征提取代码
时间: 2023-07-03 18:30:18 浏览: 347
以下是一个简单的 Matlab 代码示例,用于提取脑电信号的特征:
```matlab
% 导入脑电信号数据
data = load('eeg_data.mat');
eeg_signal = data.eeg_signal;
% 滤波
fs = 256; % 采样率
fc = [0.5 30]; % 截止频率
[b,a] = butter(4,fc/(fs/2),'bandpass'); % 带通滤波器
filtered_signal = filtfilt(b,a,eeg_signal);
% 特征提取
window_size = 256; % 窗口大小
step_size = 128; % 步长
num_channels = size(filtered_signal, 2); % 通道数
num_features = 4; % 特征数
num_windows = floor((size(filtered_signal, 1) - window_size) / step_size) + 1; % 窗口数
features = zeros(num_windows, num_channels * num_features); % 特征矩阵
for i = 1:num_windows
window_start = (i - 1) * step_size + 1;
window_end = window_start + window_size - 1;
window_data = filtered_signal(window_start:window_end, :);
features(i, :) = extract_features(window_data);
end
% 特征函数
function f = extract_features(data)
% 计算平均功率谱密度
psd = pwelch(data);
mean_power = mean(psd);
% 计算方差
variance = var(data);
% 计算偏度
skewness = skewness(data);
% 计算峰度
kurtosis = kurtosis(data);
% 将特征串联成一行向量
f = [mean_power variance skewness kurtosis];
end
```
上述代码首先导入脑电信号数据,并进行带通滤波以去除不需要的频率成分。接下来,使用滑动窗口的方法对每个窗口进行特征提取。特征包括平均功率谱密度、方差、偏度和峰度。最后,将所有特征串联成一行向量,形成一个特征矩阵,可以用于后续的分类或回归任务。
阅读全文