[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Discuss-gnuradio] about signal process window design?
From: |
梁初阳 |
Subject: |
[Discuss-gnuradio] about signal process window design? |
Date: |
Fri, 27 May 2011 09:20:05 +0800 (CST) |
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 <module>
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.0*c_index*math.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
window.py
Description: Binary data
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Discuss-gnuradio] about signal process window design?,
梁初阳 <=