Cityscape Spectrum Observatory


Links and documentation:

  1. Cityscape Technical report
  2. CityScape Deployments
  3. Spectrum Plots
  4. CityScape test suite
  5. CityScape Release Notes
  6. CityScape Installation & Operation Guide


ScanFile: This is the file format that all wireless spectrum data will be stored in on the client and what raw data will be stored in on the server.

Scanner Service: This scanner service is responsible for communicating with the RF sensor and then writing a file in the ScanFile format with the feature vectors that we are trying to extract such as max, min and average power over a specific time period.

Upload Service: The upload service is responsible for reliably uploading the ScanFiles to the Azure cloud and then sending a notification to the Upload Web Service when the upload is complete.

Upload Web Service: The upload web service is responsible for queueing complete ScanFile uploads for processing by the data processor worker role to the correct storage account.

Data Processor Worker Role: The data processor is responsible for processing the uploaded ScanFiles and aggregating the information within those files to Azure tables.

Azure Table Storage: All of the aggregated data for time periods such as Hourly, Daily, Weekly, and Monthly are stored in Azure. Additionally, all of the metadata for the website operation is stored in Azure.

Azure Blob Storage: All of the raw ScanFiles are stored in blob storage within Azure.

Screen Shot 2016-07-22 at 4.37.37 PM


Figure: CityScape set-up


Knobs available on CityScape observatory:

  1. Name – Name of the device. This is used for logging purposes only. Type: String, Value: Limit to 64 characters or less
  1. Device type – Type of the device to scan the data. The values are determined by devices that have been supported in the code base. Type: String, Value: Usrp
  1. Start frequency in Hz – Frequency, inclusive, at which device should start collecting data. Type: Int, Value: 50000000 (WBX), 2200000000 (SBX)
  1. Stop frequency in Hz – Frequency, inclusive, at which device should stop collecting data. Type: Int, Value: 2200000000 (WBX), 4400000000 (SBX)
  1. Device address – Address of the device that is being communicated with. Type: String, Value:
  2. Gain – To adjust the gain (dB) of the USRP. Only applies to USRPs. Type: Int, Value: 38
  3. Antenna port – Antenna receiver port on the USRP. Type: String, Value: RX1 or RX2
  1. Scan pattern –
  • Standard scan: Based on the start and stop frequencies, the USRP is tuned to take multiple snapshots. The number of snapshots is decided by the instantaneous bandwidth chosen and is given by

Number of snapshots = (Stop frequency – Start frequency) / Instantaneous bandwidth

The center frequency of the USRP is retuned sequentially from the lowest to the highest frequency. The below diagram describes the process.

Screen Shot 2016-08-07 at 6.22.58 PM
  • DC spike adaptive scan: To remove the DC spike at the USRP center frequency, this scan method is used. First, a standard scan (discussed in part a.) is implemented. Second, a standard scan with a new start frequency is implemented. The new start frequency is given by

fnew start = fstart + (1/3)*(Instantaneous bandwidth)

= fstart + foffset

For the power spectral density charts, the FFT of both the scans are taken and for every snapshot in the first scan, the center 1/3rd of the FFT values are replaced by the corresponding FFT values from the second scan. The below diagram describes the same.

Screen Shot 2016-08-07 at 6.23.23 PM

Type: String, Value: “StandardScan” or “DCSpikeAdaptiveScan”

  1. Communication channel – String that specifies the communication channel being used. Type: String, Value: “addr” – IP based communications, “serial” – USB based communications.
  1. Locking communication channel – Applies only if the hardware has a call to see if the sensor is locked after tuning to a new frequency. Type: Boolean, Value: N200 – true,
B200 – false.
  1. Instantaneous bandwidth – Value entered should be in Hz. Type: Int, Value: 25000000
  1. Tune sleep – The duration of time to wait after tuning the USRP center frequency. Type: Int, Value: 0 (in seconds)
  1. Samples per snapshot – Indicates number of samples to capture for each snapshot. Type: Int, Value: 512, 1024, etc.
  1. Number of snapshots per channel visit – Number of samples to take before retuning the RF sensor. Type: Int, Value: 1
  1. Number of snapshots to throw away – Number of snapshots to throw away after tuning the RF Sensor. Type: Int, Value: 0
  1. GPS enabled – This will output GPS data to the scan files and the raw IQ data files if the device supports GPS. Type: Boolean, Value: true or false


Experiment 1: Time averaged PSD

  1. Minutes of data per upload file – Minutes of data after which an upload file is written and a new one is started. This value must be greater than or equal to 60. Type: Int, Value: 60
  1. Minutes of data per sweep – Seconds of data per sample data captured within a scan file. A maximum, minimum and average will be calculated for this time period. Type: Int, Value: 60

Experiment 2: Raw IQ

  1. Output data – Used to determine if a raw IQ data files are written. The default value is ‘true’. This is only supported if the device supports this. Type: Boolean, Value: true or false
  1. Start frequency in Hz – Frequency, inclusive, at which device should start collecting data. Type: Int, Value: frequency in Hz
  1. Stop frequency in Hz – Frequency, inclusive, at which device should stop collecting data. Type: Int, Value: frequency in Hz
  1. Seconds of data per upload file – Seconds of data written to a file before creating another one. Type: Int, Value: 300 (for 5 min of data in each file)
  1. Retention seconds – This value is used to determine of how long a Raw IQ data file can be retained on the disk (time to live). This is to prevent the scenario where all the disk space is consumed with raw data files. Type: Int, Value: 3600 (for 1 hour)