discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Discuss-gnuradio] unknown peak in the FFT-Plot Sink


From: Markus Feldmann
Subject: [Discuss-gnuradio] unknown peak in the FFT-Plot Sink
Date: Fri, 20 Mar 2009 13:06:21 +0100
User-agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103)

Hi All,

in all the examples and in my own gnuradio Programm, there
is an unknown Peak in the FFT-Plot sink.

Here is the Screenshot:
http://img257.imageshack.us/img257/8017/nochstrender.jpg

How to avoid this ?
Wherefrom does this come ?
I attach my Program to this mail, but i think it is still ok.

I need this to measure the power of the noise.

Further on you see the noise has a wave form always in
the middle of the FFT-Plot, still when i watch another
spectrum. In the gnuraio example from Eric Blossom this
doesn't appear, but this example only use a sin-signal-source
not a usrp-source.

How to avoid this ?
I tried to change the decimation and the sample Rate,
but doesn't solved this.

Regards Markus
#!/usr/bin/env python
# encoding: utf8
"""
Title:Mehrfrequentes Impulsmessverfahren mit FPGA-
gestützten SDR-(Software definded radio)-Komponenten.
Beschreibung: Mit Hilfe dieses Programmes soll ein
mehrfrequentes Impulsmessverfahren entwickelt werden,
womit Teilentladungen an Hochspannungsisolationen
nachgewiesen werden können.

"""

__title__='Mehrfrequentes Impulsmessverfahren'
__author__='Markus Feldmann'
__version__='Diplom WS08/09 Ver.:2009-03-09-01'
__license__='GPL'


from gnuradio import gr
from gnuradio import usrp
from gnuradio.wxgui import fftsink2
from grc_gnuradio import usrp as grc_usrp
from grc_gnuradio import wxgui as grc_wxgui
from optparse import OptionParser
from usrpm import usrp_dbid
import sys
import time
import wx


class uebertragungschar_LF_RX(grc_wxgui.top_block_gui):

        def __init__(self, options):
                grc_wxgui.top_block_gui.__init__(self,
                   __title__+' - '+__author__+' - '+__version__)

                ##################################################
                # DEBUG
                ##################################################
                self.debug = options.debug
                if self.debug is True:
                        print 'DEBUG: start debug modus.'
        
                        
                ##################################################
                # Parameters
                ##################################################
                self.usrp_freq = options.usrp_freq
                self.usrp_freq_min = options.usrp_freq_min
                self.usrp_freq_max = options.usrp_freq_max
                self.decim = options.usrp_decim

                ##################################################
                # Variables
                ##################################################
                self.middle_freq_fft_plot = self.usrp_freq
                self.gain_usrp_source = 0
                """
                The Argument options.dev must be converted into the intern
                ID, so that we can select the device. The ID will be saved
                in this variable:
                """
                self.selected_device = None

                ##################################################
                # Blocks
                ##################################################
#               self.gr_complex_to_real_0 = gr.complex_to_real(1)
                self.usrp_source = usrp.source_c(which=0, decim_rate=self.decim)

                ##################################################
                # Further Variables
                ##################################################
                """
                Because we do not know where the LF_RX(for example) is placed, 
we have
                to search for it and select it.
                First we have to get the intern ID. For example we search after 
LF_RX
                and get an ID like (1, 0), this means the LF_RX is placed onto
                side B and there at RXB.
                (0, 0)-->side A/RXA
                (0, 1)-->side A/TXA
                (1, 0)-->side B/RXB
                (1, 1)-->side B/TXB
                After we found the device and got the intern ID, we select it.
                """
                if options.device=='LFRX': 
                        self.device_found = usrp.pick_subdev(self.usrp_source, 
(usrp_dbid.LF_RX,))
                        if self.debug: print 'DEBUG: <self.device_found> is 
',self.device_found
                        self.selected_device = 
usrp.selected_subdev(self.usrp_source, self.device_found)
                        if self.debug: print 'DEBUG: <self.selected_device> is 
',self.selected_device
                elif options.device=='BasicRX':
                        self.device_found = usrp.pick_subdev(self.usrp_source, 
(usrp_dbid.BASIC_RX,))
                        if self.debug: print 'DEBUG: <self.device_found> is 
',self.device_found
                        self.selected_device = 
usrp.selected_subdev(self.usrp_source, self.device_found)
                        if self.debug: print 'DEBUG: <self.selected_device> is 
',self.selected_device
                else:
                        print 'ERROR: You selected an illegal device named: 
',options.device
                        parser.print_help()
                        sys.exit(1)
                self.mux_value = 
