首页 > 其他分享 >心电信号去除50hz工频干扰

心电信号去除50hz工频干扰

时间:2024-03-24 11:22:24浏览次数:23  
标签:noise data fft 电信号 50hz abs 工频 out

点击查看代码
% 读取文本文件中的心电信号数据
filename = 'ECG_X1.txt';
data = load(filename);

% 绘制心电信号的时域波形
figure;
plot(data);
axis("tight");
title('心电信号时域波形');
xlabel('采样点');
ylabel('幅值');

% 计算心电信号的FFT并绘制频谱图
N = length(data); % 信号长度
Fs = 150; % 采样率(假设为1000Hz,根据实际情况修改)
frequencies = Fs*(0:(N/2))/N; % 计算频率轴
fft_data = fft(data); % 计算FFT
fft_data_abs = abs(fft_data/N); % 计算幅值
fft_data_abs_half = fft_data_abs(1:N/2+1); % 取FFT结果的前一半

figure;
plot(frequencies, fft_data_abs_half);
title('心电信号频谱图');
xlabel('频率 (Hz)');
ylabel('幅值');

% 找出频谱图中的主要频率成分
[max_amp, max_index] = max(fft_data_abs_half);
dominant_freq = frequencies(max_index);
fprintf('主要频率成分为 %.2f Hz\n', dominant_freq);



%%
t = (0:length(data)-1) / Fs; % 生成时间向量
noise_amplitude = 20; % 干扰信号的振幅
noise = noise_amplitude * sin(2*pi*50*t); % 生成50Hz的工频干扰信号
data_with_noise = data' + noise; % 添加干扰信号

% 绘制添加干扰信号后的心电信号时域波形
figure;
plot(t, data_with_noise);
title('添加50Hz工频干扰后的心电信号时域波形');
xlabel('时间 (s)');
ylabel('幅值');

% 计算心电信号加干扰的FFT并绘制频谱图
N = length(data_with_noise); % 信号长度
frequencies = Fs*(0:(N/2))/N; % 计算频率轴
fft_data_with_noise = fft(data_with_noise); % 计算FFT
fft_data_with_noise_abs = abs(fft_data_with_noise/N); % 计算幅值
fft_data_with_noise_abs_half = fft_data_with_noise_abs(1:N/2+1); % 取FFT结果的前一半

% 绘制心电信号加干扰的频谱图
figure;
plot(frequencies, fft_data_with_noise_abs_half);
title('心电信号加50Hz工频干扰的频谱图');
xlabel('频率 (Hz)');
ylabel('幅值');

% 找出频谱图中的主要频率成分
[max_amp, max_index] = max(fft_data_with_noise_abs_half);
dominant_freq = frequencies(max_index);
fprintf('主要频率成分为 %.2f Hz\n', dominant_freq);

%% FIR 
Fs2=Fs/2;
fp = 35; fs = 45;            % 通带和阻带频率
wp = fp*pi/Fs2; ws = fs*pi/Fs2;  % 通带和阻带归一化角频率
deltaw= ws - wp;                 % 过渡带宽Δω的计算

N = ceil(6.6*pi/ deltaw);        % 计算所需的滤波器阶数N
N = N + mod(N,2);                % 保证滤波器系数为奇数

wind = (hamming(N+1))';          % 海明窗计算
Wn=(fp+fs)/2/Fs2;                % 计算截止频率

b = fir1(N,Wn,wind);             % 用fir1函数设计滤波器
figure();freqz(b,1);             % 滤波器画图

data_fir_out= filter(b,1,data_with_noise);
figure;
plot(t, out);
title('FIR滤波去除50Hz工频干扰后的心电信号时域波形');
xlabel('时间 (s)');
ylabel('幅值');

% 计算心电信号去除干扰的FFT并绘制频谱图
N = length(data_fir_out); % 信号长度
frequencies = Fs*(0:(N/2))/N; % 计算频率轴
fft_data_fir_out = fft(data_fir_out); % 计算FFT
fft_data_fir_out_abs = abs(fft_data_fir_out/N); % 计算幅值
fft_data_fir_out_abs_half = fft_data_fir_out_abs(1:N/2+1); % 取FFT结果的前一半

% 绘制FIR滤波后的频谱图
figure;
plot(frequencies, fft_data_fir_out_abs_half);
title('心电信号通过FIR滤波后频谱图');
xlabel('频率 (Hz)');
ylabel('幅值');

%% LMS自适应滤波






