Optimal Cutoff Frequency for Static Noise Detection in ECG Signals?

19 views (last 30 days)
Hello MATLAB Community,
I am currently working on optimizing the detection of static noise in ECG signals and would greatly appreciate your expertise. Specifically, I am looking to determine the best cutoff frequency for filtering this noise. Below, I have listed the SNR (Signal-to-Noise Ratio) values for different cutoff frequencies in two leads, Lead I and Lead aVL:
  • Cutoff Frequency = 0.5 Hz
  • SNR in Lead I: 7.98 dB
  • SNR in Lead aVL: 5.41 dB
  • Cutoff Frequency = 1.0 Hz
  • SNR in Lead I: 7.29 dB
  • SNR in Lead aVL: 5.11 dB
  • Cutoff Frequency = 5.0 Hz
  • SNR in Lead I: 4.03 dB
  • SNR in Lead aVL: 3.23 dB
  • Cutoff Frequency = 10.0 Hz
  • SNR in Lead I: 2.17 dB
  • SNR in Lead aVL: 1.96 dB
Quantification of Noise:
  • Cutoff Frequency = 0.5 Hz
  • Number of noise points in Lead I: 299
  • Number of noise points in Lead aVL: 341
  • Cutoff Frequency = 1.0 Hz
  • Number of noise points in Lead I: 278
  • Number of noise points in Lead aVL: 304
  • Cutoff Frequency = 5.0 Hz
  • Number of noise points in Lead I: 179
  • Number of noise points in Lead aVL: 213
  • Cutoff Frequency = 10.0 Hz
  • Number of noise points in Lead I: 127
  • Number of noise points in Lead aVL: 137
Additionally, I have attached an image showing the residuals ( lead I ) .
To determine the best threshold value, I used an approach based on minimizing the number of noise points detected in the filtered signal. Here is a detailed explanation of the process:
Process to determine the best threshold value
Calculation of the filtered signal:
For each cutoff frequency, I applied a high-pass filter to remove low-frequency components from the ECG signal.
Threshold definition:
I tested different threshold values, defined as multiples of the standard deviation (STD) of the filtered signal. The tested thresholds were 0.25 * STD, 0.5 * STD, 0.75 * STD, and 1 * STD.
Noise point detection:
For each threshold value, I detected points in the filtered signal where the amplitude exceeds the threshold.
The number of detected noise points is counted for each threshold value.
Selection of the best threshold:
The best threshold is the one that minimizes the number of detected noise points. The hypothesis is that the optimal threshold eliminates noise without affecting the useful components of the ECG signal.
Based on this data, I am seeking advice on the most suitable cutoff frequency for effectively reducing static noise while preserving the integrity of the ECG signal. Any suggestions or insights into methodologies for determining this would be highly valuable.
Thank you in advance for your help!
Best regards,

Accepted Answer

Star Strider
Star Strider on 17 Jun 2024
You have not defined ‘static noise’ so I have no idea what you’re actually filtering.
The bandwidth of a normal EKG is generally 0 Hz (D-C) to 45 Hz, although with complex arrythmias (most notably atrial fibrillation), it can go up to 100 Hz, and baseline drift will show up as low-freqauency noise, usually less than 2 Hz. Any lowpass (for only high-frequency noise) or bandpass (for baseline drift with high-frequency noise) filter with cutoff frequencies outside those limits (higher or lower, respectively) will eliminate some information. For isolated mains/powerline frequency noise (usually 50-60 Hz), you can use a notch filter to eliminate it, although a lowpass filter with a 45 Hz cutoff will work as well in that instance.
The filter choice is generally IIR, and I prefer elliptic filters for their computational efficiency.
The best way to design a filter for any purpose is to first calculate the Fourier transform of the signal, see if the noise is band-limited (as opposed to broadband) and then choose the cutoff frequencies with that in mind. For band-limited noise, a frequency-selective filter will work. For broadband noise, I usually use a Savitzky-Golay filter or wavelet denoising, whichever is more efficient for that particular problem.
The signal you posted appears to be relatively ‘clean’, so I would be tempted to just lleave it as it is.
If you want to plot a 2D vectorcardiogram, you can use Lead I and aVF as:
figure
plot(Lead_I, Lead_aVF)
grid
I suggest doing that experiment.
.
  18 Comments
rawaa mejri
rawaa mejri on 30 Jul 2024
Hello @Star Strider , I hope your are doing well ,
I use wavelet transform , I test differents wavelets as shown with picture below.
I see that bior3.9 with adaptative thershold is the best ? Do you confirm that ?
Thanks a lot :)
Star Strider
Star Strider on 30 Jul 2024
I do not have an extensive background with wavelets, although I have used them. I am not familiar with bior splines. If it gives you acceptable results, and has a theoretical basis that makes it appropriate for EKG analysis, then use it! Congratulations on discovering thtat approach.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!