Rabu, 23 Disember 2015

Basic Wirelless Handphone Charging



Introduction
Currently, wireless power is very popular due to efficient energy transfer, short charging time and ease of use. But power shortages are common when transferring over longer distances. This is because they have limited distance between transmit and receive while charging process.

Basic  Theory
Faraday's law:



 Figure 1

From the figure 1 that shows EMF is proportional to the number of turns in the coil and multiplied by the rate of change of effective magnetic flux generated by the magnetic source. We will assume that the flux source will be the charging station. Mutual coupling is ignored and the charging station is assumed to be very close to the device, which means minimum flux leakage.
The Faraday's law is shown in figure 2. The EMF will be induced when they have movement from the magnet. The voltmeter is used to show the EMF was created. 


Figure 2
From the mechanism at figure 2 we can be used to charge a battery with a voltage rating lower than the EMF. Example, for a charger rating of 5 volts, 0.7 A charging a Li-ion battery of rating 3.7 volts 1650 mAh, i.e., the battery at a voltage of 3.7 volts can output 1.65 A for about an hour (or 6.11 Wh) it will take about 1 hour 45 mins to completely charge the battery from nil. Other factors like battery age and temperature also determines charging time.

Shows in figure 3, the EMF that induced at receiver is used to charge a battery, just like an AC adapter.



 
Figure 3

Figure 4 is shows the concept of charging station, Magnetic flux will be induced inside the coil. The principle of ampere circuit law [4] is used that can determine the magnetic field associated with a current. The EMF will control by number of turn coil and flux that induce.



Figure 4

How the wireless charging work for Smartphone.
Basically, wireless charging have 2 parts. It calls transmit and receive. They have no physical contact between this part. The electrical current is then used to charge or re-charge the battery at the smartphone.

Transmit (TX): The alternating current (AC) is sent to the transmitter coil from the transmitter circuit.  The AC then induces a time varying magnetic field in the transmitter coil.

AC will flowing within the transmitter coil and  magnetic field will induces which extends to the receiving coil (within a specified distance).

The magnetic field generates current within the receiver and transmit coil of the device.  The process also referred as magnetic or resonant coupling and is achieved by both coils resonating at the same frequency.

Receive (RX): Current will flowing within the receiver coil and converted into direct current (DC) by the receiver circuit, which will be used to charge the battery in smartphone



Source :



Referance :
1. http://powerbyproxi.com/wireless-charging/. 
2. https://www.quora.com/How-do-wireless-charging-pads-work.
3. http://www.qiwireless.com/wireless-charging-htc-one-m8/ (21 Dec 2015)
4. https://en.wikipedia.org/wiki/Amp%C3%A8re's_circuital_law




Jumaat, 13 November 2015

Memori di POLIMAS


Pada 3 Nov 2015 saya melakukan lawatan akademik ke jabatan mekanikal di Politeknik Sultan Abdul Halim Muadzam Shah (Polimas).Hati memang amat teruja kerana dapat kembali ke Polimas setelah hampir 20 tahun.Matlamat utama lawatan adalah bertujuan sebagai penanda aras dengan program Diploma Mekatronik (DEM) di Polimas.






Apabila sampai ke pintu masuk Polimas terasa seperti 23 tahun dahulu iaitu pada Jun 1993 dimana polimas menerima pelajar baru untuk kemasukan Jun 1995.Berbeza dengan 2015 banyak berlaku perubahan di dalam Polimas.Banyak pembangunan dilakukan di dalam kawasan Polimas selari dengan penambahan jumlah pelajar.Teringat pada zaman berlajar,berhujan dan berpanas untuk ke bilik kuliah dari asrama demi untuk menuntut ilmu.






Saya berdiri di hadapan pintu masuk ke lab utama jabatan elektrik.Satu ketika tempat ini digunakan oleh pelajar Sijil Kejuruteraan Elektronik Perhubungan (SEP).Bengkel yang biasa digunakan oleh kelas kami pada masa itu adalah lab basic elektrik,elektronik,instrumentasi dan lab telekomunikasi.






Satu ketika laluan ini digunakan untuk ke kelas Autocad.Dihadapan lab ini biasa diadakan perjumpaan kompeni C batalion 504 AW pada setiap hari jumaat.



Gambar di atas adalah laluan utama untuk ke asrama dari blok akademik. Kawasan lapang ini biasa digunakan oleh pasukan wataniah Polimas.
                                              Cousemate 23 tahun dahulu SEP4A

Satu ketika dahulu Polimas lah yang mengenalkan pendidikan teknikal sehingga berjaya sehingga sekarang.Bersama rakan-rakan mengharungi susah senang menyiapkan tugasan yang di beri oleh pensyarah.Sahabat saya sekelas telah berjaya dalam kerjaya masing-masing dan ada diantara mereka telah menyumbangkan bakti mengajar kembali di Polimas.

Selasa, 27 Oktober 2015

KONVOKESYEN UTM KE 55