标签:noise,data,fft,电信号,50hz,abs,工频,out
From: https://www.cnblogs.com/wzmuzi/p/18092191

相关文章

  • 脑电信号中的功率谱密度与微分熵
    主要目标熟悉微分熵求解方法思考微分熵与对数能量谱是否真的等价熟悉与反思功率谱密度的求解(仍有未解决之处)微分熵求解首先根据bing,了解微分熵的内涵与求解方式。在脑电信号分析中,DE特征指的是微分熵(DifferentialEntropy)。微分熵是香农熵在连续变量上的推广形式,它可以用......
  • Note1 基于MNE实现脑电信号的源定位(重建或成像)
    写在最前最开始接触mne还是在20年,那时候它的版本才刚刚开发到0.21。几年过去他的正式版都已经发布了,而我还依旧是一个学术小白orz。简单调研一下,发现网上关于mne的教程不多,看到脑机接口社区有推出一系列的epoch的mne教程,几位大佬撰写的mne中文手册,另外还有收费培训班。但作为情......
  • IOI2022 无线电信号塔
    询问实际上是求笛卡尔树上的叶子结点个数,因为非叶子一定无法与子树内通信发现如果两个叶子\(u,v\)以\(\text{LCA(u,v)}\)的某一祖先\(p\)进行通信,那么\(p\)的祖先也一定能通信,保证两两能通信的关键就是一棵对于所有关键点的虚树,由于关键点之间并不存在祖先后代关系,因此笛......
  • 使用数字陷波器滤除工频信号
    使用数字陷波器滤除工频信号在实际测量时经常会受到工频信号(交流50Hz)的干扰,有时干扰还很大,有用信号完全被淹没了。可以应用数字陷波器来消除工频信号的干扰。数字陷波器函数如下函数:iirnotch功能:数字陷波器设计调用格式:[b,a]=iirnotch(Wo,Bw)说明:Wo是陷波器的中心频率,Bw是陷波器的......
  • 脑电信号采集模块方案的技术阶段总结简析
    原理 脑电图(electroencephalogram,EEG)是通过精密的仪器从头皮上将脑补的大脑皮层的自发性生物电位加以放大记录而获得的图形,是通过电极记录下来的脑细胞群的自发性、节律性电活动。这种电活动是以电位作为纵轴,时间为横轴,从而记录下来的电位与时间相互关系的平面图。脑电波的频率(......
  • 生物电信号测量的频段及特点
    一生物电信号的频段: 二 生物电信号的测量特点 二 ......
  • 二:用电信号传输TCP/IP数据-3.2-ACK号的管理
    上一节讲了数据收发的大概过程,实际上网络的错误检测和补偿机制非常复杂,这一节讲三个关键点。一、返回ACK号的等待时间返回ACK号的等待时间叫超时时间。当网络传输繁忙时ACK号的返回会变慢,这时就要将等待时间设置得长一点,不然可能已经重传了,ACK号才到达。这样的重传是多余的,虽然......
  • 高频隔离型光伏离网单相逆变器的控制算法的C代码+仿真模型,DC70~150V输入,AC220V/50Hz输
    高频隔离型光伏离网单相逆变器的控制算法的C代码+仿真模型,DC70~150V输入,AC220V/50Hz输出:1.主回路DC/DC+DC/AC,相较于传统的非隔离型光伏逆变器,前级DC/DC不再采用boost电路,而是采用高频移相全桥电路来实现升压+隔离,开关频率80~100kHz;2.为了抑制直流母线电压的二次纹波,在前级控制算......
  • 洛谷 P8492 - [IOI2022] 无线电信号塔
    想到将最优化问题转化为数点问题的一步了,但是因为转化的姿势不太好导致我的数点不太能用特别简洁的数据结构维护,最后只好看题解(考虑先解决单组询问的问题,对于每个点\(i\),我们找出它左边最近的\(h_l\leh_i-D\)的点\(l\),和它右边最近的\(h_r\leh_i-D\)的点\(r\),然后新建一......
  • 第二章:用电信号传输TCP/IP数据-02-连接:connect()
    一、连接是什么意思话说网线一直插着,网络一直连着,网线中随时都有信号流过,那这个“连接”是连接什么呢?可以类比人与人之间的联系,满大街都是人,身边随时有人走过,我们算是跟任何人有联系吗?当然没有!怎么才算有联系?先要双方有交往意愿,然后互换个名片,这才算联系上了。哪天一方找到另......