Wideband autonomous SDR analysis engine forked from sdr-visual-suite
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

63 Zeilen
1.7KB

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