About signal process window design?


#1

Hi all:
When I try to implement some spectrum estimate algorithm
encounter a problem like this hope some one can help me out ,cause I
really don’t understand how to design
the window in window.py which I have post below or in the attachment.

please help me figure out the midn(fft_size) ?problem

Thanks all! God bless you!

File “usrp_welch_rt.py”, line 327, in
main ()
File “usrp_welch_rt.py”, line 323, in main
app = stdgui2.stdapp(app_top_block, “USRP Welch”, nstatus=1)
File
“/usr/local/lib/python2.6/dist-packages/gnuradio/wxgui/stdgui2.py”, line
36, in init
wx.App.init (self, redirect=False)
File
“/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py”, line
7978, in init
self._BootstrapApp()
File
“/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py”, line
7552, in _BootstrapApp
return core.PyApp__BootstrapApp(*args, **kwargs)
File
“/usr/local/lib/python2.6/dist-packages/gnuradio/wxgui/stdgui2.py”, line
39, in OnInit
frame = stdframe (self.top_block_maker, self.title, self._nstatus)
File
“/usr/local/lib/python2.6/dist-packages/gnuradio/wxgui/stdgui2.py”, line
60, in init
self.panel = stdpanel (self, self, top_block_maker)
File
“/usr/local/lib/python2.6/dist-packages/gnuradio/wxgui/stdgui2.py”, line
81, in init
self.top_block = top_block_maker (frame, self, vbox, sys.argv)
File “usrp_welch_rt.py”, line 136, in init
mywindow1 = window.blackman2(options.fft_size)
File “/usr/local/lib/python2.6/dist-packages/gnuradio/window.py”, line
102, in blackman2
for index in xrange(midn(fft_size)+1):
NameError: global name ‘midn’ is not defined

window.py content below:

‘’’
Routines for designing window functions.
‘’’

import math
from gnuradio import gr

def izero(x):
izeroepsilon = 1e-21
halfx = x/2.0
accum = u = n = 1
while 1:
temp = halfx/n
n += 1
temp *= temp
u = temp
accum += u
if u >= IzeroEPSILON
sum:
break
return accum

def midm1(fft_size):
return (fft_size - 1)/2

def midp1(fft_size):
return (fft_size+1)/2

def freq(fft_size):
return 2.0*math.pi/fft_size

def rate(fft_size):
return 1.0/(fft_size >> 1)

def expn(fft_size):
math.log(2.0)/(midn(fft_size) + 1.0)

def hamming(fft_size):
window = []
for index in xrange(fft_size):
window.append(0.54 - 0.46 * math.cos (2 * math.pi / fft_size *
index)) # Hamming window
return window

def hanning(fft_size):
window = []
for index in xrange(fft_size):
window.append(0.5 - 0.5 * math.cos (2 * math.pi / fft_size *
index)) # von Hann window
return window

def welch(fft_size):
window = [0 for i in range(fft_size)]
j = fft_size-1
for index in xrange(midn(fft_size)+1):
window[j] = window[index] = (1.0 - math.sqrt((index -
midm1(fft_size)) / midp1(fft_size)))
j -= 1
return window

def parzen(fft_size):
window = [0 for i in range(fft_size)]
j = fft_size-1
for index in xrange(midn(fft_size)+1):
window[j] = window[index] = (1.0 - math.abs((index -
midm1(fft_size)) / midp1(fft_size)))
j -= 1
return window

def bartlett(fft_size):
mfrq = freq(fft_size)
angle = 0
window = [0 for i in range(fft_size)]
j = fft_size-1
for index in xrange(midn(fft_size)+1):
window[j] = window[index] = angle
angle += freq
j -= 1
return window

def blackman2(fft_size):
mfrq = freq(fft_size)
angle = 0
window = [0 for i in range(fft_size)]
j = fft_size-1
for index in xrange(midn(fft_size)+1):
cx = math.cos(angle)
window[j] = window[index] = (.34401 + (cx * (-.49755 + (cx *
.15844))))
angle += freq
j -= 1
return window

def blackman3(fft_size):
mfrq = freq(fft_size)
angle = 0
window = [0 for i in range(fft_size)]
j = fft_size-1
for index in xrange(midn(fft_size)+1):
cx = math.cos(angle)
window[j] = window[index] = (.21747 + (cx * (-.45325 + (cx *
(.28256 - (cx * .04672))))))
angle += freq
j -= 1
return window

def blackman4(fft_size):
mfrq = freq(fft_size)
angle = 0
window = [0 for i in range(fft_size)]
j = fft_size-1
for index in xrange(midn(fft_size)+1):
cx = math.cos(angle)
window[j] = window[index] = (.084037 + (cx * (-.29145 + (cx *
(.375696 + (cx * (-.20762 + (cx * .041194))))))))
angle += freq
j -= 1
return window

def exponential(fft_size):
expsum = 1.0
window = [0 for i in range(fft_size)]
j = fft_size-1
for index in xrange(midn(fft_size)+1):
window[j] = window[i] = (expsum - 1.0)
expsum *= expn(fft_size)
j -= 1
return window

def riemann(fft_size):
sr1 = freq(fft_size)
window = [0 for i in range(fft_size)]
j = fft_size-1
for index in xrange(midn(fft_size)):
if index == midn(fft_size):
window[index] = window[j] = 1.0
else:
cx = sr1*midn(fft_size) - index
window[index] = window[j] = math.sin(cx)/cx
j -= 1
return window

def kaiser(fft_size,beta):
ibeta = 1.0/izero(beta)
inm1 = 1.0/(fft_size)
window = [0 for i in range(fft_size)]
for index in xrange(fft_size):
window[index] = izero(betamath.sqrt(1.0 - (index * inm1)(index

  • inm1))) * ibeta
    return window

Closure to generate functions to create cos windows

def coswindow(coeffs):
def closure(fft_size):
window = [0] * fft_size
#print list(enumerate(coeffs))
for w_index in range(fft_size):
for (c_index, coeff) in enumerate(coeffs):
window[w_index] += (-1)*c_index * coeff *
math.cos(2.0c_indexmath.pi
(w_index+0.5)/(fft_size-1))
return window
return closure

blackmanharris = coswindow((0.35875,0.48829,0.14128,0.01168))
nuttall = coswindow((0.3635819,0.4891775,0.1365995,0.0106411)) #
Wikipedia calls this Blackman-Nuttall
nuttall_cfd = coswindow((0.355768,0.487396,0.144232,0.012604)) #
Wikipedia calls this Nuttall, continuous first deriv
flattop = coswindow((1.0,1.93,1.29,0.388,0.032)) # Flat top window,
coeffs from Wikipedia
rectangular = lambda fft_size: [1]*fft_size