A respiratory therapy apparatus, comprising: a blower for generating an air flow for a patient, the blower being associated with a blower motor, wherein the blower motor is configured to be driven by a control signal; one or more sensors (3a, 3b, 3c) configured to measure at least a flow rate, the one or more sensor (3a, 3b, 3c) further configured to measure a motor speed or pressure; and a control system configured to: detect a breath cycle of the patient by: receiving a first input comprising one or more flow measurements from the one or more sensors (3a, 3b, 3c), receiving a second input (203, 204) comprising one or more pressure measurements from at least one pressure sensor (3a, 3b, 3c) or one or more motor speed measurements associated with the blower motor, and generating a breath cycle waveform using at least the received flow measurements, wherein the breath cycle waveform comprises a plurality of alternating inspiration and expiration periods by the patient, and synchronize the control signal with the breath cycle by: identifying a phase of the breath cycle waveform, and iteratively updating a phase of the control signal to achieve a determined phase difference between the control signal and the breath cycle waveform, such that the control signal is configured to adjust a speed of the blower motor based upon the patient's inspiration and expiration. a blower for generating an air flow for a patient, the blower being associated with a blower motor, wherein the blower motor is configured to be driven by a control signal; one or more sensors (3a, 3b, 3c) configured to measure at least a flow rate, the one or more sensor (3a, 3b, 3c) further configured to measure a motor speed or pressure; and a control system configured to: detect a breath cycle of the patient by: receiving a first input comprising one or more flow measurements from the one or more sensors (3a, 3b, 3c), receiving a second input (203, 204) comprising one or more pressure measurements from at least one pressure sensor (3a, 3b, 3c) or one or more motor speed measurements associated with the blower motor, and generating a breath cycle waveform using at least the received flow measurements, wherein the breath cycle waveform comprises a plurality of alternating inspiration and expiration periods by the patient, and synchronize the control signal with the breath cycle by: identifying a phase of the breath cycle waveform, and iteratively updating a phase of the control signal to achieve a determined phase difference between the control signal and the breath cycle waveform, such that the control signal is configured to adjust a speed of the blower motor based upon the patient's inspiration and expiration. receiving a first input comprising one or more flow measurements from the one or more sensors (3a, 3b, 3c), receiving a second input (203, 204) comprising one or more pressure measurements from at least one pressure sensor (3a, 3b, 3c) or one or more motor speed measurements associated with the blower motor, and generating a breath cycle waveform using at least the received flow measurements, wherein the breath cycle waveform comprises a plurality of alternating inspiration and expiration periods by the patient, and synchronize the control signal with the breath cycle by: identifying a phase of the breath cycle waveform, and iteratively updating a phase of the control signal to achieve a determined phase difference between the control signal and the breath cycle waveform, such that the control signal is configured to adjust a speed of the blower motor based upon the patient's inspiration and expiration. identifying a phase of the breath cycle waveform, and iteratively updating a phase of the control signal to achieve a determined phase difference between the control signal and the breath cycle waveform, such that the control signal is configured to adjust a speed of the blower motor based upon the patient's inspiration and expiration.