Thanks everyone.

Here's a more refined description of Option 2, based on the comments.

- A spectrum profile provides the maximum permissible power levels across a 
range of frequencies, where power levels are expressed as maximum power 
spectral densities over a specified bandwidth

- When regulations have requirements at multiple bandwidths (e.g., Ofcom, 
ETSI), there would be a spectrum profile for each bandwidth. The device 
emissions must be bounded by all the profiles (logical AND).

- The spectrum profile is expressed in terms of an "Ordered List" of (freqHz, 
psd) pairs
  - The points must be ordered in non-decreasing "freqHz" value
  - Two consecutive points may have the same "freqHz" to represent a "step 
function"
  - Three or more points may NOT share the same "freqHz" value
       - There must be two or more points with different "freqHz" values
…

Should we adopt this more general encoding over the "channelized" encoding in 
Draft 06?

Yes.  Seems like a significant improvement!

Paul



-vince


On Fri, Aug 30, 2013 at 12:43 PM, Andy Lee 
<[email protected]<mailto:[email protected]>> wrote:

On Thu, Aug 29, 2013 at 1:33 PM, Harasty, Daniel J 
<[email protected]<mailto:[email protected]>> wrote:

How to Indicate “Unavailable”

There are a few options to indicate that a subband is “unavailable”.
1)      The spec could state a value that means “unavailable”, such as -100, 
-1000.0, or -56.8.
2)      The spec could not state that value, and the Database could choose an 
arbitrary small number at its discretion.
3)      The spec could state that the JSON value null means “unavailable”, or a 
reserved string such as “-Inf”

In the case of Ofcom white space rules, I believe that a power level will be 
computed for every channel, albeit very low on some channels.

In the case of the FCC, there are also specific levels specified for OOB white 
space emissions.

For Industry Canada, the FCC, and probably everywhere, there are also 
generalized limits on unintended EM emissions (e.g., IC "RSS-Gen" and FCC "Part 
15" rules).  This should make it possible to specify a theoretical power 
"floor" without having to resort to weirdness like "-Inf" or "null" values.  It 
would be much better to fill in real values based on actual rules from the 
regulator.


Andy Lee |       Google Inc. |   [email protected]<mailto:[email protected]> |  
 408-230-0522<tel:408-230-0522>


On Thu, Aug 29, 2013 at 3:30 PM, Kalle Kuismanen 
<[email protected]<mailto:[email protected]>> 
wrote:
Hi All,

I haven't participated in the discussion much, but I just had to solve this 
very issue about a week ago so here a my two cents:

on the issue of "-Inf" or null. We've also used in our paws and other protocol 
implementation "-Inf" as indication of channel being unavailable, but problem 
is that it's somewhat misleading. For example if a channel is "usable" only 
above 20 dBm and we calculate maximum transmission to be 19 dBm it is bit silly 
to send -Inf. Null value is even more misleading, because it usually indicates 
that we don't know what the value is, which in this case probably would mean an 
implementation error in the calculation code.

Then of course considering the implementation. I tried to use in our paws 
implementation "-Inf", but of course Javascript doesn't recognize that string  
as a number, so it causes a type casting problem i.e. sometimes the value is a 
number and sometimes a string. Which of course led to first our server not 
validating the JSON against the PAWS schema and then when I by passed that (bad 
thing, but I was in a rush) our test client side validation failed also.

See below how I decided it should be solved, but in the end, because didn't 
want to burden the device side implementers I just dropped the channels that 
couldn't be used from the array.

On the client side or device side the JSON needs to be checked for the special 
value or a simple field will suffice. Mutable nature of JSON makes it easy.

On client side the code would check in Javascript in node.js:

var a = [
    { "freqHz": 4.70e8, "unavailable": true},
    { "freqHz": 5.18e8, "unavailable": true},
    { "freqHz": 5.18e8, "maxPsdDbmPerBw": 30.0 },
    { "freqHz": 5.24e8, "maxPsdDbmPerBw": 30.0 },
];
var b = "";

for(var f in a)
    {
    if(a[f]["unavailable"]!==true)
        b += a[f].freqHz+":"+a[f].maxPsdDbmPerBw+"\n";
    }

process.stdout.write( b );

This is not so different from using "-Inf" or "null" implementation.

var a = [
    { "freqHz": 4.70e8, "maxPsdDbmPerBw": "-Inf"},
    { "freqHz": 5.18e8, "maxPsdDbmPerBw": "-Inf"},
    { "freqHz": 5.18e8, "maxPsdDbmPerBw": 30.0 },
    { "freqHz": 5.24e8, "maxPsdDbmPerBw": 30.0 },
];
var b = "";

for(var f in a)
    {
    if(a[f]["maxPsdDbmPerBw"]!=="-Inf")
        b += a[f].freqHz+":"+a[f].maxPsdDbmPerBw+"\n";
    }
process.stdout.write( b );

Both cases usually just do one comparison. But as I said first version 
preserves type of maxPsdDbmPerBw other does not. Both cost about the same on 
the wire.

But of course this is just a suggestion. JSON is very malleable.

Cheers,
Kalle Kuismanen
FairSpectrum


On Thu, Aug 29, 2013 at 11:33 PM, Harasty, Daniel J 
<[email protected]<mailto:[email protected]>> wrote:



I rather prefer option 2, but I realize this is more a point of personal taste; 
I think either are workable.



Regarding option 2, I have the following comments.  (Some may apply to option 
1, also.)



Ordering Matters

I think the spec should require that the “points” be in frequency-increasing 
order of “freqHz” value.  (The need is obvious, so let’s state it as a 
requirement.)



Two “points” may have the same “freqHz” value; their order is significant, too. 
 (For example, the first four points in Vince’s example constitute a “step 
function”.  However, if points #2 and #3 were swapped, it would indicate a 
“sawtooth” spectral mask.)



Three (or more) “points” may NOT share a “freqHz” value.



Should be an Array



I think the term “point” is rather vague, an repeatedly re-using it in a single 
object can’t be kosher.



Thus, I propose this structure be an array of objects:



[

    { "freqHz": 4.70e8, "maxPsdDbmPerBw": -56.8 },

    { "freqHz": 5.18e8, "maxPsdDbmPerBw": -56.8 },

    { "freqHz": 5.18e8, "maxPsdDbmPerBw": 30.0 },

    { "freqHz": 5.24e8, "maxPsdDbmPerBw": 30.0 },

   .

   .

   .

]



How to Indicate “Unavailable”



There are a few options to indicate that a subband is “unavailable”.

1)      The spec could state a value that means “unavailable”, such as -100, 
-1000.0, or -56.8.

