将已经转化成mat格式的chb-mit数据进行滤波,滤波范围0-50hz!
import os
import scipy.io as sio
import scipy.signal as signal
import numpy as np
# 原始数据文件夹路径
input_folder = '.../CHB-MIT-mat' #输入你的chb-mit转化为mat数据后的文件夹地址
# 滤波后数据保存路径
output_folder = '.../CHB-MAT-Filter' #输入你要保存到的文件夹地址
# 定义滤波参数
fs = 256 # 采样频率(示例中假设为256Hz) #因为chb-mit数据采样频率是256hz
low_cutoff = 0.5 # 低频截止频率为0.5Hz #不知道为什么是0.5 是cgpt告诉我的 附上cgpt解释
'''
低频截止频率设置为0.5 Hz是一个示例值,可以根据你的具体数据和需求来调整。低频截止频率的选择通常依赖于你希望保留的最低频率分量。在一些脑电信号分析中,一些基本的生理节律或信号成分可能出现在低频范围内,因此需要保留这些低频分量。
然而,低频截止频率的具体值应该根据你的数据和分析任务来选择。如果你的应用中没有特殊的低频信号成分,你可以将低频截止频率设置为更低的值,甚至为0,以去除可能的直流偏移或其他低频噪音。如果你的数据中包含重要的低频信息,那么你需要根据你的研究问题来选择适当的截止频率。
通常,低频截止频率的选择需要结合领域知识和实际数据来进行。在脑电信号分析中,通常会考虑到信号的基本频率成分,如0.5 Hz、1 Hz等,但具体的设置会因研究问题而异。
'''
high_cutoff = 50.0 # 高频截止频率为50Hz
# 获取所有子文件夹
subfolders = [f for f in os.listdir(input_folder) if os.path.isdir(os.path.join(input_folder, f))]
# 遍历每个子文件夹
for subfolder in subfolders:
# 创建输出子文件夹
output_subfolder = os.path.join(output_folder, subfolder)
os.makedirs(output_subfolder, exist_ok=True)
# 获取子文件夹内的所有MAT文件
mat_files = [f for f in os.listdir(os.path.join(input_folder, subfolder)) if f.endswith('.mat')]
# 遍历每个MAT文件
for mat_file in mat_files:
# 构建MAT文件的完整路径
input_mat_file = os.path.join(input_folder, subfolder, mat_file)
output_mat_file = os.path.join(output_subfolder, mat_file)
# 读取MAT文件
mat_data = sio.loadmat(input_mat_file)
# 获取MAT文件中的数据
data = mat_data['data'] # 替换为实际的数据变量名
# 设计带通滤波器和应用滤波
nyquist = 0.5 * fs
low = low_cutoff / nyquist
high = high_cutoff / nyquist
b, a = signal.butter(4, [low, high], 'band') # 4阶带通滤波器
filtered_data = signal.filtfilt(b, a, data, padlen=0)
# 创建一个新的MAT文件并保存滤波后的数据
filtered_mat_data = {'filtered_data': filtered_data} # 创建一个字典来存储滤波后的数据
sio.savemat(output_mat_file, filtered_mat_data)
print(f"滤波后的数据已保存为 {output_mat_file}")
print("滤波完成。")
我的运行过程如图: