Wideband autonomous SDR analysis engine forked from sdr-visual-suite
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

61 строка
1.6KB

  1. package gpudemod
  2. import "sdr-wideband-suite/internal/dsp"
  3. func (r *BatchRunner) ResetSignalState(signalID int64) {
  4. if r == nil || r.streamState == nil {
  5. return
  6. }
  7. delete(r.streamState, signalID)
  8. }
  9. func (r *BatchRunner) ResetAllSignalStates() {
  10. if r == nil {
  11. return
  12. }
  13. r.streamState = make(map[int64]*ExtractStreamState)
  14. }
  15. func (r *BatchRunner) getOrInitExtractState(job StreamingExtractJob, sampleRate int) (*ExtractStreamState, error) {
  16. if r == nil {
  17. return nil, ErrUnavailable
  18. }
  19. if r.streamState == nil {
  20. r.streamState = make(map[int64]*ExtractStreamState)
  21. }
  22. decim, err := ExactIntegerDecimation(sampleRate, job.OutRate)
  23. if err != nil {
  24. return nil, err
  25. }
  26. state := r.streamState[job.SignalID]
  27. if state == nil {
  28. state = &ExtractStreamState{SignalID: job.SignalID}
  29. r.streamState[job.SignalID] = state
  30. }
  31. if state.ConfigHash != job.ConfigHash {
  32. ResetExtractStreamState(state, job.ConfigHash)
  33. }
  34. state.Decim = decim
  35. state.NumTaps = job.NumTaps
  36. if state.NumTaps <= 0 {
  37. state.NumTaps = 101
  38. }
  39. cutoff := job.Bandwidth / 2
  40. if cutoff < 200 {
  41. cutoff = 200
  42. }
  43. base := dsp.LowpassFIR(cutoff, sampleRate, state.NumTaps)
  44. state.BaseTaps = make([]float32, len(base))
  45. for i, v := range base {
  46. state.BaseTaps[i] = float32(v)
  47. }
  48. state.PolyphaseTaps = BuildPolyphaseTapsPhaseMajor(state.BaseTaps, state.Decim)
  49. if cap(state.ShiftedHistory) < maxInt(0, state.NumTaps-1) {
  50. state.ShiftedHistory = make([]complex64, 0, maxInt(0, state.NumTaps-1))
  51. } else if state.ShiftedHistory == nil {
  52. state.ShiftedHistory = make([]complex64, 0, maxInt(0, state.NumTaps-1))
  53. }
  54. state.Initialized = true
  55. return state, nil
  56. }