All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.android.location.CorrelationVector Maven / Gradle / Ivy

Go to download

A library jar that provides APIs for Applications written for the Google Android Platform.

There is a newer version: 15-robolectric-12650502
Show newest version
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.location;

import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;

import com.android.internal.util.Preconditions;

import java.util.Arrays;
import java.util.Objects;

/**
 * Contains info about the correlation output of incoming GNSS signal and a local copy of
 * its corresponding spreading code at a given frequency offset.
 *
 * @hide
 */
@SystemApi
public final class CorrelationVector implements Parcelable {

    private final double mSamplingWidthMeters;
    private final double mSamplingStartMeters;
    private final double mFrequencyOffsetMetersPerSecond;
    @NonNull private final int[] mMagnitude;

    /**
     * Returns the space between correlation samples in meters.
     */
    @FloatRange(from = 0.0f, fromInclusive = false)
    public double getSamplingWidthMeters() {
        return mSamplingWidthMeters;
    }

    /**
     * Returns the offset of the first sampling bin in meters.
     *
     * 

The following sampling bins are located at positive offsets from this value as follows: * samplingStartMeters, samplingStartMeters + samplingWidthMeters, ... , samplingStartMeters + * (magnitude.size-1) * samplingWidthMeters. * */ @FloatRange(from = 0.0f) public double getSamplingStartMeters() { return mSamplingStartMeters; } /** * Returns the frequency offset from reported pseudorange rate for this CorrelationVector. */ @FloatRange(from = 0.0f) public double getFrequencyOffsetMetersPerSecond() { return mFrequencyOffsetMetersPerSecond; } /** * Returns the data array representing normalized correlation magnitude values. * *

The data are normalized correlation magnitude values from -1 to 1, the reported value must * be encoded as signed 16 bit integer where 1 is represented by 32767 and -1 is represented * by -32768. * *

The values are quantized using a 16bit integer to save on the data size since the array * contains real data and it might grow. * */ @NonNull public int[] getMagnitude() { return mMagnitude.clone(); } private CorrelationVector(Builder builder) { Preconditions.checkNotNull(builder.mMagnitude, "Magnitude array must not be null"); Preconditions.checkArgumentPositive(builder.mMagnitude.length, "Magnitude array must have non-zero length"); Preconditions.checkArgument(builder.mFrequencyOffsetMetersPerSecond >= 0.0, "FrequencyOffsetMetersPerSecond must be non-negative (greater than or equal to 0)"); Preconditions.checkArgument(builder.mSamplingWidthMeters > 0.0, "SamplingWidthMeters must be positive (greater than 0)"); mMagnitude = builder.mMagnitude; mFrequencyOffsetMetersPerSecond = builder.mFrequencyOffsetMetersPerSecond; mSamplingWidthMeters = builder.mSamplingWidthMeters; mSamplingStartMeters = builder.mSamplingStartMeters; } private CorrelationVector(Parcel in) { mSamplingWidthMeters = in.readDouble(); mSamplingStartMeters = in.readDouble(); mFrequencyOffsetMetersPerSecond = in.readDouble(); mMagnitude = new int[in.readInt()]; in.readIntArray(mMagnitude); } /* * Method definitions to support Parcelable operations. */ public static final @NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CorrelationVector createFromParcel(Parcel parcel) { return new CorrelationVector(parcel); } @Override public CorrelationVector[] newArray(int size) { return new CorrelationVector[size]; } }; @Override public int describeContents() { return 0; } @NonNull @Override public String toString() { return "CorrelationVector{" + "FrequencyOffsetMetersPerSecond=" + mFrequencyOffsetMetersPerSecond + ", SamplingWidthMeters=" + mSamplingWidthMeters + ", SamplingStartMeters=" + mSamplingStartMeters + ", Magnitude=" + Arrays.toString(mMagnitude) + '}'; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeDouble(mSamplingWidthMeters); dest.writeDouble(mSamplingStartMeters); dest.writeDouble(mFrequencyOffsetMetersPerSecond); dest.writeInt(mMagnitude.length); dest.writeIntArray(mMagnitude); } /** * Returns true if this {@link CorrelationVector} is equivalent to the given object. * Returns false otherwise. */ @Override public boolean equals(Object object) { if (object == this) { return true; } if (!(object instanceof CorrelationVector)) { return false; } CorrelationVector c = (CorrelationVector) object; return Arrays.equals(mMagnitude, c.getMagnitude()) && Double.compare(mSamplingWidthMeters, c.getSamplingWidthMeters()) == 0 && Double.compare(mSamplingStartMeters, c.getSamplingStartMeters()) == 0 && Double.compare(mFrequencyOffsetMetersPerSecond, c.getFrequencyOffsetMetersPerSecond()) == 0; } @Override public int hashCode() { return Objects.hash(mSamplingWidthMeters, mSamplingStartMeters, mFrequencyOffsetMetersPerSecond, Arrays.hashCode(mMagnitude)); } /** * Builder class for CorrelationVector. */ public static final class Builder { private double mSamplingWidthMeters; private double mSamplingStartMeters; private double mFrequencyOffsetMetersPerSecond; @NonNull private int[] mMagnitude; /** Sets the space between correlation samples in meters. */ @NonNull public Builder setSamplingWidthMeters( @FloatRange(from = 0.0f, fromInclusive = false) double samplingWidthMeters) { mSamplingWidthMeters = samplingWidthMeters; return this; } /** Sets the offset of the first sampling bin in meters. */ @NonNull public Builder setSamplingStartMeters(@FloatRange(from = 0.0f) double samplingStartMeters) { mSamplingStartMeters = samplingStartMeters; return this; } /** Sets the frequency offset from reported pseudorange rate for this CorrelationVector */ @NonNull public Builder setFrequencyOffsetMetersPerSecond( @FloatRange(from = 0.0f) double frequencyOffsetMetersPerSecond) { mFrequencyOffsetMetersPerSecond = frequencyOffsetMetersPerSecond; return this; } /** Sets the data array representing normalized correlation magnitude values. */ @NonNull public Builder setMagnitude(@NonNull int[] magnitude) { mMagnitude = magnitude; return this; } /** * Build CorrelationVector object. * * @return instance of CorrelationVector */ @NonNull public CorrelationVector build() { return new CorrelationVector(this); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy