func main() { N := 20 /// 20 samples L := 4 /// 5tap channel begin := time.Now() var cdma core.CDMA cdma.InitializeChip() cdma.SetSpreadCode(vlib.NewOnesC(L), true) samples := vlib.VectorC(sources.RandNCVec(N, 1)) var data gocomm.SComplex128Obj /// METHOD A data.Ts = 1 data.TimeStamp = 0 data.MaxExpected = N data.Message = "" for i := 0; i < N; i++ { data.Next(samples[i]) chips := cdma.SpreadFn(data) output := cdma.DeSpreadFn(chips) fmt.Printf("\nTxSymbol %v ", data) // fmt.Printf("\nTx %v ", chips) fmt.Printf("\nRxSymbol %v ", output) } /// METHOD B // dataArray.MaxExpected = samples.Size() // inCHA := gocomm.NewComplex128Channel() // outputPin := filter.PinByID(1) // go filter.Filter(inCHA) // go chipset.Sink(outputPin) // /// Actual data pushing // for i := 0; i < N; i++ { // dataArray.MaxExpected = N // dataArray.Ch = samples[i] // inCHA <- dataArray // } //fmt.Printf("\nFilter Residues %v", filter.FilterMemory) // Of code fmt.Printf("\nTime Elapsed : %v\n", time.Since(begin)) }
func (m *ChannelEmulator) AWGNChannel(dummy gocomm.Complex128Channel) { // fmt.Printf("\n Noise ready to Input %v", dummy) outCH := m.Pins["symbolOut"].Channel.(gocomm.Complex128Channel) // fmt.Printf("\n Output ready to Output %v", outCH) var chdataOut gocomm.SComplex128Obj var chdataIn gocomm.SComplex128Obj samples := 1 // result := make([]complex64, samples) var StdDev float64 = math.Sqrt(m.noise * .5) var Mean float64 = m.Mean var noise complex128 // var noisevector vlib.VectorC for i := 0; i < samples; i++ { chdataIn = <-dummy chdataOut.MaxExpected = chdataIn.MaxExpected samples = chdataIn.MaxExpected // fmt.Printf("\nAWGN expects %d samples @ %v", samples, dummy) chdataOut.Message = chdataIn.Message chdataOut.Ts = chdataIn.Ts chdataOut.TimeStamp = chdataIn.TimeStamp if !strings.Contains(chdataIn.Message, "BYPASS") { if Mean == 0 && StdDev == 1 { noise = complex128(complex(rand.NormFloat64(), rand.NormFloat64())) } else { noise = complex128(complex(rand.NormFloat64()*StdDev+Mean, rand.NormFloat64()*StdDev+Mean)) } // noisevector = append(noisevector, noise) chdataOut.Ch = chdataIn.Ch + noise } else { chdataOut.Ch = chdataIn.Ch } //fmt.Printf("\nNoise%f=%f", StdDev, noisevector) outCH <- chdataOut } }