1616
1717"""
1818from numpy import arange , array , zeros , pi , cos , sin , sqrt , log2 , argmin , \
19- hstack , repeat , tile , dot , sum , shape , concatenate , exp , log
19+ hstack , repeat , tile , dot , sum , shape , concatenate , exp , \
20+ log , vectorize
2021from itertools import product
2122from commpy .utilities import bitarray2dec , dec2bitarray
2223from numpy .fft import fft , ifft
@@ -39,10 +40,10 @@ def modulate(self, input_bits):
3940 Modulated complex symbols.
4041
4142 """
43+ mapfunc = vectorize (lambda i :
44+ self .constellation [bitarray2dec (input_bits [i :i + self .num_bits_symbol ])])
4245
43- index_list = map (lambda i : bitarray2dec (input_bits [i :i + self .num_bits_symbol ]), \
44- xrange (0 , len (input_bits ), self .num_bits_symbol ))
45- baseband_symbols = self .constellation [index_list ]
46+ baseband_symbols = mapfunc (arange (0 , len (input_bits ), self .num_bits_symbol ))
4647
4748 return baseband_symbols
4849
@@ -71,7 +72,7 @@ def demodulate(self, input_symbols, demod_type, noise_var = 0):
7172 """
7273 if demod_type == 'hard' :
7374 index_list = map (lambda i : argmin (abs (input_symbols [i ] - self .constellation )), \
74- xrange (0 , len (input_symbols )))
75+ range (0 , len (input_symbols )))
7576 demod_bits = hstack (map (lambda i : dec2bitarray (i , self .num_bits_symbol ),
7677 index_list ))
7778 elif demod_type == 'soft' :
@@ -112,7 +113,7 @@ def __init__(self, m):
112113 self .m = m
113114 self .num_bits_symbol = int (log2 (self .m ))
114115 self .symbol_mapping = arange (self .m )
115- self .constellation = array (map (self ._constellation_symbol ,
116+ self .constellation = list (map (self ._constellation_symbol ,
116117 self .symbol_mapping ))
117118
118119class QAMModem (Modem ):
@@ -135,7 +136,7 @@ def __init__(self, m):
135136 self .num_bits_symbol = int (log2 (self .m ))
136137 self .symbol_mapping = arange (self .m )
137138 mapping_array = arange (1 , sqrt (self .m )+ 1 ) - (sqrt (self .m )/ 2 )
138- self .constellation = array (map (self ._constellation_symbol ,
139+ self .constellation = list (map (self ._constellation_symbol ,
139140 list (product (mapping_array , repeat = 2 ))))
140141
141142def ofdm_tx (x , nfft , nsc , cp_length ):
@@ -146,7 +147,7 @@ def ofdm_tx(x, nfft, nsc, cp_length):
146147 cp_length = float (cp_length )
147148 ofdm_tx_signal = array ([])
148149
149- for i in xrange (0 , shape (x )[1 ]):
150+ for i in range (0 , shape (x )[1 ]):
150151 symbols = x [:,i ]
151152 ofdm_sym_freq = zeros (nfft , dtype = complex )
152153 ofdm_sym_freq [1 :(nsc / 2 )+ 1 ] = symbols [nsc / 2 :]
@@ -163,7 +164,7 @@ def ofdm_rx(y, nfft, nsc, cp_length):
163164 num_ofdm_symbols = int (len (y )/ (nfft + cp_length ))
164165 x_hat = zeros ([nsc , num_ofdm_symbols ], dtype = complex )
165166
166- for i in xrange (0 , num_ofdm_symbols ):
167+ for i in range (0 , num_ofdm_symbols ):
167168 ofdm_symbol = y [i * nfft + (i + 1 )* cp_length :(i + 1 )* (nfft + cp_length )]
168169 symbols_freq = fft (ofdm_symbol )
169170 x_hat [:,i ] = concatenate ((symbols_freq [- nsc / 2 :], symbols_freq [1 :(nsc / 2 )+ 1 ]))
0 commit comments