Wideband autonomous SDR analysis engine forked from sdr-visual-suite
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

46 lines
1.1KB

  1. package gpudemod
  2. import "testing"
  3. func TestCPUOracleMonolithicVsChunkedPolyphase(t *testing.T) {
  4. iq := makeDeterministicIQ(120000)
  5. mk := func() *CPUOracleState {
  6. taps := makeLowpassTaps(65)
  7. return &CPUOracleState{
  8. SignalID: 1,
  9. ConfigHash: 999,
  10. NCOPhase: 0,
  11. Decim: 20,
  12. PhaseCount: 0,
  13. NumTaps: 65,
  14. ShiftedHistory: make([]complex64, 0, 64),
  15. BaseTaps: taps,
  16. PolyphaseTaps: BuildPolyphaseTapsPhaseMajor(taps, 20),
  17. }
  18. }
  19. phaseInc := 0.013
  20. mono := CPUOracleExtractPolyphase(iq, mk(), phaseInc)
  21. chunked := func() []complex64 {
  22. state := mk()
  23. out := make([]complex64, 0)
  24. chunks := []int{4096, 3000, 8192, 7777, 12000}
  25. pos := 0
  26. for _, n := range chunks {
  27. if pos >= len(iq) {
  28. break
  29. }
  30. end := pos + n
  31. if end > len(iq) {
  32. end = len(iq)
  33. }
  34. out = append(out, CPUOracleExtractPolyphase(iq[pos:end], state, phaseInc)...)
  35. pos = end
  36. }
  37. if pos < len(iq) {
  38. out = append(out, CPUOracleExtractPolyphase(iq[pos:], state, phaseInc)...)
  39. }
  40. return out
  41. }()
  42. requireComplexSlicesClose(t, mono, chunked, 1e-5)
  43. }