Pada 24 Oktober 2015 adalah hari yang paling bermakna kerana dapat menghadiri konvokesyen ke 55 UTM.Adalah lebih bermakna kerana dapat menamatkan pengajian peringkat sarjana dalam Kejuruteraan Elektrik Telekomunikasi.



                                                            Keadaan di dalam dewan
                                          

Saya merasa teruja untuk hadir ke majlis konvokesyen UTM yang ke 55.Perjalanan dari Pulau Pinang ke ke UTM Skudai selama 8 jam tidak terasa.Beratur panjang untuk mengambil jubah adalah satu cabaran kerana berdiri hampir 1 jam.Pada hari kejadian jam 645 pagi graduan juga terpaksa beratur untuk pendaftaran dan jika lambat sampai bermakna panjang lagi barisan untuk menunggu giliran.
Untuk menunggu giliran masuk kedalam dewan memang berpeluh.Bayangkan banyak lapisan baju yang dipakai dari long sleeve,blazer dan jubah.Lebih kurang jam 8 pagi baru la pergerakkan masuk kedewan bermula.Hati rasa lega kerana dapat merasa pendingin hawa dewan besar UTM.


                                        Bersama rakan sebelum bergerak masuk ke dewan


Tepat jam 830 pagi perarakkan masuk pegawai-pegawai UTM dan ikuti perarakkan masuk Canselor UTM,Pro Canselor dan pengurusan tertinggi UTM.Hati rasa teruja bila lagu negaraku dimainkan dan dinyayikan oleh semua yang berada di dalam dewan.Pada majlis ini penganugerahan untuk kursus MEL adalah seramai 5 graduan di mana 3 dari malaysia dan 2 graduan luar.Apabila Dekan Fakulti Elektrik membuat pengumuman,tiba la giliran saya untuk menerima Ijazah Sarjana Kejuruteraan Elektrik-Elektronik Telekomunikasi.

Majlis tamat lebih kurang Jam 12 Tghari dan lagu terakhir yang dapat didengar adalah lagu gemuruh.Pada majlis ini saya melihat team belakang tabir adalah yang terbaik.Semasa saya berbaris untuk naik ke pentas,team ini akan memastikan graduan setiasa kemas.Team ini akan membetulkan jubah,tali leher,blazer dan sebagainya.Siap beri peringatan suruh ucap “menjunjung kasih tuanku”,”terima kasih Tan Sri” dan mengingati untuk hormat kepada dekan yang berada atas pentas.This team is the BEST.
Apabila lagu gemuruh di mainkan rasa hati sayu kerana tidak tahu bila lagi akan datang untuk menghadiri majlis konvokesyen UTM.Ini kali ke 3 berada di majlis konvokesyen UTM iaitu bermula dari diploma,Ijazah dan sekarang Sarjana.

Bagi saya bukan senang untuk berada pada majlis konvo ini.Teringat pernah KG(gagal berhenti) pada sem 1 Master kerana gagal dalam subjek advance microprocessor.Prof Dr Razali Ngah (penasihat akademik) yang banyak beri nasihat supaya saya merayu kepada UTM untuk sambung semula pengajian.Prof Razali telah menjalankan tugas sebagai penasihat akademik dengan sempurna sekali.Pensyarah saya yang memang lagend Dr Usman Ullah yang memang sentiasa berkongsi pendapat setiap semester untuk memastikan saya tamat pengajian.Walaupun mungkin saya engkar arahan dia untuk selesaikan FYP tapi dia adalah supervisor yang terbaik.Dr kamaludin juga sentiasa membantu memberi tunjuk ajar.



                                                        Bersama Pensyarah Ecad (Otai).


Apabila saya berada di atas pentas untuk menerima sekeping kertas,beberapa pekara akan terpikir.Berada di pentas adalah sebab mak dan ayah serta keluarga sentiasa support,pensyarah yang sentiasa memastikan ilmu disampaikan dapat diterima oleh pelajar dan rakan-rakan terdekat yang sentiasa beri semangat.



Terima kasih kepada FKE yang sentiasa memberi peluang untuk menimba ilmu.Insyaallah jika kewangan cukup kita berjumpa lagi FKE.Tidak lupa pada pensyarah SEP POLIMAS (badge 1993-1995) yang mengenalkan apa itu elektrik.

Isnin, 31 Ogos 2015

Free Space Propagation

Perambatan terbuka (Free Space Propagation)
 
Pengenalan
Dalam membuat panggilan talefon menggunakan perkhidmatan mudahalih, kita akan menghadapi beberapa masalah.Antara masalah yang dihadapi adalah "call drop",panggilan congest dan lain-lain. Artikel ini adalah untuk dibincangkan permasalahan yang kita hadapi  dan sebab-sebab terjadinya perkara ini.

Antara-antara sebab utama terjadi masalah ini adalah :-

1. Jarak pemancar dengan talefon mudah alih.
2. Perambatan gelombang antara pemancar dan talefon mudah alih.
3. Handover antara pemancar dengan pemancar.
4. Tinggi pemancar dengan pengguna.
5. Pertindihan Gelombang (Interferance).

Methodology
a. Jarak pemancar dengan talefon mudah alih.



Figure 1 (Referance www.cdt21.com)
       Gambar pada figure 1 menunjukkan antena antara pemancar dan penerima .Penerima antenna merujuk kepada pengguna.Dalam kes ini semakin jauh jarak antara pemancar dan penerima akan menyebabkan "Power Transmit" akan semakin kurang untuk sampai kepada penerima.

   PT = GT + GR + PR - LS

          PT = Power Transmit
          PR = Power Receive
          LS = Loss Space
          GT = Gain Transmit
          GR = Gain Receive

 
 
Reference
2.http://www.cdt21.com/resources/siryo1.asp

Selasa, 7 Julai 2015

Asingment QPSK use GNU RADIO

Simulation of Quadrature
Phase Shift Keying (QPSK) using GNURadio software

By: MEL / MKET 1413 students 2014201501
                                Mohd Hasruzairin Mohd Hashim      Suraya Khalid                             Haslini Awang                 
                                Khiruddin  Zakaria                            Nur Iryani Iylia  Abu Bakar        Saargunawathy Manogaran

Abstract — A simulation of how to deal with issues of receiving modulated digital signals. It is to understand many of the involved issues while transmitting and receiving real signals through channel effects.

I.                   INTRODUCTION


Phase-shift keying (PSK) is a digital modulation scheme that conveys data modulating the phase of a reference signal. Quadrature PSK (QPSK) combined with polarization multiplex quadruples channel capacity over state-of-the-art intensity-modulated systems. This scheme is very attractive because it uses existing fiber plants most efficiently. The synchronous down conversion of an optical signal is critically affected by phase noise of the lasers, and this problem is acknowledged and addressed in many publications on synchronous binary PSK (BPSK) and QPSK optical transmission [1].

The amount of radio frequency spectrum required to transmit QPSK reliably is half that required for BPSK signals, which in turn makes room for more users on the channel. QPSK uses four points on the constellation diagram, equispaced around a circle. With four phases, QPSK can encode two bits per symbol. It is to minimize the BER- twice the rate of BPSK; to double the data rate compared to a BPSK system while maintaining the bandwidth of the signal or to maintain the data rate of BPSK but half the bandwidth needed.


Figure 1: Constellation diagram for QPSK.

II.                  GNURADIO CODE


From figure 2 has show the block diagram for modulation and demodulation in QPSK.





  Figure 2: GNUradio block diagram shows the QPSK simulation.


Modulation:  At the PSK Demodulation is used to separate odd and even bits from the generated information bits. Each of the odd bits (quadrature arm) and even bits (in-phase arm) are converted to NRZ format in a parallel manner. The signal on the in-phase arm is multiplied by cosine component and the signal on the quadrature arm is multiplied by sine component. QPSK modulated signal is obtained by adding the signal from both in-phase and quadrature arm

Multiply Const: Signal is multiplied by a reference frequency generator.

ulaw Encoder :  Audio Encoder is implementing an algorithm that compresses digital audio data according to a given audio file format. The object of the algorithm is to represent the high-fidelity audio signal with minimum number of bits while retaining the quality. This can effectively the bandwidth required for transmission.

Virtual sink: When paired with a Virtual Source block, this is essentially the same as drawing a wire between two blocks. This block can be useful for tidying up a complex flowgraph.

Throttle: Limits the data throughput to the specified sampling rate. This prevents GNURadio from consuming all CPU resources when the flowgraph is not being regulated by external hardware (ie: audio source/sink or USRP source/sink).

Channel Model: This block implements a basic channel model simulator that can be used to help evaluate, design, and test various signals, waveforms, and algorithms.We use this block to set the voltage of an AWGN noise source.

File sink: Outputs raw data values in binary format to the specified file. This file can be read into any programming environment that can read binary files. It can also be played back in GRC using an appropriate File Source block.

Demodulation: For block PSK demodulator is received signal is multiplied by a reference frequency generators. The multiplied output on each arm is integrated over one bit period using an integrator.

Interpolating FIR filter: Filter will eliminate all the noise outside the signal band.

Simple Correlator: Correlator is the match filter. The match filter significantly modifies the temporal structure by gathering the signal energy matched to its template and at the end of each symbol time presenting the result as peak amplitude.

ulaw audio decoder : audio decoder is implementing an algorithm that decompresses digital audio data according to a given audio file coding format.

Audio Sink: Represents the audio output hardware within the GRC flow graph. In the A309 lab, the signal will be played through the speakers unless there is something plugged into the headphone output on the front panel of the computer.







III.             MATLAB CODE




function v = read_complex_binary (filename, count)
%% usage: read_complex_binary (filename, [count])
%%
%% open filename and return the contents as a column vector,
%% treating them as 32 bit complex numbers
%%
m = nargchk (1,2,nargin);
if (m)
usage (m);
end
if (nargin < 2)
count = Inf;
end
f = fopen (filename, 'rb');
if (f < 0)
v = 0;
else
t = fread (f, [2, count], 'float');
fclose (f);
v = t(1,:) + t(2,:)*i;
[r, c] = size (v);
v = reshape (v, c, r);
end



