Welcome, guest | Sign In | My Account | Store | Cart
# RF_Attenuator.py
#
# Another kids level building and coding project...
#
# This DEMO is to show how to generate a simple identical waveform out of each channel
# BUT in anti-phase. A high quality dual trace Oscilloscope will show the waveforms generated 
# are in anti-phase. This simple project uses this technique to produce a _large_ AC
# Voltage across the two _hot_ output sections of the earphone socket. The output from the
# earphone socket is effectively being used in "Bridge Output" mode for this project.
# The circuit below uses this "Bridge Output" technique as a control for this RF Attenuator.
# Originally designed for a Macbook Pro, OSX 10.7.5 and Python 2.6.7 and 2.7.1.
#
# Circuit Diagram.                      +-------+------+----------------------------+
#          Tip --> O <-------------+ AC |       |      |                            |
#  Middle Ring --> H <----+       / \   |       |      |                            \
#  Ground Ring --> H      |      /   \  |       |      |                            /
#                .===.    |     / D1  \ |       |      |                            \
#      Plastic   |   |    |    / |\ |+ \|       |      |                         R2 /
#       Body --> |   |    | - + -| >|-  + +     |      |                            \
#   3.2mm Stereo |   |    |   |\ |/ |  /|       |      |                            /
#    Jack Plug    \ /     |   | \     / |       |      \    J2    || C3     +| /|   |   |\ |+     C4 ||   J3
#        J1        H      |   |  \   /  |  C2 -----    /     O----||----+----|< |---+---| >|----+----||----O
#                 ~~~     |   |   \ /   |     -----    \    I/P   ||    |    | \|       |/ |    |    ||   O/P TO RX
#                         +----)---+ AC |       |   R4 /     O          \     D2         D3     \          O
#                             |     + =====     |      \     |          /                       /          |
#                             |    C1 -----     |      /     |          \                       \          |
#                             |         |       |      |     |       R1 /                    R3 /          |
#                             |         |       |      |     |          \                       \          |
#                             |         |       |      |     |          /                       /          |
#                             |         |       |      |     |          |                       |          |
#                             +---------+-------+------+-----+----------+-----------------------+----------+
#                           __|__
#                           /////
# R1, R2, R3.......................  150 Ohms, 1/4W, 10% tolerance.
# R4...............................  100 KilOhms, 1/4W, 10% tolerance.
# C1...............................  100uf, 16V, electrolytic.
# C2...............................  0.1uf, any type.
# C3, C4...........................  0.01uF, any type.
# D1...............................  Any small bridge rectifier.
# D2, D3...........................  1N4148, small signal diode.
# J1...............................  3.2mm standard stereo jack plug.
# J2, J3...........................  Any reasonable quality RF sockets.
# Enamelled copper wire............  As required.
# Coloured hook up wire............  As required.
# Stripboard.......................  As required.
# NOTE:- This circuit CAN be made simpler by omitting D3 and R3 and connecting C4 to the Anode of D2.
# As a final addendum for the circuit, transformer coupling would completely isolate the computer from the attenuator.
#
# PyAudio can be obtained from here:- http://people.csail.mit.edu/hubert/pyaudio/
# There are various versions for _all_ versions of Python.
#
# Tested on:-
# 1) A Macbook Pro, OSX 10.7.5 and Python 2.6.7 and 2.7.1.
# 2) Windows Vista, 32 bit, on various machines with Python 2.6.x.
# 3) Debian 6.0.0 using Python 2.6.6 on an HP dv2036ea notebook.
#
# Ensure the sound is enabled and the volume is turned up. Use the system volume control to vary the output...
#
# Copy the file to a folder/drawer/directory of your choice as "RF_Attenuator.py" without the quotes.
#
# Start the Python interpreter from a Terminal/CLI window.
#
# To run the RF Attenuetor, (depending upon the platform), just use at the ">>>" prompt:-
#
# >>> exec(open("/full/path/to/RF_Attenuator.py").read())<CR>
#
# And away you go...
#
# This code is issued as Public Domain...
#
# Connect an RF signal generator to the attenuator input. Connect a high quality receiver with a reasonably
# calibrated S-Meter to the attenuator output, both on the same frequency. Vary the output level using the
# OS's global output control and watch the S-Meter vary in unison... There WILL be some insertion loss!
#
# $VER: RF_Attenuator.py_Version_0.00.10_(C)2012-2013_B.Walker_G0LCU.

# The simple code proper...
import pyaudio

print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$VER: RF_Attenuator.py_Version_0.00.10_(C)2012-2013_B.Walker_G0LCU.\n")
print("A DEMO showing how to generate the same waveform in anti-phase for")
print("a kids level, platform independant, SW listener, RF Attenuator...\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n")

# Open the stream required, stereo mode, 8 bit depth per channel...
stream=pyaudio.PyAudio().open(format=pyaudio.paInt8,channels=2,rate=16000,output=True)

# Now generate a signal, 8 bit depth, in anti-phase at the speakers or headphone output socket for about 25 seconds.
# Bytes 1, 3, 5 and 7 are used for the left channel and 2, 4, 6 and 8 for the right channel.
for n in range(0,100000,1): stream.write(b"\x7F\x80\x7F\x80\x80\x7F\x80\x7F")
# This would be the byte string for both waveforms to be in-phase; b"\x7F\x7F\x7F\x7F\x80\x80\x80\x80"

# Close the open _channels_...
stream.close()
pyaudio.PyAudio().terminate()

# End of RF_Attenuator.py program...
# Enjoy finding simple solutions to often very difficult problems... ;o)

History