discuss-gnuradio
[Top][All Lists]
Advanced

[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

Attachment: window.py
Description: Binary data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]