Spectrum sensing with USRP2 and wiserd (OEDL and OML)
Table of Contents
- SDR Tutorials
Description
We'll use the nodes on sandbox 3 to transmit a predefined waveform and receive the spectrum data into an OML file.
Hardware / Software Resources utilized
- Grid nodes with a USRP2 connect via Ethernet.
- baseline-sdr.ndz: disk image loaded onto nodes.
- Wiserd - interface to configure and stream data to/from USRPs.
Transmit predefined tone
To get started load baseline-sdr.ndz onto node1-1 and node1-2. Then turn both nodes on.
Set up node1-1 to configure transmit a predefined sine wave
node1-1> wiserd > --uhd_tx_freq 700e6 --uhd_tx_rate 5e6 --uhd_tx_gain 20 > --tran_wavetype SINE --tran_wavefreq 1e6 --tran_amplitude 0.5 > --addmodule waveform
At this point the node1-1 should be transmitting a tone at 1MHz from the 700MHz center frequency. From node1-2, use the UHD spectrum utility to verify the waveform
node1-2> cd uhd/host/build/examples/ node1-2> ./rx_ascii_art_dft --freq 700e6 --rate 5e6 --gain 20 --ref-lvl -40
Record spectrum data to an OML file
Now let's use wiserd to record this spectrum data into a local
node1-2> wiserd > --uhd_rx_freq 700e6 --uhd_rx_rate 5e6 --uhd_rx_gain 20 --recv_running_time 2000 > --recv_numbins 256 --recv_avgwinlen 5 --recv_oml_servername file --recv_oml_output_type vector > --addmodule fftmovingavgoml --timed
Wiserd should record spectrum data to file for 2000ms and then stop recording.
The recorded file can ve very large so a short snippet is shown below
protocol: 5 domain: spectrum start-time: 1432751617 sender-id: app-name: spectrum schema: 0 _experiment_metadata subject:string key:string value:string schema: 1 _client_instrumentation measurements_injected:uint32 measurements_dropped:uint32 bytes_allocated:uint64 bytes_freed:uint64 bytes_in_use:uint64 bytes_max:uint64 schema: 2 spectrum_data sampling:int32 cfreq_MHz:double gain_dB:int32 FFTLength:int32 FFTNum:string FFTBins:[double] content: text 0.805870 2 1 5000000 700000000.000000 20 256 --- 256 0.00642503052949905 0.00640759989619255 0.00715913623571396 0.00693625304847956 0.00609686318784952 0.00611346587538719 0.00733797857537866 0.00742206443101168 0.00644569378346205 0.00748523231595755 0.00655230600386858 0.006748684681952 0.00692673865705729 0.00592925120145082 0.00748975854367018 0.00621710997074842 0.00608090776950121 0.0055550062097609 0.0057487809099257 0.00720828492194414 0.00618668925017118 0.00473179295659065 0.006808090955019 0.00687119970098138 0.005494792945683 0.00755641097202897 0.0063415477052331 0.00596773438155651 0.00671912264078856 0.00726061593741179 0.00553654972463846 0.00698605040088296 0.00529543263837695 0.00783630926162004 0.00672802329063416 0.00635359063744545 0.00666496902704239 0.00626690546050668 0.00589855946600437 0.00733701791614294 0.00885633658617735 0.00691640749573708 0.00642102723941207 0.00926791410893202 0.00719658425077796 0.00593259138986468 0.00634927907958627 0.00793861877173185 0.0070486469194293 0.008316645398736 0.00513946730643511 0.00822983402758837 0.00626416876912117 0.00688301119953394 0.00707513466477394 0.0092685641720891 0.00870540831238031 0.00925131514668465 0.0262136552482843 0.00431728875264525 0.00578053155913949 0.0068720756098628 0.00764161115512252 0.00618286710232496 0.00673849601298571 0.006247628480196 0.00722268223762512 0.00629418436437845 0.00773267960175872 0.0074175582267344 0.00646864250302315 0.00801937561482191 0.00764140486717224 0.00779543584212661 0.0079394802451133^@ 0.00697977934032679 0.00779644120484591 0.00789852533489466 0.00959375221282244 0.00706543261185288 0.00814522616565228 0.00915447436273098 0.00844117812812328 0.00785306375473738 0.00716404151171446 0.00879248790442944 0.0101312343031168 0.00902777351438999 0.00988549832254648 0.00871223211288452 0.00874703098088503 0.0101676043123007 0.0103123057633638 0.00945603661239147 0.0100027937442064 0.0096791498363018 0.00998857151716948 0.0117274457588792 0.0101575655862689 0.0124989086762071 0.01237382367253^@ 0.0133225293830037 0.0146061507984996 0.0208994746208191 0.0468954369425774 0.122245348989964 0.0262875147163868 0.0151699390262365 0.0129134533926845 0.0126580595970154 0.0127546470612288 0.0141236884519458 0.0128746386617422 0.0113462153822184 0.0139725683256984 0.0149048119783401 0.012725941836834 0.0142481597140431 0.014576974324882 0.0165196731686592 0.0166050866246223 0.0181233920156956 0.0182002373039722 0.0205240771174431 0.0182637479156256 0.0225130878388882 0.0199225898832083 0.022662311792373^@ 0.0272368285804987 0.0229660626500845 0.0206097178161144 0.0252554770559072 0.0277251955121756 0.027890432626009 0.03005550801754 0.0291061010211706 0.0328644625842571 0.0377240218222141 0.0371225923299789 0.0430551692843437 0.0448992624878883 0.0500019602477551 0.055297739803791 0.0620570369064808 0.0687699541449547 0.0800459012389183 0.096101202070713 0.119709715247154 0.151971653103828 0.222265601158142 0.395731300115585 1.8209445476532 0.701657652854919 0.293412864208221 0.186001688241959 0.135782465338707 0.107891581952572 0.0872630029916763 0.0756658166646957 0.0643373876810074 0.0577538087964058 0.053208451718092 0.0474477596580982 0.043580025434494 0.0416424460709095 0.0350464805960655 0.034961711615324 0.0329569280147552 0.0307744555175304 0.0304238144308329 0.0277519728988409 0.026080325245857^@ 0.0244618654251099 0.0233206581324339 0.023502279073 0.0213998667895794 0.0197461675852537 0.0213919542729855 0.0210770349949598 0.0178680755198002 0.0188288316130638 0.0168855395168066 0.0173622630536556 0.0162709001451731 0.0161915346980095 0.01674560084939 0.0157821383327246 0.0147516150027514 0.0129792336374521 0.01588449254632 0.0135742779821157 0.0144895184785128 0.0126562193036079 0.0140249133110046 0.0127318147569895 0.0125512164086103 0.0115098562091589 0.0102976094931364 0.0142459943890572 0.0123602850362659 0.0110908718779683 0.0117047075182199 0.0108433095738292 0.0113961454480886 0.00989516265690327 0.0109618585556746 0.00892620161175728 0.0101382881402969 0.00846627354621887 0.0101864114403725 0.00957665219902992 0.00926020089536905 0.00821538269519806 0.00760462647303939 0.010831995867192^@ 0.00874793529510498 0.00983591936528683 0.0086268512532115 0.00901609845459461 0.00873745605349541 0.00801646523177624 0.00832579005509615 0.00826011598110199 0.00759589159861207 0.00800738204270601 0.00827436801046133 0.00850967969745398 0.00803695525974035 0.00859370641410351 0.00757377874106169 0.00678808754310012 0.00810458604246378 0.00828907825052738 0.0073024220764637 0.00828505866229534 0.00829954538494349 0.00789687223732471 0.00625459849834442 0.00735813518986106 0.00677822157740593 0.00603437423706055 0.00656507024541497 0.00717219989746809 0.00768232485279441 0.00599283492192626 0.00739502254873514 0.00717072654515505 0.00757684791460633 0.00703901331871748 0.00658791046589613 0.00659507792443037 0.00577279180288315 0.00665358593687415 0.00633173156529665 0.00557167362421751 0.00851421989500523 0.806104 2 2 5000000 700000000.000000 20 256 --- 256 0.00689565530046821 0.00628861784934998 0.00648185843601823 0.00669795507565141 0.00584999099373817 0.00637592282146215 0.00665496429428458 0.00677516451105475 0.00625768397003412 0.00584975723177195 0.0060897353105247 0.00563886109739542 0.00706819351762533 0.00657628104090691 0.00634182989597321 0.00633346568793058 0.0062954961322248 0.00681345677003264 0.00627884548157454 0.00565372034907341 0.00675516203045845 0.00734227616339922 0.00573072256520391 0.0063943974673748 0.00608528079465032 0.00676710763946176 0.00617225747555494 0.00553606916218996 0.00660644983872771 0.0063962722197175 0.00743097579106688 0.00628956127911806 0.00731373578310013 0.00724115874618292 0.00646150950342417 0.0066513828933239 0.00803750939667225 0.00523182982578874 0.00641514360904694 0.00818850565701723 0.00636473763734102 0.00712296459823847 0.00614004954695702 0.00618369597941637 0.00591028016060591 0.00637322664260864 0.00655190274119377 0.00639662798494101 0.00541317230090499 0.00741449510678649 0.00761738698929548 0.0070836590602994 0.00605544168502092 0.00635870546102524 0.00694706430658698 0.00656211003661156 0.00666100438684225 0.00627775583416224 0.0116550819948316 0.0100514981895685 0.00824615824967623 0.00756618101149797 0.0078535033389926 0.0101745296269655 0.00904152821749449 0.00695109087973833 0.00740401213988662 0.00704846531152725 0.0077576725743711 0.0071131675504148 0.00850622821599245 0.00610636034980416 0.00661058444529772 0.00847268849611282 0.007558090146631 0.00893115531653166 0.00833071861416101 0.00715811923146248 0.00823779869824648 0.0089316014200449 0.00595288490876555 0.00747732911258936 0.00831372570246458 0.00861002039164305 0.00799854192882776 0.00973799638450146 0.00850083213299513 0.00773866334930062 0.00879448000341654 0.00807567313313484 0.0105824302881956 0.00920506287366152 0.00788669660687447 0.00895833969116211 0.0112238116562366 0.0100678941234946 0.0103527856990695 0.0104455724358559 0.012177424505353 0.0112529918551445 0.0102290874347091 0.0135061638429761 0.0147446822375059 0.018596475943923 0.0414362847805023 0.114830479025841 0.025530856102705 0.0190154518932104 0.0155481668189168 0.0143186058849096 0.0138343144208193 0.014024967327714 0.0143188638612628 0.0134244654327631 0.0132367964833975 0.0148129807785153 0.0141275357455015 0.0152805019170046 0.0149390399456024 0.0163573995232582 0.0169974658638239 0.0169846024364233 0.0175251290202141 0.0187166798859835 0.0194499474018812 0.0228170566260815 0.0220983885228634 0.0203606244176626 0.0218033343553543 0.0210654400289059 0.0256397034972906 0.0221499484032393 0.0251883305609226 0.0291288048028946 0.0301742143929005 0.0299053974449635 0.031312745064497 0.0336895957589149 0.0370108000934124 0.0393577739596367 0.0433414280414581 0.0476785935461521 0.0539706349372864 0.0592275373637676 0.0678910464048386 0.0782939940690994 0.0912498533725739 0.113576114177704 0.150473922491074 0.212990492582321 0.384159237146378 1.74912762641907 0.685468077659607 0.285425901412964 0.179363623261452 0.131207302212715 0.104474768042564 0.0858906656503677 0.074637807905674 0.0646835714578629 0.0561635978519917 0.050263948738575 0.0462885685265064 0.0413284674286842 0.0397013314068317 0.0344642288982868 0.0322929508984089 0.0317045971751213 0.0295128636062145 0.0287306308746338 0.0286615248769522 0.023568470031023 0.0228897500783205 0.0226257108151913 0.0222484599798918 0.022429320961237 0.0206066872924566 0.0198463629931211 0.020149877294898 0.017288027331233 0.0161423590034246 0.0164039433002472 0.0163881666958332 0.0164083652198315 0.0157671608030796 0.0150078013539314 0.0146695794537663 0.0149738965556026 0.0142870601266623 0.0128184454515576 0.0130452159792185 0.0135776726529002 0.0117092151194811 0.0125469844788313 0.0118800457566977 0.0131193473935127 0.0124220326542854 0.0114703755825758 0.0109820328652859 0.011516802944243 0.0124680511653423 0.0113629531115294 0.0102917654439807 0.0101364348083735 0.00984693318605423 0.0115289557725191 0.0102153364568949 0.0101874768733978 0.00997439958155155 0.00883135385811329 0.0104001071304083 0.00914312619715929 0.00772677874192595 0.0100395102053881 0.00981313176453114 0.00869345106184483 0.00866962410509586 0.0086707565933466 0.00890628155320883 0.00784013234078884 0.00858987402170897 0.00826080795377493 0.00816309545189142 0.00844899006187916 0.00860675703734159 0.00816098414361477 0.00893862452358007 0.00668511306867003 0.00604773685336113 0.00760708004236221 0.00612658727914095 0.00698500219732523 0.00720309559255838 0.00738290185108781 0.00822578091174364 0.00712159927934408 0.00688611064106226 0.00610087253153324 0.00795015413314104 0.00696648936718702 0.00737108662724495 0.00663621257990599 0.00606435863301158 0.0070930584333837 0.00753137096762657 0.00686082383617759 0.00658690463751554 0.00619596661999822 0.00581462075933814 0.00712865078821778 0.00663717556744814 0.0064032943919301 0.00607451144605875 0.00634610885754228 0.00608755415305495 0.00666977930814028
Performing the experiment using OEDL
OEDL can be used to automatically perform the experiment. The OEDL code for the experiment is shown below.
defProperty('rx_freq', "800e6", "") defProperty('rx_rate', "5e6", "") defProperty('rx_gain', "20", "") defProperty('recv_oml_output_type', "vector", "") defProperty('recv_oml_servername', "file", "") defProperty('tx_freq', "798e6", "") defProperty('tx_rate', "5e6", "") defProperty('tx_gain', "20", "") defProperty('tx_module', "foo", "") # using a random name for an unexisting module defProperty('rx_module', "foo", "") # so that no module is started, but it can be added later by setting this property defProperty('del_rx_module', "foo", "") require './wiserd.rb' defGroup('sender', "node1-1") do |node| node.addApplication("test:app:wiserd") do |app| app.setProperty('--uhd_tx_freq', property.tx_freq) app.setProperty('--uhd_tx_rate', property.tx_rate) app.setProperty('--uhd_tx_gain', property.tx_gain) app.setProperty('--addmodule', property.tx_module) end end defGroup('receiver', "node1-2") do |node| node.addApplication("test:app:wiserd") do |app| app.setProperty('--uhd_rx_freq', property.rx_freq) app.setProperty('--uhd_rx_rate', property.rx_rate) app.setProperty('--uhd_rx_gain', property.rx_gain) app.setProperty('--recv_oml_output_type', property.recv_oml_output_type) app.setProperty('--recv_oml_servername', property.recv_oml_servername) app.setProperty('--addmodule', property.rx_module) app.setProperty('--delmodule', property.del_rx_module) end end onEvent(:ALL_UP_AND_INSTALLED) do |event| wait 10 info "Starting the Receiver" group("receiver").startApplications info "Starting the Sender" group("sender").startApplications wait 8 property.tx_module = "waveform" property.rx_module = "fftmovingavgoml" for i in 798..802 property.tx_freq = "#{i}e6" wait 1 end property.del_rx_module = "fftmovingavgoml" group("sender").stopApplications group("receiver").stopApplications Experiment.done end
This experiment consists of a receiver centered at 800 MHz, with the bandwidth of 5 MHz, and the transmitter that runs for 5 seconds, transmitting a SINE waveform centered at frequencies of 798, 799, 800, 801 and 802 MHz for 1 second each. The code needs to be saved in a file named experiment.rb. It's assumed that the Wiserd application definition for OEDL is available in the file named wiserd.rb. After imaging the nodes and making sure they are turned on, the experiment can be run using the command
omf exec experiment.rb
When the experiment is finished, the receiver will save the results in a file located at the / directory. The file can then be transferred to a local machine for further processing. For example, the results can be plotted using a simple octave script shown below:
w = dlmread('file', ' ', 10, 1); i = 1; while (i <= size(w,1)) if (max(abs(w(i, :))) == 0) w(i,:) = []; end i = i + 1; end imagesc(10*log(w/1000.0))
For the described experiment, octave will then produce the image shown below.
Attachments (6)
- uhd_exp1.rb.txt (1.7 KB ) - added by 12 years ago.
- sq3_parse.cpp (2.0 KB ) - added by 12 years ago.
- random_tx.png (105.3 KB ) - added by 12 years ago.
- uhd_exp1.rb (2.2 KB ) - added by 11 years ago.
- octave_plot.jpg (22.5 KB ) - added by 9 years ago.
- wiserd.rb (4.1 KB ) - added by 9 years ago.
Download all attachments as: .zip