aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/sigProcLibTest.cpp
diff options
context:
space:
mode:
authorThomas Tsou <tom@tsou.cc>2013-08-20 19:31:14 -0400
committerThomas Tsou <tom@tsou.cc>2013-09-05 06:07:33 -0400
commitacc9ee9fc05914d40250e13ae885bf88bd9e672b (patch)
tree5c348018406e082b64f6e218b08a823c43ad940b /Transceiver52M/sigProcLibTest.cpp
parent9520ecd0c52b4c96078e2fc570085954ced8934d (diff)
Transceiver52M: Replace convolve and related calls with SSE implementation
This large patch replaced the convolve() call with an SSE vector enabled version. The lower C and SSE intrinsic based code operates on fixed and aligned vectors for the filter taps. The storage format of interleaved I/Q for both complex and real vectors is maintained. SSE filter tap values must: 1. Start 16-byte aligned 2. Number with a multiple of 4 between 4 and 20 for real taps 3. Number with a multiple of 4 for complex taps Non-compliant values will fall back to non-SSE usage. Fixed length iterators mean that head and tail cases may require reallocation of the input vector, which is automatically handled by the upper C++ interface. Other calls are affected by these changes and adjusted or rewritten accordingly. The underlying algorithms, however, are unchanged. generateGSMPulse() analyzeTrafficBurst() detectRACHBurst() Intel SSE configuration is automatically detected and configured at build time with Autoconf macros. Signed-off-by: Thomas Tsou <tom@tsou.cc>
Diffstat (limited to 'Transceiver52M/sigProcLibTest.cpp')
-rw-r--r--Transceiver52M/sigProcLibTest.cpp170
1 files changed, 0 insertions, 170 deletions
diff --git a/Transceiver52M/sigProcLibTest.cpp b/Transceiver52M/sigProcLibTest.cpp
deleted file mode 100644
index f673fcd..0000000
--- a/Transceiver52M/sigProcLibTest.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
-* Copyright 2011 Free Software Foundation, Inc.
-* Copyright 2008, 2010 Kestrel Signal Processing, Inc.
-*
-* This software is distributed under the terms of the GNU Affero Public License.
-* See the COPYING file in the main directory for details.
-*
-* This use of this software may be subject to additional restrictions.
-* See the LEGAL file in the main directory for details.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-/*
-Contributors:
-Harvind S. Samra, hssamra@kestrelsp.com
-*/
-
-
-#include "sigProcLib.h"
-//#include "radioInterface.h"
-#include <Logger.h>
-#include <Configuration.h>
-#include <GSMCommon.h>
-
-using namespace std;
-using namespace GSM;
-
-ConfigurationTable gConfig;
-
-int main(int argc, char **argv) {
-
- gLogInit("sigProcLibTest","DEBUG");
-
- int sps = 1;
-
- int TSC = 2;
-
- sigProcLibSetup(sps);
-
- signalVector *gsmPulse = generateGSMPulse(2,sps);
- cout << *gsmPulse << endl;
-
- BitVector RACHBurstStart = "01010101";
- BitVector RACHBurstRest = "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
-
- BitVector RACHBurst(BitVector(RACHBurstStart,gRACHSynchSequence),RACHBurstRest);
-
-
- signalVector *RACHSeq = modulateBurst(RACHBurst,
- *gsmPulse,
- 9,
- sps);
-
- generateRACHSequence(*gsmPulse,sps);
-
- complex a; float t;
- detectRACHBurst(*RACHSeq, 5, sps,&a,&t);
-
- //cout << *RACHSeq << endl;
- //signalVector *autocorr = correlate(RACHSeq,RACHSeq,NULL,NO_DELAY);
-
- //cout << *autocorr;
-
- //exit(1);
-
-
- /*signalVector x(6500);
- x.fill(1.0);
-
- frequencyShift(&x,&x,0.48*M_PI);
-
- signalVector *y = polyphaseResampleVector(x,96,65,NULL);
-
- cout << *y << endl;
-
- exit(1);*/
-
- //CommSig normalBurstSeg = "0000000000000000000000000000000000000000000000000000000000000";
-
- BitVector normalBurstSeg = "0000101010100111110010101010010110101110011000111001101010000";
-
- BitVector normalBurst(BitVector(normalBurstSeg,gTrainingSequence[TSC]),normalBurstSeg);
-
-
- generateMidamble(*gsmPulse,sps,TSC);
-
-
- signalVector *modBurst = modulateBurst(normalBurst,*gsmPulse,
- 0,sps);
-
-
- //delayVector(*rsVector2,6.932);
-
- complex ampl = 1;
- float TOA = 0;
-
- //modBurst = rsVector2;
- //delayVector(*modBurst,0.8);
-
- /*
- signalVector channelResponse(4);
- signalVector::iterator c=channelResponse.begin();
- *c = (complex) 9000.0; c++;
- *c = (complex) 0.4*9000.0; c++; c++;
- *c = (complex) -1.2*0;
-
- signalVector *guhBurst = convolve(modBurst,&channelResponse,NULL,NO_DELAY);
- delete modBurst; modBurst = guhBurst;
- */
-
- signalVector *chanResp;
- /*
- double noisePwr = 0.001/sqrtf(2);
- signalVector *noise = gaussianNoise(modBurst->size(),noisePwr);
- */
- float chanRespOffset;
- analyzeTrafficBurst(*modBurst,TSC,8.0,sps,&ampl,&TOA,1,true,&chanResp,&chanRespOffset);
- //addVector(*modBurst,*noise);
-
- cout << "ampl:" << ampl << endl;
- cout << "TOA: " << TOA << endl;
- //cout << "chanResp: " << *chanResp << endl;
- SoftVector *demodBurst = demodulateBurst(*modBurst,*gsmPulse,sps,(complex) ampl, TOA);
-
- cout << *demodBurst << endl;
-
- /*
- COUT("chanResp: " << *chanResp);
-
- signalVector *w,*b;
- designDFE(*chanResp,1.0/noisePwr,7,&w,&b);
- COUT("w: " << *w);
- COUT("b: " << *b);
-
-
- SoftSig *DFEBurst = equalizeBurst(*modBurst,TOA-chanRespOffset,sps,*w,*b);
- COUT("DFEBurst: " << *DFEBurst);
-
- delete gsmPulse;
- delete RACHSeq;
- delete modBurst;
- delete sendLPF;
- delete rcvLPF;
- delete rsVector;
- //delete rsVector2;
- delete autocorr;
- delete chanResp;
- delete noise;
- delete demodBurst;
- delete w;
- delete b;
- delete DFEBurst;
- */
-
- sigProcLibDestroy();
-
-}