Skip to main content

Posts

Showing posts with the label python

GNU Radio Waterfall and CW Filter

The following GNU radio application adds a waterfall spectrogram to the previous CW filter program. The plot show 4 CW signals in the audio band (lower sideband) at 7023 kHz. The 700Hz signal is filtered and output to the laptop headphones by the CW bandpass filter. The frequency display is shown after the script which is as follows: #!/usr/bin/env python from gnuradio import gr from gnuradio import audio from lpf_bpf_class import Bandpass from gnuradio.qtgui import qtgui from PyQt4 import QtGui import sys, sip     class cw_filter(gr.top_block):     def __init__(self):         gr.top_block.__init__(self)           sample_rate = 44100         out_rate = 8000         kaiser = Bandpass()         cw_flr = gr.fir_filter_fff(1, kaiser.bpftaps)         decimate = int...

GNU Radio CW filter

An alternative to the Collins 300 Hz CW filter for the FT817 (well not really - that combination is excellent for CW and much better performance than many more expensive radios - but this is an excellent sw alternative) is this simple GNU Radio Python application which uses the Kaiser CW bandpass FIR filter below. The audio output is connected to the microphone input of a Ubuntu 11.10, 64bit OS on a Toshiba Satellite L650 laptop. Output is from the laptop headphone socket. Python code is as follows: #!/usr/bin/env python #------------------------------------------------------------------------------------ # Program uses the (previous) Python Bandpass filter # module to provide the Kaiser bandpass filter taps. # Mic input, cw filter, gain adjust and headphone    # blocks are cascaded.                               ...

CW FIR Filter

This Python module defines a Waveform class with methods sinewave and noise. Sinewave generates a specified frequency and noise generates samples with specified standard deviation. The constructor requires the duration for both methods to be specified. Class variables are the sampling rate and the number of channels. The packed strings and the signal and noise lists are available. main() adds these and uses Bandpass (from bpf_class - Kaiser window response above) to filter the unpacked samples, using lfilter from audioop. Audio before and after filtering is played and recorded to file. #!/usr/bin/python import wave, struct, math, audioop from alsaaudio import * import signal, sys, getopt from numpy.random import normal from scipy.signal import lfilter from bpf_class import Bandpass class Waveform:     " Waveform Class Generates different waveforms with duration (Sec) length "     def __init__(self, duration):      ...

Digital Bandpass Filter FIR design - Python

The python code generates the Finite Impulse Response (FIR) filter coefficients for a lowpass filter (LPF) at 10 (Hz) cut off using firwin from scipy.  A highpass filter is then created by subtracting the lowpass filter output(s) from the output of an allpass filter. To do this the coefficients of the LPF are multiplied by -1 and 1 added to the centre tap (to create the allpass filter with subtraction). A second LPF is then created with a cutoff at 15 (Hz) and the bandpass filter formed by addition of the LPF and HPF coefficients. The program also generates a test sine wave of a given amplitude and power and to this noise from a Normal distribution is added.  The graph below shows the signal and nois, and the signal (green) after filtering. The input snr is approximately 3dB. The frequency response below shows the passband centered on 12.5 (Hz), the Nyquist frequency is 50 (Hz). from numpy import cos, sin, pi, absolute, arange from numpy.random import normal fr...

Python Morse Code Generator

  #!/usr/bin/python """ Morse Code Generator. Geoff Robinson, G4AKW, Version 1.0, 4th December 2011. Requirements: Python 2.7, Linux OS, alsaaudio. Usage # python mainmorse.py The basic element of Morse code is the dot and all other elements can be defined in terms of multiples of the dot length. The word PARIS is used because this is the length of a typical word in English plain text, it has a total length of 50 dot lengths. If the word PARIS is sent ten times in a minute using normal Morse code timing then the code speed is 10 WPM. There are 500 dot lengths in a minute for 10 wpm or 1000 dot lengths per min for 20 wpm. The dot length is therefore 60mS for 20 wpm. The python dictionary 'code' and the function convert() converts characters to their dot space equivalents i.e either on or off keying. """ import serial import time, thread import random import sys import sched import wave, struct, math from alsaaudio import * impor...