2)      The spec could not state that value, and the Database could choose an 
arbitrary small number at its discretion.

3)      The spec could state that the JSON value null means “unavailable”, or a 
reserved string such as “-Inf”



I rather prefer option 3.  If we use a reserved string, I prefer “-Inf” in 
particular as it is an IEEE standard for negative infinity, and many 
programming languages support interpreting “-Inf” as a parsable string 
resulting in a valid IEEE float.



[

    { "freqHz": 4.70e8, "maxPsdDbmPerBw":  null},

    { "freqHz": 5.18e8, "maxPsdDbmPerBw": null },

    { "freqHz": 5.18e8, "maxPsdDbmPerBw": 30.0 },

    { "freqHz": 5.24e8, "maxPsdDbmPerBw": 30.0 },

]



or



[

    { "freqHz": 4.70e8, "maxPsdDbmPerBw": “-Inf”},

    { "freqHz": 5.18e8, "maxPsdDbmPerBw": “-Inf”},

    { "freqHz": 5.18e8, "maxPsdDbmPerBw": 30.0 },

    { "freqHz": 5.24e8, "maxPsdDbmPerBw": 30.0 },

]





From:[email protected]<mailto:[email protected]> 
[mailto:[email protected]<mailto:[email protected]>] On Behalf Of 
Vincent Chen
Sent: Sunday, August 25, 2013 6:40 PM
To: [email protected]<mailto:[email protected]>
Subject: [paws] Encoding of spectrum profile



All,



As was brought up before (and at) the F2F, the current encoding for a spectrum 
profile

has a "channelized" view:

 - List of (startHz, stopHz, power)

 - Has no ability to specify power level in "unavailable" ranges



Example:

  {

    "point": { "startHz": 5.18e8, "stopHz": 5.24e8, "maxPsdDbmPerBw": 30.0 },

    "point": { "startHz": 5.24e8, "stopHz": 5.30e8, "maxPsdDbmPerBw": 36.0 },

  }



Question: Should we use a more flexible encoding?



There were two proposals made on the list:

  - Option 1: List of (startHz, startPower, stopHz, stopPower)

  - Option 2: Ordered list of (freqHz, power)



At the F2F, we agreed that Option 2 was the more general form.



Example:

  {

    "point": { "freqHz": 4.70e8, "maxPsdDbmPerBw": -56.8 },

    "point": { "freqHz": 5.18e8, "maxPsdDbmPerBw": -56.8 },

    "point": { "freqHz": 5.18e8, "maxPsdDbmPerBw": 30.0 },

    "point": { "freqHz": 5.24e8, "maxPsdDbmPerBw": 30.0 },

    "point": { "freqHz": 5.24e8, "maxPsdDbmPerBw": 36.0 },

    "point": { "freqHz": 5.30e8, "maxPsdDbmPerBw": 36.0 },

    "point": { "freqHz": 5.30e8, "maxPsdDbmPerBw": -56.8 },

    "point": { "freqHz": 6.98e8, "maxPsdDbmPerBw": -56.8 }

  }


This example explicitly specifies the power levels in the unavailable frequency 
ranges.



This example also shows that it's possible to encode "square edges" by having 
two

points using the same frequency, but does allow for "slanted edges" for more 
gentle roll-offs.



--
-vince

_______________________________________________
paws mailing list
[email protected]<mailto:[email protected]>
https://www.ietf.org/mailman/listinfo/paws



_______________________________________________
paws mailing list
[email protected]<mailto:[email protected]>
https://www.ietf.org/mailman/listinfo/paws



_______________________________________________
paws mailing list
[email protected]<mailto:[email protected]>
https://www.ietf.org/mailman/listinfo/paws




--
-vince


_______________________________________________
paws mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/paws

Reply via email to