睡眠分期python代码
时间: 2023-08-30 21:10:16 浏览: 60
以下是简单的睡眠分期 Python 代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# EEG 信号数据
eeg_data = np.loadtxt("eeg_data.txt")
# 绘制 EEG 数据
plt.plot(eeg_data)
plt.title("Raw EEG")
plt.xlabel("Sample")
plt.ylabel("Voltage (μV)")
plt.show()
# 定义 PSD 函数
def power_spectrum_density(data):
sampling_rate = 256 # 采样频率
n = len(data)
freq = np.fft.fftfreq(n, 1 / sampling_rate)[:n//2] # 计算频率
data_fft = np.fft.fft(data) # 傅里叶变换
data_psd = (1/(sampling_rate * n) * np.abs(data_fft[:n//2])**2) # PSD 公式计算功率谱密度
return freq, data_psd
# 分析睡眠阶段
def sleep_stages(eeg_data):
alpha_freqs = (8, 13) # alpha 波频率
delta_freqs = (0.5, 4) # delta 波频率
eeg_power = []
for i in range(0, len(eeg_data), 256):
windowed_data = eeg_data[i:i+256] # 取 1s 数据
freq, psd = power_spectrum_density(windowed_data) # PSD 函数计算功率谱密度
# 计算 alpha & delta 波功率
alpha_power = np.sum(psd[(freq >= alpha_freqs[0]) & (freq <= alpha_freqs[1])])
delta_power = np.sum(psd[(freq >= delta_freqs[0]) & (freq <= delta_freqs[1])])
eeg_power.append([alpha_power, delta_power])
eeg_power = np.array(eeg_power)
# 根据 alpha & delta 波功率分配睡眠阶段
sleep_stages = []
for alpha, delta in eeg_power:
if alpha < delta:
stage = "N3"
elif alpha > delta:
stage = "N1"
else:
stage = "N2"
sleep_stages.append(stage)
return sleep_stages
# 输出睡眠阶段
print(sleep_stages(eeg_data))
```
说明:
此代码实现了以下功能:
- 加载 EEG 信号数据
- 绘制原始 EEG 数据图像
- 定义 PSD(功率谱密度)函数
- 分析睡眠阶段的 Alpha & Delta 波功率分配
- 根据 Alpha & Delta 波功率分配睡眠阶段
- 输出睡眠阶段