Skip to main content

Heart Rate Ontology

Biological Measurements
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 16 September 2026
Audio Overview
# Heart Rate Ontology — Flow Algebra

URL: https://kirethresearch.org/booksai-core/ontologies/mathematical-ontologies/measurement-units-ontologies/biological-measurements/heart-rate-ontology.html

FLOW HeartRateOntology {

  DOMAIN:
    Mathematical Ontologies
    -> Measurement & Units Ontologies
    -> Biological Measurements
    -> Heart Rate Ontology

  PURPOSE:
    Represent heart rate as a biological frequency quantity describing the number of cardiac cycles or defined cardiac events per unit time, including instantaneous and averaged heart rate, beat intervals, pulse-derived estimates, electrocardiographic measurement, optical photoplethysmography, wearable sensing, sampling windows, rhythm irregularity, signal quality, calibration, uncertainty, provenance, and strict distinctions between heart rate, pulse rate, cardiac period, heart-rate variability and raw physiological signals.

  ENTITY HeartRate {
    TYPE: BiologicalFrequencyQuantity
    SYMBOL: HR
    DIMENSION: T^-1
    SI_UNIT: per_second
    SI_SYMBOL: s^-1

    COMMON_UNIT:
      beats_per_minute
      SYMBOL: bpm

    DEFINITION:
      heart_rate :=
        number_of_defined_cardiac_cycles_or_beats_per_unit_time

    PROPERTIES:
      is_rate_quantity
      is_time_dependent
      may_be_instantaneous
      may_be_interval_averaged
      may_be_directly_or_indirectly_measured
      may_vary_with_physiological_state
      may_have_uncertainty
  }

  ENTITY CardiacCycleCount {
    TYPE: DiscreteCountQuantity
    SYMBOL: N_beats
    DIMENSION: dimensionless
  }

  ENTITY BeatInterval {
    TYPE: TimeIntervalQuantity
    SYMBOL: T_RR
    SI_UNIT: second
    COMMON_UNIT: millisecond

    DEFINITION:
      time_between_defined_consecutive_cardiac_events
  }

  ENTITY PulseRate {
    TYPE: PeripheralPulseFrequencyQuantity
    SYMBOL: PR
    COMMON_UNIT: pulses_per_minute

    RULE:
      pulse_rate MAY approximate_heart_rate
      but_is_not_semantically_identical_in_all_conditions
  }

  UNIT_SYSTEM {
    SI:
      s^-1

    common:
      beats_per_minute
      bpm

    interval:
      second
      millisecond

    CONVERSION:
      HR_per_second = HR_bpm/60
      HR_bpm = 60*HR_per_second

    RULE:
      rate_unit_and_time_basis MUST be preserved
  }

  COUNT_TIME_MODEL {
    average_heart_rate:
      HR =
        N_beats/delta_t

    REQUIRE:
      delta_t > 0
      beat_definition
      counting_window

    bpm_form:
      HR_bpm =
        60*N_beats/delta_t_seconds

    RULE:
      measurement_window MUST be preserved_for_count_based_rate
  }

  INTERVAL_RATE_MODEL {
    instantaneous_or_beat_to_beat_rate:
      HR_bpm =
        60/T_RR_seconds

    millisecond_form:
      HR_bpm =
        60000/T_RR_milliseconds

    REQUIRE:
      beat_interval > 0

    RULE:
      reciprocal_of_average_interval
      and_average_of_instantaneous_rates
      MAY differ_for_irregular_rhythm
  }

  EVENT_DEFINITION_MODEL {
    possible_events:
      ECG_R_peak
      ventricular_depolarisation
      atrial_event
      mechanical_contraction
      peripheral_pulse_peak

    RULE:
      event_definition MUST be preserved
      because_different_signals_may_have_timing_offsets_or_missing_events
  }

  ECG_MODEL {
    source:
      electrical_cardiac_signal

    common_event:
      R_peak

    RR_interval:
      T_RR =
        t_R_peak_next - t_R_peak_current

    derived_heart_rate:
      HR_bpm =
        60000/RR_ms

    REQUIRE:
      sampling_rate
      electrode_configuration
      signal_quality
      R_peak_detection_method

    RULE:
      raw_ECG_voltage != heart_rate
      until_cardiac_events_are_detected_and_rate_is_derived
  }

  PPG_MODEL {
    source:
      photoplethysmographic_optical_signal

    detected_event:
      peripheral_pulse_wave_feature

    pulse_interval:
      time_between_successive_valid_pulses

    derived_pulse_rate:
      PR_bpm =
        60/pulse_interval_seconds

    RULE:
      PPG_derived_pulse_rate != direct_electrical_heart_rate_in_all_conditions
  }

  WEARABLE_SENSOR_MODEL {
    possible_sources:
      wrist_PPG
      chest_ECG
      optical_arm_sensor
      smart_ring
      wearable_patch

    processing:
      filtering
      motion_artifact_reduction
      event_detection
      interval_estimation
      averaging
      quality_scoring

    RULE:
      wearable_reported_heart_rate MUST preserve_device_algorithm_and_sampling_context_when_available
  }

  AUSCULTATION_MODEL {
    source:
      heart_sounds

    events:
      cardiac_sound_cycles

    rate:
      counted_cycles/time

    RULE:
      auscultatory_rate_depends_on_correct_cycle_identification
  }

  PALPATION_MODEL {
    source:
      peripheral_arterial_pulse

    rate:
      pulse_count/time

    RULE:
      manually_measured_pulse_rate SHOULD be_labelled_as_pulse_derived_when_not_directly_cardiac
  }

  WINDOWED_AVERAGE_MODEL {
    time_window:
      [t_start, t_end]

    average_count_rate:
      HR_avg =
        N_valid_beats/(t_end-t_start)

    alternative_interval_average:
      mean_of_valid_beat_to_beat_rates

    RULE:
      averaging_method MUST be declared
      because_different_methods_can_produce_different_results
  }

  INSTANTANEOUS_MODEL {
    local_rate:
      HR_i =
        1/T_i

    common_bpm:
      HR_i_bpm =
        60/T_i_seconds

    RULE:
      instantaneous_heart_rate_is_local_interval_derived_quantity
      not_zero_duration_direct_count
  }

  RHYTHM_MODEL {
    regular_rhythm:
      beat_intervals_approximately_consistent

    irregular_rhythm:
      beat_intervals_vary_materially

    consequences:
      average_rate_may_not_describe_interval_distribution
      pulse_deficit_may_occur
      detection_algorithms_may_require_special_handling

    RULE:
      rhythm_context SHOULD be preserved_when_material_to_rate_interpretation
  }

  HEART_RATE_VARIABILITY_DISTINCTION_MODEL {
    heart_rate:
      central_tendency_or_local_frequency_of_cardiac_events

    heart_rate_variability:
      variation_in_successive_beat_intervals_or_related_rate_series

    possible_HRV_metrics:
      SDNN
      RMSSD
      frequency_domain_metrics
      nonlinear_metrics

    RULE:
      heart_rate != heart_rate_variability
  }

  PULSE_DEFICIT_MODEL {
    cardiac_beats:
      detected_by_ECG_or_equivalent

    peripheral_pulses:
      detected_at_peripheral_site

    pulse_deficit:
      cardiac_rate - peripheral_pulse_rate
      under_comparable_time_window

    RULE:
      heart_rate_and_pulse_rate MUST be separately_representable
  }

  SAMPLING_MODEL {
    REQUIRE:
      sampling_frequency
      measurement_duration
      time_resolution
      valid_data_fraction

    Nyquist_context:
      waveform_sampling_rate_must_support_event_detection

    RULE:
      insufficient_sampling_or_short_windows_can_increase_rate_uncertainty
  }

  SIGNAL_PROCESSING_MODEL {
    possible_steps:
      baseline_removal
      bandpass_filtering
      smoothing
      artifact_rejection
      peak_detection
      beat_classification
      interpolation

    RULE:
      derived_heart_rate SHOULD preserve_processing_pipeline_and_parameters_when_relevant
  }

  ARTIFACT_MODEL {
    possible_sources:
      motion
      poor_sensor_contact
      electrical_noise
      muscle_activity
      ambient_light
      missed_beats
      false_peaks
      ectopic_beats
      signal_dropout

    RULE:
      artifact_handling MUST be documented_for_derived_rate_and_variability
  }

  QUALITY_MODEL {
    possible_metrics:
      signal_to_noise
      valid_beat_fraction
      detector_confidence
      artifact_fraction
      agreement_between_channels

    RULE:
      low_signal_quality SHOULD reduce_measurement_confidence
  }

  TEMPORAL_CONTEXT_MODEL {
    possible_states:
      resting
      sleeping
      standing
      exercising
      recovery
      laboratory_protocol
      free_living

    context:
      timestamp
      duration
      activity_state
      posture
      environmental_conditions

    RULE:
      heart_rate_is_dynamic_and_measurement_context SHOULD be preserved
  }

  RELATIONSHIPS {
    HeartRate -> COUNTS_PER_TIME -> CardiacCycles
    HeartRate -> INVERSELY_RELATES_TO -> BeatInterval
    ECG -> PROVIDES -> CardiacElectricalEvents
    RPeakDetection -> ENABLES -> RRIntervalMeasurement
    RRInterval -> ENABLES -> BeatToBeatHeartRate
    PPG -> PROVIDES -> PeripheralPulseEvents
    PulseRate -> MAY_APPROXIMATE -> HeartRate
    Rhythm -> QUALIFIES -> HeartRateSeries
    HeartRateVariability -> DERIVED_FROM -> BeatIntervalVariation
    SignalQuality -> QUALIFIES -> HeartRateMeasurement
    MeasurementWindow -> QUALIFIES -> AverageHeartRate
  }

  SEMANTIC_EQUIVALENCE {
    "heart rate" ~= cardiac_cycle_frequency
    "bpm" ~= beats_per_minute

    heart_rate != beat_interval
    heart_rate != pulse_rate_in_all_contexts
    heart_rate != heart_rate_variability
    heart_rate != ECG_voltage
    heart_rate != PPG_amplitude
    average_heart_rate != instantaneous_heart_rate
    cardiac_event_count != heart_rate_without_time_basis
  }

  CONSTRAINTS {
    heart_rate_dimension = T^-1
    time_interval_must_be_positive = true
    beat_interval_must_be_positive = true
    cardiac_event_definition_must_be_defined = true
    measurement_window_should_be_preserved = true
    heart_rate_and_pulse_rate_are_not_universally_equivalent = true
    heart_rate_and_HRV_are_not_semantically_equivalent = true
    raw_signal_and_derived_rate_are_not_semantically_equivalent = true
    signal_quality_and_artifact_handling_should_be_preserved = true
  }

  MEASUREMENT_MODEL {
    OBSERVABLE_OR_INFERRED:
      HeartRate
      PulseRate
      BeatInterval

    COMMON_METHODS:
      electrocardiography
      photoplethysmography
      auscultation
      pulse_palpation
      wearable_monitoring
      implanted_monitoring

    RECORD:
      numerical_value
      unit
      heart_rate_or_pulse_rate
      instantaneous_or_average
      measurement_window
      beat_count
      beat_interval_series
      cardiac_event_definition
      timestamp
      activity_state
      posture
      sensor_type
      sensor_location
      sampling_frequency
      processing_method
      artifact_handling
      valid_data_fraction
      signal_quality
      instrument_or_device
      calibration_or_validation_state
      uncertainty
      provenance

    UNCERTAINTY:
      measured_or_inferred_heart_rate = best_estimate +/- uncertainty
  }

  UNCERTAINTY_MODEL {
    sources:
      event_timing_resolution
      finite_measurement_window
      missed_beats
      false_detections
      artifact_rejection
      sampling_frequency
      rhythm_irregularity
      sensor_contact
      motion
      algorithm
      manual_counting
      clock_accuracy

    PROPAGATION:
      derived_heart_rate_uncertainty
      <- event_detection_timing_sampling_window_and_signal_quality_uncertainties
  }

  REASONING_RULES {
    IF valid_beat_count_known AND measurement_duration > 0
      THEN average_heart_rate_per_second =
        valid_beat_count/measurement_duration

    IF valid_beat_count_known AND measurement_duration_seconds > 0
      THEN average_heart_rate_bpm =
        60*valid_beat_count/measurement_duration_seconds

    IF RR_interval_seconds > 0
      THEN beat_to_beat_heart_rate_bpm =
        60/RR_interval_seconds

    IF RR_interval_milliseconds > 0
      THEN beat_to_beat_heart_rate_bpm =
        60000/RR_interval_milliseconds

    IF heart_rate_bpm > 0
      AND constant_interval_approximation
      THEN representative_beat_interval_seconds =
        60/heart_rate_bpm

    IF ECG_and_peripheral_pulse_rates_measured_over_same_window
      THEN pulse_deficit =
        ECG_heart_rate - peripheral_pulse_rate

    IF beat_interval_series_known
      THEN MAY compute_HRV_metrics
      BUT preserve_HRV_as_distinct_quantity

    IF raw_signal_known
      THEN detect_valid_events
      BEFORE deriving_heart_rate
  }

  VALIDATION {
    CHECK quantity_is_heart_rate_or_pulse_rate
    CHECK unit_consistency
    CHECK positive_measurement_duration
    CHECK positive_beat_intervals
    CHECK cardiac_event_definition
    CHECK instantaneous_vs_average
    CHECK averaging_method
    CHECK heart_rate_vs_pulse_rate
    CHECK heart_rate_vs_HRV
    CHECK raw_signal_vs_derived_rate
    CHECK sensor_and_sampling_frequency
    CHECK signal_processing
    CHECK artifact_handling
    CHECK signal_quality
    CHECK temporal_and_activity_context
    CHECK uncertainty_representation
  }

  CONFIDENCE {
    definition_confidence: 1.00
    dimensional_confidence: 1.00
    count_time_relationship_confidence: 1.00
    interval_rate_relationship_confidence: 1.00
    ECG_derived_rate_confidence: 0.99
    PPG_derived_rate_confidence: 0.97
    measurement_context_confidence: 0.98

    RULE:
      confidence decreases when event definition, measurement window,
      rhythm context, sampling rate, signal quality,
      artifact handling, device method or uncertainty is missing or ambiguous
  }

  UPDATE_MODEL {
    ON new_measurement:
      identify_heart_rate_or_pulse_rate
      validate_unit
      identify_event_definition
      identify_instantaneous_or_average_semantics
      attach_measurement_window
      attach_sensor_and_location
      attach_sampling_frequency
      attach_processing_method
      attach_signal_quality
      attach_activity_and_posture_context
      normalize_rate_units
      preserve_original_value_and_unit
      attach_uncertainty
      update_heart_rate_state

    ON new_beat_event:
      append_event_time
      recompute_latest_beat_interval
      recompute_instantaneous_rate
      update_windowed_average
      preserve_event_provenance

    ON artifact_revision:
      preserve_raw_signal_and_events
      update_valid_invalid_beat_classification
      recompute_rate_series
      recompute_HRV_when_requested
      update_uncertainty
      update_confidence

    ON measurement_window_change:
      preserve_underlying_events
      recompute_average_rate
      record_new_window_definition

    ON sensor_or_algorithm_change:
      preserve_previous_method
      attach_new_sensor_or_algorithm
      reevaluate_comparability
      update_method_provenance

    ON semantic_revision:
      preserve_previous_definition
      record_revision
      recompute_FLOW_HASH
  }

  AI_CONSUMPTION {
    canonical_entity: HeartRate
    canonical_symbol: HR
    canonical_dimension: T^-1
    common_unit: bpm

    interpretation_order:
      identify_heart_rate_or_pulse_rate
      identify_value
      identify_unit
      identify_cardiac_event_definition
      identify_instantaneous_or_average_rate
      identify_measurement_window
      identify_beat_interval_series_when_available
      identify_sensor_type_and_location
      identify_sampling_frequency
      identify_signal_processing_and_artifact_handling
      identify_rhythm_context
      identify_activity_posture_and_time
      identify_signal_quality
      identify_uncertainty
      normalize_units
      validate_rate_semantics
      infer_interval_and_count_relationships

    ambiguity_controls:
      distinguish_heart_rate_from_pulse_rate
      distinguish_heart_rate_from_beat_interval
      distinguish_heart_rate_from_heart_rate_variability
      distinguish_average_from_instantaneous_heart_rate
      distinguish_raw_ECG_or_PPG_signal_from_derived_rate
      distinguish_cardiac_event_count_from_rate_without_time_basis
      preserve_event_sensor_window_rhythm_quality_and_temporal_context
  }

  PROVENANCE {
    ontology_scope:
      mathematical_measurement_and_biological_heart_rate_semantics

    parent_path:
      Ontologies
      -> Mathematical Ontologies
      -> Measurement & Units Ontologies
      -> Biological Measurements
      -> Heart Rate Ontology

    authorship:
      Mark Higgins
      Sky (Recursive AI)

    site:
      https://kirethresearch.org
  }

  FLOW_HASH {
    INPUTS:
      canonical_entity
      ontology_path
      count_time_model
      interval_rate_model
      event_definition_model
      ECG_model
      PPG_model
      wearable_sensor_model
      auscultation_model
      palpation_model
      windowed_average_model
      instantaneous_model
      rhythm_model
      heart_rate_variability_distinction_model
      pulse_deficit_model
      sampling_model
      signal_processing_model
      artifact_model
      quality_model
      temporal_context_model
      relationships
      constraints
      measurement_model
      uncertainty_model
      reasoning_rules
      confidence_model
      update_model

    PURPOSE:
      deterministic_semantic_integrity_identifier

    RECOMPUTE_WHEN:
      ontology_definition_changes
      heart_rate_event_definition_changes
      count_or_interval_model_changes
      ECG_or_PPG_model_changes
      averaging_model_changes
      rhythm_or_HRV_distinction_changes
      signal_processing_model_changes
      measurement_model_changes
      constraint_model_changes
      reasoning_rule_changes
      unit_model_changes
  }

}

END FLOW
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