Source code matlab is to convert binary file from GNU radio to hexa. From hexa, the data will plot the graph. Graph is displayed in figure 3.







IV.             RESULTS


            
          Figure 3: Noise 0v                                           Figure 4: Noise 0.5v                                      

         
          Figure 5: Noise 0.10v                                Figure 6: Noise 10v



           Figure 7: Noise 5v



     The result is shown as in constellation diagram. Noise in receivers causes noise that we know of as AWGN. We set the noise power by adjusting the noise voltage value of the channel model. We specify the voltage here instead of power because we need to know the bandwidth of the signal in order to the power properly [3]. Additive White Gaussian Noise (AWGN) environments will show its impact on system performance. While many end-to-end links use advanced error control coding and equalization, attention to the effects of phase noise on encoded system performance allows us to examine some interesting trends. We can see the effects of phase noise on Bit Error Rates (BER), Adjacent Channel Power Ratio (ACPR), Intersymbol Interference (ISI) and other specifications.


V.                DISCUSSION

 

The performance of the of the QPSK

For QPSK systems, the bit error rate (BER) was evaluated in the presence of an additive white gaussian noise (AWGN) channel in the presence of noisy phase reference. Since the QPSK phase shift difference is 90° therefore it has less possibility to estimate the correct signal or bit.

BER = (Number of errors)/(Total number of bits sent)

If the medium between the transmitter and receiver is good and the signal to noise ratio is high, then the bit error rate will be very small. The main reasons for the degradation of a data channel and the corresponding bit error rate, BER is noise and changes to the propagation path (where radio signal paths are used).

Both effects have a random element to them, the noise following a Gaussian probability function Eb/No is the measure of signal to noise ratio for a digital communication system. It is measured at the input to the receiver and is used as the basic measure of how strong the signal is.

It can be seen from using Eb/No, that the bit error rate, BER can be affected by a number of factors.

1.         Interference:   The interference levels present in a system are generally set by external factors and cannot be changed by the system design. However it is possible to set the bandwidth of the system. By reducing the bandwidth the level of interference can be reduced. Reducing the bandwidth limits the data throughput that can be achieved.

2.         Increase transmitter power:   It is also possible to increase the power level of the system so that the power per bit is increased.

3.         Lower order modulation:   Lower order modulation schemes can be used, but this is at the expense of data throughput.

4.         Reduce bandwidth:   Another approach that can be adopted to reduce the bit error rate is to reduce the bandwidth. Lower levels of noise will be received and therefore the signal to noise ratio will improve.

VI.                CONCLUSION


Bit error rate BER is a parameter which gives an excellent indication of the performance of a data link such as radio or fibre optic system. Knowledge of the BER also enables other features of the link such as the power and bandwidth, etc. to be tailored to enable the required performance to be obtained.



     REFERENCES

[1] Reinhold Noé, Member, IEEE, Phase Noise-Tolerant Synchronous QPSK/BPSK Baseband-Type Intradyne Receiver Concept  With Feedforward Carrier Recovery, JOURNAL OF LIGHTWAVE  TECHNOLOGY, VOL. 23, NO. 2, FEBRUARY 2005.


APPENDIX

Source Code QPSK modulation and demodulation from GNU Radio

