2. 生理学的信号処理 - 1. ECG 信号 (Matlab コードとデータを含む)

この記事は、ECG 信号を迅速に理解するのに適しており、データ フィルタリングを実行できます。


1. ECG データの前処理 (電源周波数干渉とベースライン ドリフトの除去)

※心電図データとrdmat関数については記事下部をご覧ください。

1.心電図データをインポートする

## 心电图导入及读取
clc;
[TIME,M,Fs,siginfo]=rdmat('100m');# 通过读取函数ramat对心电图进行处理
Fs=1500;# 采样频率
plot(TIME,M);

2. 後続の処理のために最初の 1000 データ ポイントを選択します

ecg = M(1:1000);
TIME = TIME(1:1000);
plot(TIME,ecg)

3. ECG 信号の 50Hz 周波数干渉を除去します (中国では通常 50Hz) - ノッチ フィルター

## Butterworth 陷波滤波器-去除工频干扰
# 设计滤波器
d = designfilt('bandstopiir','FilterOrder',2, ...
               'HalfPowerFrequency1',49,'HalfPowerFrequency2',51, ...
               'DesignMethod','butter','SampleRate',Fs);
#应用滤波器去除50Hz干扰
ecg_50 = filtfilt(d,ecg);

4. ECG 信号から低周波信号 (5Hz 未満) を削除します - ベースラインのドリフトを排除します

##bandpass滤波器-解决基线漂移
fmaxd_1=5;# 截止频率为5Hz
fmaxn_1=fmaxd_1/(Fs/2);
[B,A]=butter(1,fmaxn_1,'low');
ecg_low=filtfilt(B,A,ecg_50);# 通过5Hz低通滤波器的信号
ecg1=ecg_50-ecg_low; # 减去5Hz低频信号
plot(TIME,ecg1)
xlabel('t(s)');
ylabel('mv');
title('期望信号');

5. ランダムノイズを追加する

* wgn 機能: ランダムにホワイトノイズを追加します。

##添加随机噪声信号
Noise_White = (0.1*wgn(1,length(TIME),2))'; 
plot(Noise_White)
title('噪声信号');

6. ノイズ干渉後の信号

##噪声干扰后信号
Mix_Signal = ecg1 + Noise_White;
plot(TIME,Mix_Signal)
xlabel('t(s)');
ylabel('mv');
title('噪声干扰后信号');

2. フィルタリング(ウィーナーフィルタリング)

*h はウィーナー フィルターの実行後に取得される値であり、以下のウィーナー フィルター設計部分を実行することで取得できます

1. 信号処理 - 3. ウィーナー フィルタリング (MATLAB コードを含む)_かなり興味深い_のブログ - CSDN ブログ

##维纳滤波
Signal_Filter = filter(h,1,Mix_Signal);# 将输入信号通过维纳滤波器
figure(1)
plot(TIME,Signal_Filter)
xlabel('t(s)');
ylabel('mv');
title('维纳滤波后信号');

3. 平均二乗誤差

* 元の信号に対するノイズ導入後の信号の統計的平均二乗誤差:

mse1 = 0.0153

* 元の信号に対するフィルター処理された信号の統計的平均二乗誤差:

mse2 = 0.0069

ウィナー フィルターを適用すると、信号は元の信号に近づきます。


* ECGデータとrdmat関数

リンク: https://download.csdn.net/download/qq_41958946/86841684

ECG データの元のソース: MIT-BIH 不整脈データベース (mitdb)

おすすめ

転載: blog.csdn.net/qq_41958946/article/details/127580618