FILTERS Instructor: Dr.Collins CENG 5931 GNU Radio CONTENTS Introduction List of GNU Radio C++ Blocks GNU Radio C++ Signal Processing Blocks Filters Classification of Filters Classes Functions Examples Conclusion References INTRODUCTION GNU Radio is a free software development toolkit that provides the signal processing runtime and processing blocks to implement software radios using readily-available, low-cost external RF hardware and commodity processors. It is widely used in hobbyist, academic and commercial environments to support wireless communications research as well as to implement real-world radio systems. GNU Radio applications are primarily written using the Python programming language. INTRODUCTION Cont.. Python is a multi-paradigm programming language. Rather than forcing programmers to adopt a particular style of programming, it permits several styles. They are 1. Object-Oriented Programming 2. Structured Programming. Python is often used as a scripting language, but is also used in a wide range of non-scripting contexts. Python interpreters are available for many operating systems, and Python programs can be packaged into stand-alone executable code for many systems using various tools. Features of GNU Radio Application : Software Radio Operating System: Linux Real time sampling frequency: 64 MS/s, 12-bit AD on USRP DSP language: C++ GUI host: Linux GUI language: Python Scripting language: Python List of GNU Radio C++ Blocks GNU Radio C++ signal Processing Blocks Digital Filter Design Miscellaneous Implementation Details Applications ATSC Radar Pager USRP (Universal Software Radio Peripheral) USRP 2 Gcell: Cell Broadband Engine SPE Scheduler & RPC Mechanism Misc Hardware Control GNU Radio C++ Signal Processing Blocks Top Block and Hierarchical Block Base Classes Signal Sources Signal Sinks Filters Mathematics Signal Modulation Signal Demodulation Information Coding and Decoding Synchronization Equalization Type Conversions Signal Level Control(AGC) Fourier Transform Wavelet Transform OFDM Pager Blocks Miscellaneous Blocks Slicing and Dicing Streams Voice Encoders and Decoders Base Classes for GR Blocks Collaboration diagram for GNU Radio C++ Signal Processing Blocks Filters In signal processing, a filter is a device or process that removes unwanted component or feature from a signal. Filtering is a class of signal processing, the defining feature of filters being the complete or partial suppression of some aspect of the signal. In general, it removes some frequencies in order to suppress interfering signals and reduce background noise. Classification of filters Filters are Classified into six categories 1. Analog or Digital Filter 2. Continuous or Discrete time sampled Filter 3. Linear or Non-Linear Filter 4. Time-Variant or Time-Invariant Filter 5. Active or Passive Filters 6. Finite impulse response(FIR) or Infinite impulse response(IIR) Filter Classes gr_adaptive_fir_ccf : An adaptive filter is a filter that self-adjusts its transfer function according to an optimization algorithm driven by an error signal. Because of the complexity of the optimization algorithms, most adaptive filters are digital filters. Inheritance diagram for gr_adaptive_fir_ccf gr_fft_filter_ccc: Fast FFT filter with gr_complex input, gr_complex output and gr_complex taps. Inheritance diagram for gr_fft_filter_ccc gr_filter_delay_fc: These block takes one or two float stream and outputs is a complex stream. If only one float stream is input, the real output is a delayed version of this input and the imaginary output is the filtered output. If two floats are connected to the input, then the real output is the delayed version of the first input, and the imaginary output is the filtered output. Inheritance diagram for gr_filter_delay_fc gr_fir_filter_ccc: A finite impulse response (FIR) filter is a type of a signal processing filter whose impulse response is of finite duration, because it settles to zero in finite time. This is in contrast to infinite impulse response(IIR) filters, which have internal feedback and may continue to respond indefinitely. The impulse response of an Nth-order discretetime FIR filter lasts for N+1 samples. Inheritance diagram for gr_fir_filter_ccc gr_freq_xlating_fir_filter_ccc: This class efficiently combines a frequency translation with a FIR filter and decimation. It is ideally suited for a "channel selection filter" and can be efficiently used to select and decimate a narrow band signal out of wide bandwidth input. Inheritance diagram for gr_freq_xlating_fir_filter_ccc gr_hilbert_fc: real output is delayed input and imaginary output is hilbert filtered (90 degree phase shift) version of input. Inheritance diagram for gr_hilbert_fc gr_iir_filter_ffd: An infinite impulse response (IIR) filter is a type of a signal processing filter whose impulse response is of infinite duration. This is in contrast to finite impulse response(FIR) filters, which have internal feedback and may continue to respond definitely. The impulse response of an Nth-order discrete-time IIR filter lasts for N+1 samples. Inheritance diagram for gr_iir_filter_ffd gr_interp_fir_filter_ccc: An interpolating FIR filter is an optimized class of finite impulse response filter combined with an interpolator. Inheritance diagram for gr_interp_fir_filter_ccc Functions int gr_adaptive_fir_ccf::work ( int gr_vector_const_void_star& gr_vector_void_star& noutput_items, input_items, output_items ) int gr_fft_filter_ccc::work ( int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items ) intgr_filter_delay_fc::work(int gr_vector_const_void_star& gr_vector_void_star& ) noutput_items, input_items, output_items int gr_fir_filter_ccc::work ( int noutput_items, gr_vector_const_void_star & input_items, gr_vector_void_star & output_items ) gr_freq_xlating_fir_filter_ccc::gr_freq_xlating_fir_filter_ccc ( int decimation, const std::vector<gr_complex > & double double taps, center_freq, sampling_freq ) int gr_iir_filter_ffd::work ( int noutput_items, gr_vector_const_void_star & input_items, gr_vector_void_star & output_items ) Example of low pass filter: chan_filt_coeffs = optfir.low_pass (1, # gain usrp_rate, # sampling rate 80e3, # passband cutoff 115e3, # stopband cutoff 0.1, # passband ripple 60) # stopband attenuation Example of frequency translation filter #Decimating Channel filter with frequency translation self.ddc = gr.freq_xlating_fir_filter_ccf(if_decim, # decimation rate chan_coeffs, # taps 0, # frequency translation amount self.if_rate) # input sample rate Conclusion In this topic i discussed several kinds of blocks that are used in GNU python programming on c++ platform and also discussed different kinds of functions and classes that are used in GNU library to perform different types of filter operations . References http://gnuradio.org/redmine/wiki/gnuradio http://en.wikipedia.org/wiki/Filter_(signal_processing) http://staff.washington.edu/jon/frameworks.html