#!/usr/bin/env python
##################################################
# Gnuradio Python Flow Graph
# Title: Bpsk
# Generated: Fri Jun 12 22:04:46 2015
##################################################
from PyQt4 import Qt
from PyQt4.QtCore import QObject, pyqtSlot
from gnuradio import audio
from gnuradio import blocks
from gnuradio import channels
from gnuradio import digital
from gnuradio import eng_notation
from gnuradio import filter
from gnuradio import gr
from gnuradio import qtgui
from gnuradio import vocoder
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser
import PyQt4.Qwt5 as Qwt
import sip
import sys
from distutils.version import StrictVersion
class BPSK(gr.top_block, Qt.QWidget):
            def __init__(self):
            gr.top_block.__init__(self, "Bpsk")
            Qt.QWidget.__init__(self)
            self.setWindowTitle("Bpsk")
            try:
            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
            except:
            pass
            self.top_scroll_layout = Qt.QVBoxLayout()
            self.setLayout(self.top_scroll_layout)
            self.top_scroll = Qt.QScrollArea()
            self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
            self.top_scroll_layout.addWidget(self.top_scroll)
            self.top_scroll.setWidgetResizable(True)
            self.top_widget = Qt.QWidget()
            self.top_scroll.setWidget(self.top_widget)
            self.top_layout = Qt.QVBoxLayout(self.top_widget)
            self.top_grid_layout = Qt.QGridLayout()
            self.top_layout.addLayout(self.top_grid_layout)
            self.settings = Qt.QSettings("GNU Radio", "BPSK")
            self.restoreGeometry(self.settings.value("geometry").toByteArray())

            ##################################################
            # Variables
            ##################################################
            self.samp_rate = samp_rate = 256e3
            self.gain = gain = 0.63
            ##################################################
            # Blocks
            ##################################################
            self._gain_layout = Qt.QVBoxLayout()
            self._gain_tool_bar = Qt.QToolBar(self)
            self._gain_layout.addWidget(self._gain_tool_bar)
            self._gain_tool_bar.addWidget(Qt.QLabel("Normalization Factor"+": "))
            class qwt_counter_pyslot(Qwt.QwtCounter):
            def __init__(self, parent=None):
                        Qwt.QwtCounter.__init__(self, parent)
            @pyqtSlot('double')
            def setValue(self, value):
                        super(Qwt.QwtCounter, self).setValue(value)
            self._gain_counter = qwt_counter_pyslot()
            self._gain_counter.setRange(0, 1, 1/1000)
            self._gain_counter.setNumButtons(2)
            self._gain_counter.setValue(self.gain)
            self._gain_tool_bar.addWidget(self._gain_counter)
            self._gain_counter.valueChanged.connect(self.set_gain)
            self._gain_slider = Qwt.QwtSlider(None, Qt.Qt.Horizontal, Qwt.QwtSlider.BottomScale, Qwt.QwtSlider.BgSlot)
            self._gain_slider.setRange(0, 1, 1/1000)
            self._gain_slider.setValue(self.gain)
            self._gain_slider.setMinimumWidth(200)
            self._gain_slider.valueChanged.connect(self.set_gain)
            self._gain_layout.addWidget(self._gain_slider)
            self.top_layout.addLayout(self._gain_layout)
            self.vocoder_ulaw_encode_sb_0 = vocoder.ulaw_encode_sb()
            self.vocoder_ulaw_decode_bs_1 = vocoder.ulaw_decode_bs()
            self.qtgui_time_sink_x_2 = qtgui.time_sink_c(
             100, #size
             samp_rate, #samp_rate
             "", #name
             1 #number of inputs
            )
            self.qtgui_time_sink_x_2.set_update_time(0.10)
            self.qtgui_time_sink_x_2.set_y_axis(-1, 1)
           
            self.qtgui_time_sink_x_2.set_y_label("Amplitude (Rx)", "")
           
            self.qtgui_time_sink_x_2.enable_tags(-1, True)
            self.qtgui_time_sink_x_2.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "")
            self.qtgui_time_sink_x_2.enable_autoscale(False)
            self.qtgui_time_sink_x_2.enable_grid(False)
           
            labels = ["", "", "", "", "",
                        "", "", "", "", ""]
            widths = [1, 1, 1, 1, 1,
                        1, 1, 1, 1, 1]
            colors = ["blue", "red", "green", "black", "cyan",
                        "magenta", "yellow", "dark red", "dark green", "blue"]
            styles = [1, 1, 1, 1, 1,
                        1, 1, 1, 1, 1]
            markers = [-1, -1, -1, -1, -1,
                        -1, -1, -1, -1, -1]
            alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                        1.0, 1.0, 1.0, 1.0, 1.0]
           
            for i in xrange(2*1):
            if len(labels[i]) == 0:
                        if(i % 2 == 0):
                        self.qtgui_time_sink_x_2.set_line_label(i, "Re{{Data {0}}}".format(i/2))
                        else:
                        self.qtgui_time_sink_x_2.set_line_label(i, "Im{{Data {0}}}".format(i/2))
            else:
                        self.qtgui_time_sink_x_2.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_2.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_2.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_2.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_2.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_2.set_line_alpha(i, alphas[i])
           
            self._qtgui_time_sink_x_2_win = sip.wrapinstance(self.qtgui_time_sink_x_2.pyqwidget(), Qt.QWidget)
            self.top_grid_layout.addWidget(self._qtgui_time_sink_x_2_win, 10,0,1,1)
            self.qtgui_time_sink_x_1 = qtgui.time_sink_c(
             100, #size
             samp_rate, #samp_rate
             "", #name
             1 #number of inputs
            )
            self.qtgui_time_sink_x_1.set_update_time(0.10)
            self.qtgui_time_sink_x_1.set_y_axis(-1, 1)
           
            self.qtgui_time_sink_x_1.set_y_label("Amplitude (Tx)", "")
           
            self.qtgui_time_sink_x_1.enable_tags(-1, True)
            self.qtgui_time_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "")
            self.qtgui_time_sink_x_1.enable_autoscale(False)
            self.qtgui_time_sink_x_1.enable_grid(False)
           
            labels = ["", "", "", "", "",
                        "", "", "", "", ""]
            widths = [1, 1, 1, 1, 1,
                        1, 1, 1, 1, 1]
            colors = ["blue", "red", "green", "black", "cyan",
                        "magenta", "yellow", "dark red", "dark green", "blue"]
            styles = [1, 1, 1, 1, 1,
                        1, 1, 1, 1, 1]
            markers = [-1, -1, -1, -1, -1,
                        -1, -1, -1, -1, -1]
            alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                        1.0, 1.0, 1.0, 1.0, 1.0]
           
            for i in xrange(2*1):
            if len(labels[i]) == 0:
                        if(i % 2 == 0):
                        self.qtgui_time_sink_x_1.set_line_label(i, "Re{{Data {0}}}".format(i/2))
                        else:
                        self.qtgui_time_sink_x_1.set_line_label(i, "Im{{Data {0}}}".format(i/2))
            else:
                        self.qtgui_time_sink_x_1.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1.set_line_alpha(i, alphas[i])
           
            self._qtgui_time_sink_x_1_win = sip.wrapinstance(self.qtgui_time_sink_x_1.pyqwidget(), Qt.QWidget)
            self.top_grid_layout.addWidget(self._qtgui_time_sink_x_1_win, 0,0,1,1)
            self.qtgui_freq_sink_x_2 = qtgui.freq_sink_c(
             1024, #size
             firdes.WIN_BLACKMAN_hARRIS, #wintype
             0, #fc
             samp_rate, #bw
             "", #name
             1 #number of inputs
            )
            self.qtgui_freq_sink_x_2.set_update_time(0.10)
            self.qtgui_freq_sink_x_2.set_y_axis(-140, 10)
            self.qtgui_freq_sink_x_2.enable_autoscale(False)
            self.qtgui_freq_sink_x_2.enable_grid(False)
            self.qtgui_freq_sink_x_2.set_fft_average(1.0)
           
            labels = ["", "", "", "", "",
                        "", "", "", "", ""]
            widths = [1, 1, 1, 1, 1,
                        1, 1, 1, 1, 1]
            colors = ["blue", "red", "green", "black", "cyan",
                        "magenta", "yellow", "dark red", "dark green", "dark blue"]
            alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                        1.0, 1.0, 1.0, 1.0, 1.0]
            for i in xrange(1):
            if len(labels[i]) == 0:
                        self.qtgui_freq_sink_x_2.set_line_label(i, "Data {0}".format(i))
            else:
                        self.qtgui_freq_sink_x_2.set_line_label(i, labels[i])
            self.qtgui_freq_sink_x_2.set_line_width(i, widths[i])
            self.qtgui_freq_sink_x_2.set_line_color(i, colors[i])
            self.qtgui_freq_sink_x_2.set_line_alpha(i, alphas[i])
           
            self._qtgui_freq_sink_x_2_win = sip.wrapinstance(self.qtgui_freq_sink_x_2.pyqwidget(), Qt.QWidget)
            self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_2_win, 10,1,2,1)
            self.qtgui_freq_sink_x_1 = qtgui.freq_sink_c(
             1024, #size
             firdes.WIN_BLACKMAN_hARRIS, #wintype
             0, #fc
             samp_rate, #bw
             "", #name
             1 #number of inputs
            )
            self.qtgui_freq_sink_x_1.set_update_time(0.10)
            self.qtgui_freq_sink_x_1.set_y_axis(-140, 10)
            self.qtgui_freq_sink_x_1.enable_autoscale(False)
            self.qtgui_freq_sink_x_1.enable_grid(False)
            self.qtgui_freq_sink_x_1.set_fft_average(1.0)
           
            labels = ["", "", "", "", "",
                        "", "", "", "", ""]
            widths = [1, 1, 1, 1, 1,
                        1, 1, 1, 1, 1]
            colors = ["blue", "red", "green", "black", "cyan",
                        "magenta", "yellow", "dark red", "dark green", "dark blue"]
            alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                        1.0, 1.0, 1.0, 1.0, 1.0]
            for i in xrange(1):
            if len(labels[i]) == 0:
                        self.qtgui_freq_sink_x_1.set_line_label(i, "Data {0}".format(i))
            else:
                        self.qtgui_freq_sink_x_1.set_line_label(i, labels[i])
            self.qtgui_freq_sink_x_1.set_line_width(i, widths[i])
            self.qtgui_freq_sink_x_1.set_line_color(i, colors[i])
            self.qtgui_freq_sink_x_1.set_line_alpha(i, alphas[i])
           
            self._qtgui_freq_sink_x_1_win = sip.wrapinstance(self.qtgui_freq_sink_x_1.pyqwidget(), Qt.QWidget)
            self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_1_win, 0,1,2,1)
            self.qtgui_const_sink_x_2 = qtgui.const_sink_c(
             1024, #size
             "", #name
             1 #number of inputs
            )
            self.qtgui_const_sink_x_2.set_update_time(0.10)
            self.qtgui_const_sink_x_2.set_y_axis(-2, 2)
            self.qtgui_const_sink_x_2.set_x_axis(-2, 2)
            self.qtgui_const_sink_x_2.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "")
            self.qtgui_const_sink_x_2.enable_autoscale(False)
            self.qtgui_const_sink_x_2.enable_grid(False)
           
            labels = ["", "", "", "", "",
                        "", "", "", "", ""]
            widths = [1, 1, 1, 1, 1,
                        1, 1, 1, 1, 1]
            colors = ["blue", "red", "red", "red", "red",
                        "red", "red", "red", "red", "red"]
            styles = [0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0]
            markers = [0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0]
            alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                        1.0, 1.0, 1.0, 1.0, 1.0]
            for i in xrange(1):
            if len(labels[i]) == 0:
                        self.qtgui_const_sink_x_2.set_line_label(i, "Data {0}".format(i))
            else:
                        self.qtgui_const_sink_x_2.set_line_label(i, labels[i])
            self.qtgui_const_sink_x_2.set_line_width(i, widths[i])
            self.qtgui_const_sink_x_2.set_line_color(i, colors[i])
            self.qtgui_const_sink_x_2.set_line_style(i, styles[i])
            self.qtgui_const_sink_x_2.set_line_marker(i, markers[i])
            self.qtgui_const_sink_x_2.set_line_alpha(i, alphas[i])
           
            self._qtgui_const_sink_x_2_win = sip.wrapinstance(self.qtgui_const_sink_x_2.pyqwidget(), Qt.QWidget)
            self.top_grid_layout.addWidget(self._qtgui_const_sink_x_2_win, 15,0,1,1)
            self.qtgui_const_sink_x_1 = qtgui.const_sink_c(
             1024, #size
             "", #name
             1 #number of inputs
            )
            self.qtgui_const_sink_x_1.set_update_time(0.10)
            self.qtgui_const_sink_x_1.set_y_axis(-2, 2)
            self.qtgui_const_sink_x_1.set_x_axis(-2, 2)
            self.qtgui_const_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "")
            self.qtgui_const_sink_x_1.enable_autoscale(False)
            self.qtgui_const_sink_x_1.enable_grid(False)
           
            labels = ["", "", "", "", "",
                        "", "", "", "", ""]
            widths = [1, 1, 1, 1, 1,
                        1, 1, 1, 1, 1]
            colors = ["blue", "red", "red", "red", "red",
                        "red", "red", "red", "red", "red"]
            styles = [0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0]
            markers = [0, 0, 0, 0, 0,
                        0, 0, 0, 0, 0]
            alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
                        1.0, 1.0, 1.0, 1.0, 1.0]
            for i in xrange(1):
            if len(labels[i]) == 0:
                        self.qtgui_const_sink_x_1.set_line_label(i, "Data {0}".format(i))
            else:
                        self.qtgui_const_sink_x_1.set_line_label(i, labels[i])
            self.qtgui_const_sink_x_1.set_line_width(i, widths[i])
            self.qtgui_const_sink_x_1.set_line_color(i, colors[i])
            self.qtgui_const_sink_x_1.set_line_style(i, styles[i])
            self.qtgui_const_sink_x_1.set_line_marker(i, markers[i])
            self.qtgui_const_sink_x_1.set_line_alpha(i, alphas[i])
           
            self._qtgui_const_sink_x_1_win = sip.wrapinstance(self.qtgui_const_sink_x_1.pyqwidget(), Qt.QWidget)
            self.top_grid_layout.addWidget(self._qtgui_const_sink_x_1_win, 1,0,1,1)
            self.interp_fir_filter_xxx_1 = filter.interp_fir_filter_fff(8, (filter.firdes.root_raised_cosine(8,8,1.0,0.5,21)))
            self.interp_fir_filter_xxx_1.declare_sample_delay(0)
            self.digital_simple_framer_0 = digital.simple_framer(20)
            self.digital_simple_correlator_1 = digital.simple_correlator(20)
            self.channels_channel_model_0 = channels.channel_model(
             noise_voltage=0.10,
             frequency_offset=0.0,
             epsilon=1.0,
             taps=(1.0 + 1.0j, ),
             noise_seed=0,
             block_tags=False
            )
            self.bpsk_mod = digital.psk.psk_mod(
            constellation_points=2,
            mod_code="gray",
            differential=False,
            samples_per_symbol=2,
            excess_bw=0.35,
            verbose=False,
            log=False,
            )
            self.bpsk_demod = digital.psk.psk_demod(
            constellation_points=2,
            differential=False,
            samples_per_symbol=2,
            excess_bw=1,
            phase_bw=6.28/100.0,
            timing_bw=6.28/100.0,
            mod_code="gray",
            verbose=False,
            log=False,
            )
            self.blocks_wavfile_source_0 = blocks.wavfile_source("/media/ubuntu/SANDISK/BPSK/PCM_Mono 16-bit  8kHz.wav", True)
            self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True)
            self.blocks_short_to_float_1 = blocks.short_to_float(1, 1)
            self.blocks_multiply_const_vxx_4 = blocks.multiply_const_vff((1.0/32768.0, ))
            self.blocks_multiply_const_vxx_3 = blocks.multiply_const_vff((2, ))
            self.blocks_multiply_const_vxx_2 = blocks.multiply_const_vcc((gain, ))
            self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((32768, ))
            self.blocks_float_to_short_0 = blocks.float_to_short(1, 1)
            self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, "/media/ubuntu/SANDISK/BPSK/noise0.10", False)
            self.blocks_file_sink_0.set_unbuffered(False)
            self.blocks_char_to_float_1 = blocks.char_to_float(1, 1)
            self.blocks_add_const_vxx_1 = blocks.add_const_vff((-1, ))
            self.audio_sink_1 = audio.sink(8000, "", True)
            ##################################################
            # Connections
            ##################################################
            self.connect((self.blocks_float_to_short_0, 0), (self.vocoder_ulaw_encode_sb_0, 0))
            self.connect((self.vocoder_ulaw_encode_sb_0, 0), (self.digital_simple_framer_0, 0))
            self.connect((self.digital_simple_correlator_1, 0), (self.vocoder_ulaw_decode_bs_1, 0))
            self.connect((self.interp_fir_filter_xxx_1, 0), (self.digital_simple_correlator_1, 0))
            self.connect((self.vocoder_ulaw_decode_bs_1, 0), (self.blocks_short_to_float_1, 0))
            self.connect((self.blocks_add_const_vxx_1, 0), (self.interp_fir_filter_xxx_1, 0))
            self.connect((self.blocks_multiply_const_vxx_3, 0), (self.blocks_add_const_vxx_1, 0))
            self.connect((self.blocks_short_to_float_1, 0), (self.blocks_multiply_const_vxx_4, 0))
            self.connect((self.blocks_multiply_const_vxx_4, 0), (self.audio_sink_1, 0))
            self.connect((self.bpsk_demod, 0), (self.blocks_char_to_float_1, 0))
            self.connect((self.digital_simple_framer_0, 0), (self.bpsk_mod, 0))
            self.connect((self.bpsk_mod, 0), (self.blocks_multiply_const_vxx_2, 0))
            self.connect((self.blocks_wavfile_source_0, 0), (self.blocks_multiply_const_vxx_0, 0))
            self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_float_to_short_0, 0))
            self.connect((self.blocks_multiply_const_vxx_2, 0), (self.qtgui_const_sink_x_1, 0))
            self.connect((self.blocks_multiply_const_vxx_2, 0), (self.qtgui_freq_sink_x_1, 0))
            self.connect((self.blocks_char_to_float_1, 0), (self.blocks_multiply_const_vxx_3, 0))
            self.connect((self.blocks_multiply_const_vxx_2, 0), (self.qtgui_time_sink_x_1, 0))
            self.connect((self.channels_channel_model_0, 0), (self.bpsk_demod, 0))
            self.connect((self.channels_channel_model_0, 0), (self.qtgui_time_sink_x_2, 0))
            self.connect((self.channels_channel_model_0, 0), (self.qtgui_const_sink_x_2, 0))
            self.connect((self.channels_channel_model_0, 0), (self.qtgui_freq_sink_x_2, 0))
            self.connect((self.blocks_throttle_0, 0), (self.channels_channel_model_0, 0))
            self.connect((self.blocks_multiply_const_vxx_2, 0), (self.blocks_throttle_0, 0))
            self.connect((self.channels_channel_model_0, 0), (self.blocks_file_sink_0, 0))

            def closeEvent(self, event):
            self.settings = Qt.QSettings("GNU Radio", "BPSK")
            self.settings.setValue("geometry", self.saveGeometry())
            event.accept()
            def get_samp_rate(self):
            return self.samp_rate
            def set_samp_rate(self, samp_rate):
            self.samp_rate = samp_rate
            self.qtgui_time_sink_x_1.set_samp_rate(self.samp_rate)
            self.blocks_throttle_0.set_sample_rate(self.samp_rate)
            self.qtgui_time_sink_x_2.set_samp_rate(self.samp_rate)
            self.qtgui_freq_sink_x_2.set_frequency_range(0, self.samp_rate)
            self.qtgui_freq_sink_x_1.set_frequency_range(0, self.samp_rate)
            def get_gain(self):
            return self.gain
            def set_gain(self, gain):
            self.gain = gain
            Qt.QMetaObject.invokeMethod(self._gain_counter, "setValue", Qt.Q_ARG("double", self.gain))
            Qt.QMetaObject.invokeMethod(self._gain_slider, "setValue", Qt.Q_ARG("double", self.gain))
            self.blocks_multiply_const_vxx_2.set_k((self.gain, ))
if __name__ == '__main__':
            import ctypes
            import sys
            if sys.platform.startswith('linux'):
            try:
            x11 = ctypes.cdll.LoadLibrary('libX11.so')
            x11.XInitThreads()
            except:
            print "Warning: failed to XInitThreads()"
            parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
            (options, args) = parser.parse_args()
            if(StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0")):
            Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
            qapp = Qt.QApplication(sys.argv)
            tb = BPSK()
            tb.start()
            tb.show()
            def quitting():
            tb.stop()
            tb.wait()
            qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
            qapp.exec_()
            tb = None #to clean up Qt widgets