usrp.determine_rx_mux_value(self.usrp_source,self.device_found)
                if self.debug: print 'DEBUG: <self.mux_value>',self.mux_value
                """
                We have to calculate the fftp_rate which is equal to the 
usrp_rate.
                At adc_rate=64MS/s and decim=250 we get an usrp_rate of 256 kS/s
                """
                self.usrp_rate = (self.usrp_source.adc_rate() / self.decim ) / 2
                if self.debug: print 'DEBUG: <self.decim> is ',self.decim
                if self.debug: print 'DEBUG: <self.usrp_source.adx_rate> is 
',self.usrp_source.adc_rate()
                if self.debug: print 'DEBUG: <self.usrp_rate> is 
',self.usrp_rate

                ##################################################
                # Futher Blocks
                ##################################################
#               self.gr_throttle_0 = gr.throttle(gr.sizeof_float*1, 
self.usrp_rate)
                self.usrp_source.set_mux(self.mux_value)
                self.wxgui_fftsink2 = fftsink2.fft_sink_c(
                        self.GetWin(),
                        baseband_freq = self.usrp_freq,
                        y_per_div = 10,
                        y_divs = 8,
                        ref_level = 0,
                        sample_rate = self.usrp_rate,
                        fft_size = 512*2,
                        #fft_rate = 30,
                        ref_scale=11885000.0,# 11885000.0 oder 32768.0
                        average = True,
                        avg_alpha = None,
                        title = "FFT Plot",
                        size=(1024, 600),
                        peak_hold = False,
                )
                self.GridAdd(self.wxgui_fftsink2.win, 0, 0, 2, 4)

                ##################################################
                # Controls
                ##################################################
                self._usrp_freq_control = grc_wxgui.slider_horizontal_control(
                        window=self.GetWin(),
                        callback=self.set_usrp_freq,
                        label="Oszillatorfrequenz",
                        value=self.usrp_freq,
                        min=self.usrp_freq_min,
                        max=self.usrp_freq_max,
                        num_steps=1e3,
                        slider_length=1024,
                )
                self.Add(self._usrp_freq_control)
                self._gain_usrp_source_control = 
grc_wxgui.slider_vertical_control(
                        window=self.GetWin(),
                        callback=self.set_gain_usrp_source,
                        label="Gain Usrp Source",
                        value=self.gain_usrp_source,
                        min=0,
                        max=20,
                        num_steps=100,
                        slider_length=200,
                )
                self.GridAdd(self._gain_usrp_source_control, 4, 0, 2, 1)

                ##################################################
                # Connections
                ##################################################
                self.connect((self.usrp_source, 0), (self.wxgui_fftsink2, 0))

                #################################################
                # Set Inital Value
                #################################################
                self.set_usrp_freq(self.usrp_freq)
                self.set_gain_usrp_source(0)
                self._gain_usrp_source_control.set_value(0)

        def set_usrp_freq_min(self, usrp_freq_min):
                self.usrp_freq_min = usrp_freq_min

        def set_usrp_freq_max(self, usrp_freq_max):
                self.usrp_freq_max = usrp_freq_max

        def set_usrp_freq(self, freq):
                self.usrp_freq = freq
                """
                The usrp.tune command takes 4 arguments, first ist your <Usrp 
Source>
                the second is Digital Down Converter Number mostly 0, followed 
by the
                the selected device(for example our LFRX) ending with the 
target frequency
                we are interesting in.
                """
                usrp.tune(self.usrp_source, 0, self.selected_device, 
self.usrp_freq)
                self.wxgui_fftsink2.set_baseband_freq(self.usrp_freq)
                
        def get_usrp_freq(self):
                return self.usrp_freq

        def set_gain_usrp_source(self, gain_usrp_source):
                self.gain_usrp_source = gain_usrp_source
                self.selected_device.set_gain(self.gain_usrp_source)

if __name__ == '__main__':
        parser = OptionParser()
        parser.add_option("-e","--dev", dest="device", type="str", 
default='LFRX',
                          help="Replace <DEVICE> by 'LFRX' or 'BasicRX'.")      
        parser.add_option("-c","--decim", dest="usrp_decim", type="int", 
default='250',
                          help="Replace <USRP_DECIM> by the desired decimation 
Rate of the USRP(default is 250).")
        parser.add_option("-f","--usrp-freq", dest="usrp_freq", type="float", 
default=1e6)
        parser.add_option("-u","--usrp-freq-min", dest="usrp_freq_min", 
type="float", default=500.0e3)
        parser.add_option("-o","--usrp-freq-max", dest="usrp_freq_max", 
type="float", default=10e6)
        parser.add_option("-d", "--debug", action="store_true", default=False,
                          help="Start the debug modus.")
        (options, args) = parser.parse_args()   
        tb = uebertragungschar_LF_RX(options)
        tb.Run()


reply via email to

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