##// END OF EJS Templates
test de la codificacion
Miguel Valdez -
r320:983df3163a56
parent child
Show More
@@ -0,0 +1,146
1 import numpy
2 import scipy.signal
3 import matplotlib
4 matplotlib.use("TKAgg")
5 import pylab as pl
6
7 import time
8
9 def getInverseFilter(code, lenfilter=None):
10
11 nBauds = len(code)
12
13 if lenfilter == None:
14 lenfilter = 10*nBauds
15
16 codeBuffer = numpy.zeros((lenfilter), dtype=numpy.float32)
17 codeBuffer[0:nBauds] = code
18
19 inverse_filter = numpy.real(numpy.fft.ifft(1.0/numpy.fft.fft(codeBuffer)))
20 inverse_filter = numpy.roll(inverse_filter, shift=120)
21
22 # pl.plot(codeBuffer)
23 # pl.plot(inverse_filter)
24 # pl.show()
25
26 return inverse_filter
27
28 def getSignal(nChannels, nHeis):
29
30 u = numpy.complex(1,2)
31 u /= numpy.abs(u)
32
33 signal = numpy.random.rand(nChannels, nHeis)
34 signal = signal.astype(numpy.complex)
35
36 signal *= u
37
38 return signal
39
40 def time_decoding(signal, code):
41
42 ini = time.time()
43
44 nBauds = len(code)
45 nChannels, nHeis = signal.shape
46 datadec = numpy.zeros((nChannels, nHeis - nBauds + 1), dtype=numpy.complex)
47
48 tmpcode = code.astype(numpy.complex)
49 #######################################
50 ini = time.time()
51
52 for i in range(nChannels):
53 datadec[i,:] = numpy.correlate(signal[i,:], code, mode='valid')/nBauds
54
55 print time.time() - ini
56
57 return datadec
58
59 def freq_decoding(signal, code):
60
61 ini = time.time()
62
63 nBauds = len(code)
64 nChannels, nHeis = signal.shape
65
66 codeBuffer = numpy.zeros((nHeis), dtype=numpy.float32)
67
68 codeBuffer[0:nBauds] = code
69
70 fft_code = numpy.conj(numpy.fft.fft(codeBuffer)).reshape(1, -1)
71
72 ######################################
73 ini = time.time()
74
75 fft_data = numpy.fft.fft(signal, axis=1)
76
77 conv = fft_data*fft_code
78
79 data = numpy.fft.ifft(conv, axis=1)/nBauds
80
81 datadec = data[:,:-nBauds+1]
82
83 print time.time() - ini
84
85 return datadec
86
87 def fftconvol_decoding(signal, code):
88
89 ini = time.time()
90
91 nBauds = len(code)
92 nChannels, nHeis = signal.shape
93 datadec = numpy.zeros((nChannels, nHeis - nBauds + 1), dtype=numpy.complex)
94
95 tmpcode = code.astype(numpy.complex)
96 #######################################
97 ini = time.time()
98
99 for i in range(nChannels):
100 datadec[i,:] = scipy.signal.fftconvolve(signal[i,:], code[-1::-1], mode='valid')/nBauds
101
102 print time.time() - ini
103
104 return datadec
105
106 def filter_decoding(signal, code):
107
108 ini = time.time()
109
110 nBauds = len(code)
111 nChannels, nHeis = signal.shape
112
113 inverse_filter = getInverseFilter(code)
114
115 datadec = numpy.zeros((nChannels, nHeis + len(inverse_filter) - 1), dtype=numpy.complex)
116 #######################################
117 ini = time.time()
118
119 for i in range(nChannels):
120 datadec[i,:] = numpy.convolve(signal[i,:], inverse_filter, mode='full')
121
122 datadec = datadec[:,120:120+nHeis]
123
124 print time.time() - ini
125
126 return datadec
127
128 nChannels, nHeis = 8, 3900
129 index = 300
130 code = numpy.array([1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1])
131 signal = getSignal(nChannels, nHeis)
132 signal[0,index:index+len(code)] = code*10
133
134 signalout = time_decoding(signal, code)
135 signalout1 = freq_decoding(signal, code)
136 signalout2 = fftconvol_decoding(signal, code)
137 signalout3 = filter_decoding(signal, code)
138
139 #pl.plot(numpy.abs(signal[0]))
140 pl.plot(numpy.abs(signalout[0]))
141 #pl.plot(numpy.abs(signalout1[0]))
142 #pl.plot(numpy.abs(signalout2[0]))
143 pl.plot(numpy.abs(signalout3[0])+1.0)
144 pl.show()
145
146 No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now