# About signal process window design?

**URL:** <https://www.ruby-forum.com/t/about-signal-process-window-design/207503>\
**Category:** GNU Radio\
**Created:** [May 27, 2011, 3:20am UTC](https://www.ruby-forum.com/t/about-signal-process-window-design/207503 "2011-05-27T03:20:56Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [May 27, 2011, 3:20am UTC](https://www.ruby-forum.com/t/about-signal-process-window-design/207503/1 "2011-05-27T03:20:56Z")

</div>

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(beta_math.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
