== Zynq-based WISER platform - Spectrum Sensing == [[TOC(Tutorials/k0SDR*)]] === Description === This tutorial demos capturing spectrum data using the Zynq-based WISER platform on ORBIT. === Hardware / Software Resources utilized === 1. An SB6 node with WISER platform connected to it. 2. ''wiser_sb6_zedboard.ndz'': disk image. 3. ''wiserd'' application - [http://wiser.orbit-lab.org/wiki/wiser Check here for more info]. === Set up === * Follow the [wiki:Tutorials/k0SDR/Tutorial13 start-up instructions] to set up the load the node image and FPGA images. * After the set-up is complete, ssh into node1-1 and build the wiserd application {{{ root@node1-1:~# cd wiserd root@node1-1:~/wiserd# make clean root@node1-1:~/wiserd# make g++ -Wall -g -O -std=gnu++0x -c -o channel_status.o channel_status.cpp g++ -Wall -g -O -std=gnu++0x -c -o consumer_moving_average.o consumer_moving_average.cpp g++ -Wall -g -O -std=gnu++0x -c -o fft_movavg_dc.o fft_movavg_dc.cpp g++ -Wall -g -O -std=gnu++0x -c -o fft_movavg_oml.o fft_movavg_oml.cpp g++ -Wall -g -O -std=gnu++0x -c -o fft_movavg_udp.o fft_movavg_udp.cpp g++ -Wall -g -O -std=gnu++0x -c -o fft_pow_udp.o fft_pow_udp.cpp g++ -Wall -g -O -std=gnu++0x -c -o fft_sigpower_oml.o fft_sigpower_oml.cpp g++ -Wall -g -O -std=gnu++0x -c -o main.o main.cpp g++ -Wall -g -O -std=gnu++0x -c -o radio.o radio.cpp g++ -Wall -g -O -std=gnu++0x -c -o recv_consumer_factory.o recv_consumer_factory.cpp g++ -Wall -g -O -std=gnu++0x -c -o recv.o recv.cpp g++ -Wall -g -O -std=gnu++0x -c -o signal_from_file.o signal_from_file.cpp g++ -Wall -g -O -std=gnu++0x -c -o time_samples_to_file.o time_samples_to_file.cpp g++ -Wall -g -O -std=gnu++0x -c -o tran_consumer_factory.o tran_consumer_factory.cpp g++ -Wall -g -O -std=gnu++0x -c -o tran.o tran.cpp g++ -Wall -g -O -std=gnu++0x -c -o usrp.o usrp.cpp g++ -Wall -g -O -std=gnu++0x -c -o waveform.o waveform.cpp g++ -Wall -g -O -std=gnu++0x -c -o zynq.o zynq.cpp g++ -L/usr/local/lib channel_status.o consumer_moving_average.o fft_movavg_dc.o fft_movavg_oml.o fft_movavg_udp.o fft_pow_udp.o fft_sigpower_oml.o main.o radio.o recv_consumer_factory.o recv.o signal_from_file.o time_samples_to_file.o tran_consumer_factory.o tran.o usrp.o waveform.o zynq.o -o wiserd -lboost_system -lboost_random -lboost_thread -lboost_program_options -lboost_iostreams -lpthread -llog4cxx -luhd -loml2 -locomm -lfftw3f -lreadline }}} === Start spectrum sensing === * Run the wiserd application with the following arguments. {{{ root@node1-1:~/wiserd# ./wiserd --radio zynq --zynq_rx_freq 820e6 --zynq_rx_gain 10 --zynq_fft_bins 256 --zynq_fft_scaling 170 --zynq_avg_window 256 linux; GNU C++ version 4.8.2; Boost_105400; UHD_003.008.002-86-g566dbc2b Zynq constructed zynq_fft_bins 8 zynq_fft_scaling 170 zynq_rx_freq 820000000 zynq_rx_gain 10 Ready! Zynq thread started > }}} * The Zynq parameters passed to the FPGA to configures the RF hardware and FFT engine \\ a) '--zynq_rx_freq 820e6' => sets Rx center frequency. Range of values: [400M 4000M] \\ b) '--zynq_rx_gain 10' => sets Rx amplifier gain. Range of values: [5.0 20.0] \\ c) '--zynq_fft_bins 256' => sets FFT size. Range of values must be power of 2: [8 256] \\ d) '--zynq_fft_scaling 170' => sets FFT stage scaling. \\ e) '--zynq_avg_window 256' => sets time averaging across bins. Range of values: [1 256] \\ Note: the sampling rate not configurable and fixed at 30Msps. * From wiserd enable FFT engine and start streaming frequency bins from the FPGA to host {{{ > --fft_engine 1 }}} * The FFT bin data is collected in binary file name ''zynq_rx_fft.bin'' * From wiserd disable FFT engine and stop streaming data to host {{{ > --fft_engine 0 }}} * To view a water fall image collected rx spectrum data, run the fPlot script in octave. A sample image is shown below with a tone at 10MHz generated from a USRP. \\ || [[Image(zynq_rx_fft_1500_10MHz.png, width=500px)]] ||