Integrating AI ECG Analysis from Wearables into Your Mobile App
We help integrate AI analysis of single-lead ECG from wearable devices—Apple Watch Series 4+ or AliveCor KardiaMobile—directly into your mobile app. The recording lasts 30 seconds at a 512 Hz sampling rate, which suffices for detecting atrial fibrillation and other rhythm disturbances. Your task: capture the signal, process it correctly, and apply the model without false negatives or regulatory pitfalls. Our engineers are certified in medical standards and have 5+ years of experience in mobile health projects. Every decision affects diagnostic accuracy and user safety. We guarantee compliance with FDA and CE requirements.
Developing a medical ECG analysis app involves technical challenges: noisy signals from on-body devices, limited phone computing power, stringent accuracy requirements, and battery life constraints. Without proper processing, even the best deep learning model will produce false positives on every third measurement. We have accumulated experience integrating with HealthKit and BLE devices to avoid these pitfalls.
How to Obtain ECG Data from Wearables?
Apple Watch + HealthKit
Apple Watch Series 4+ writes ECG via HKElectrocardiogram. Access through HealthKit:
import HealthKit
func fetchLatestECG() async throws -> (HKElectrocardiogram, [Double]) {
let ecgType = HKObjectType.electrocardiogramType()
let query = HKSampleQuery(
sampleType: ecgType,
predicate: nil,
limit: 1,
sortDescriptors: [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)]
) { _, samples, error in
// handle
}
// For voltage data — separate subquery
let voltageQuery = HKElectrocardiogramQuery(ecg) { _, result in
switch result {
case .measurement(let measurement):
if let voltage = measurement.quantity(for: .appleWatchSimilarToLeadI) {
let microvolts = voltage.doubleValue(for: .volt()) * 1_000_000
voltageData.append(microvolts)
}
case .done: break
case .error(let error): print(error)
}
}
healthStore.execute(voltageQuery)
}
Apple returns raw signal in volts (Lead I), sample rate 512 Hz, about 15360 samples over 30 seconds. The code above demonstrates raw voltage data retrieval. Important: handle errors and ensure the user has granted ECG reading permission.
Third-party BLE Devices + SDK
AliveCor KardiaMobile, Withings Move ECG, and similar devices transmit ECG via BLE. Most provide SDKs: KardiaMobile SDK, Withings SDK. Without an SDK, reverse-engineering the protocol is lengthy and unreliable. We have implemented over 15 integrations with HealthKit and BLE devices, ensuring stable operation. When working with AliveCor KardiaMobile, a common issue is BLE synchronization—we developed a reconnection protocol with exponential backoff.
Why Signal Preprocessing Matters?
Raw ECG signals contain noise: baseline wander, muscle artifacts, 50/60 Hz interference. Without filtering, the model will produce false positives.
| Noise type | Source | Removal |
|---|---|---|
| Baseline wander | Breathing, movement | High-pass 0.5 Hz |
| Muscle artifacts | Muscle contractions | Low-pass 40 Hz |
| Electrical interference | Mains 50/60 Hz | Notch filter |
A 0.5–40 Hz bandpass filter removes major noise:
from scipy.signal import butter, filtfilt
def bandpass_filter(signal, fs=512, lowcut=0.5, highcut=40):
nyq = fs / 2
low = lowcut / nyq
high = highcut / nyq
b, a = butter(4, [low, high], btype='band')
return filtfilt(b, a, signal)
R-peak detection (the Pan-Tompkins algorithm) is needed to compute RR intervals—the primary feature for arrhythmias. On mobile, the filter can be implemented natively: in Swift via the Accelerate framework, in Kotlin via KotlinDL or a port of SciPy code. Beyond filtering, motion artifacts must be removed—we use an adaptive drift estimator based on a median filter with a 200 ms window.
Which Models are Effective for Arrhythmia Detection?
CNN for Rhythm Classification
The standard approach is a 1D CNN on signal windows of 2.5–10 seconds. Input tensor: [batch, time_steps, 1]. Architecture: Conv1D → MaxPool → Dense → Softmax. Public datasets: PhysioNet MIT-BIH Arrhythmia Database (48 two-channel recordings), PTB-XL (21,799 clinical ECGs).
After training, convert to CoreML:
import coremltools as ct
spec = ct.convert(
torch_model,
inputs=[ct.TensorType(shape=(1, 2560, 1), dtype=np.float32)],
compute_precision=ct.precision.FLOAT16,
compute_units=ct.ComputeUnit.CPU_AND_NE
)
spec.save("ECGClassifier.mlpackage")
FLOAT16 quantization halves the model size without significant accuracy loss. CoreML on Apple Silicon processes ECG 3x faster than TFLite on Android with ML Kit. For model validation on mobile platforms, we use public datasets and our own test recordings. Quality evaluation includes sensitivity and specificity metrics at the 95% level for atrial fibrillation.
Limitations of On-Device Analysis
Single-lead ECG from the wrist is not a clinical 12-lead. Apple's algorithms report AFib sensitivity of 99.3%, but other disturbances require full diagnostics. Therefore, it is important to position the app as a screening tool, not a replacement for physician diagnosis.
What Regulatory Requirements Must Be Considered?
If the app claims diagnostic capability, it is a medical device (CE Class IIa, FDA 510(k)/De Novo). Development requires clinical trials and design control. If positioned as informational, the regulatory burden is lower, but disclaimers are mandatory. Apple itself shows that every ECG result is accompanied by a warning. We help gather the necessary documentation for CE or FDA as part of a preliminary audit.
Our Work Process
| Stage | Duration | Delivery |
|---|---|---|
| Analytics & Regulatory Strategy | 1–2 weeks | Requirements document |
| HealthKit/SDK Integration | 1–2 weeks | Working data collection |
| Signal Processing | 1–2 weeks | Filtered signal, R-peaks |
| ML Model | 2–4 weeks | Trained and converted model |
| UI & Visualization | 1–2 weeks | Results screen |
| Testing & Deployment | 1–2 weeks | App Store/Google Play |
What's Included
- Integration and regulatory documentation
- Demo app with analyzer
- Model training for your team
- Post-launch support (3 months)
Timeline and Investment Estimates
A basic AFib detector with CoreML and HealthKit — 3–5 weeks (investment discussed individually). An extended system supporting multiple arrhythmias — 2–3 months (investment depends on complexity). A full medical device is a separate project. On-device analysis can save up to 40% compared to cloud processing.
Contact us to evaluate your project—we'll propose the optimal architecture and timeline. Order turnkey AI ECG analysis development with quality guarantees and standards compliance. Get a consultation on integrating an AI model into your app.







