Wideband autonomous SDR analysis engine forked from sdr-visual-suite
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

60 rindas
1.9KB

  1. package gpudemod
  2. func (r *BatchRunner) buildStreamingGPUInvocations(iqNew []complex64, jobs []StreamingExtractJob) ([]StreamingGPUInvocation, error) {
  3. if r == nil || r.eng == nil {
  4. return nil, ErrUnavailable
  5. }
  6. invocations := make([]StreamingGPUInvocation, len(jobs))
  7. active := make(map[int64]struct{}, len(jobs))
  8. for i, job := range jobs {
  9. active[job.SignalID] = struct{}{}
  10. state, err := r.getOrInitExtractState(job, r.eng.sampleRate)
  11. if err != nil {
  12. return nil, err
  13. }
  14. invocations[i] = StreamingGPUInvocation{
  15. SignalID: job.SignalID,
  16. OffsetHz: job.OffsetHz,
  17. OutRate: job.OutRate,
  18. Bandwidth: job.Bandwidth,
  19. SampleRate: r.eng.sampleRate,
  20. NumTaps: state.NumTaps,
  21. Decim: state.Decim,
  22. PhaseCountIn: state.PhaseCount,
  23. NCOPhaseIn: state.NCOPhase,
  24. HistoryLen: len(state.ShiftedHistory),
  25. BaseTaps: append([]float32(nil), state.BaseTaps...),
  26. PolyphaseTaps: append([]float32(nil), state.PolyphaseTaps...),
  27. ShiftedHistory: append([]complex64(nil), state.ShiftedHistory...),
  28. IQNew: iqNew,
  29. }
  30. }
  31. for signalID := range r.streamState {
  32. if _, ok := active[signalID]; !ok {
  33. delete(r.streamState, signalID)
  34. }
  35. }
  36. return invocations, nil
  37. }
  38. func (r *BatchRunner) applyStreamingGPUExecutionResults(results []StreamingGPUExecutionResult) []StreamingExtractResult {
  39. out := make([]StreamingExtractResult, len(results))
  40. for i, res := range results {
  41. state := r.streamState[res.SignalID]
  42. if state != nil {
  43. state.NCOPhase = res.NCOPhaseOut
  44. state.PhaseCount = res.PhaseCountOut
  45. state.ShiftedHistory = append(state.ShiftedHistory[:0], res.HistoryOut...)
  46. }
  47. out[i] = StreamingExtractResult{
  48. SignalID: res.SignalID,
  49. IQ: res.IQ,
  50. Rate: res.Rate,
  51. NOut: res.NOut,
  52. PhaseCount: res.PhaseCountOut,
  53. HistoryLen: res.HistoryLenOut,
  54. }
  55. }
  56. return out
  57. }