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.

71 Zeilen
1.9KB

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