| @@ -289,24 +289,43 @@ func (e *Engine) Demod(iq []complex64, offsetHz float64, bw float64, mode DemodT | |||||
| e.lastDecimUsedGPU = false | e.lastDecimUsedGPU = false | ||||
| inputRate := e.sampleRate / decim | inputRate := e.sampleRate / decim | ||||
| e.lastDemodUsedGPU = false | |||||
| switch mode { | switch mode { | ||||
| case DemodNFM: | case DemodNFM: | ||||
| if gpuAudio, ok := e.tryCUDAFMDiscrim(dec); ok { | if gpuAudio, ok := e.tryCUDAFMDiscrim(dec); ok { | ||||
| e.lastDemodUsedGPU = true | |||||
| return gpuAudio, inputRate, nil | return gpuAudio, inputRate, nil | ||||
| } | } | ||||
| return demod.NFM{}.Demod(dec, inputRate), inputRate, nil | return demod.NFM{}.Demod(dec, inputRate), inputRate, nil | ||||
| case DemodWFM: | case DemodWFM: | ||||
| if gpuAudio, ok := e.tryCUDAFMDiscrim(dec); ok { | if gpuAudio, ok := e.tryCUDAFMDiscrim(dec); ok { | ||||
| e.lastDemodUsedGPU = true | |||||
| return gpuAudio, inputRate, nil | return gpuAudio, inputRate, nil | ||||
| } | } | ||||
| return demod.WFM{}.Demod(dec, inputRate), inputRate, nil | return demod.WFM{}.Demod(dec, inputRate), inputRate, nil | ||||
| case DemodAM: | case DemodAM: | ||||
| if gpuAudio, ok := e.tryCUDAAMEnvelope(dec); ok { | |||||
| e.lastDemodUsedGPU = true | |||||
| return gpuAudio, inputRate, nil | |||||
| } | |||||
| return demod.AM{}.Demod(dec, inputRate), inputRate, nil | return demod.AM{}.Demod(dec, inputRate), inputRate, nil | ||||
| case DemodUSB: | case DemodUSB: | ||||
| if gpuAudio, ok := e.tryCUDASSBProduct(dec, 700.0); ok { | |||||
| e.lastDemodUsedGPU = true | |||||
| return gpuAudio, inputRate, nil | |||||
| } | |||||
| return demod.USB{}.Demod(dec, inputRate), inputRate, nil | return demod.USB{}.Demod(dec, inputRate), inputRate, nil | ||||
| case DemodLSB: | case DemodLSB: | ||||
| if gpuAudio, ok := e.tryCUDASSBProduct(dec, -700.0); ok { | |||||
| e.lastDemodUsedGPU = true | |||||
| return gpuAudio, inputRate, nil | |||||
| } | |||||
| return demod.LSB{}.Demod(dec, inputRate), inputRate, nil | return demod.LSB{}.Demod(dec, inputRate), inputRate, nil | ||||
| case DemodCW: | case DemodCW: | ||||
| if gpuAudio, ok := e.tryCUDASSBProduct(dec, 700.0); ok { | |||||
| e.lastDemodUsedGPU = true | |||||
| return gpuAudio, inputRate, nil | |||||
| } | |||||
| return demod.CW{}.Demod(dec, inputRate), inputRate, nil | return demod.CW{}.Demod(dec, inputRate), inputRate, nil | ||||
| default: | default: | ||||
| return nil, 0, errors.New("unsupported demod type") | return nil, 0, errors.New("unsupported demod type") | ||||