Products & Services Solutions Academia Support User Community Company

Learn more about Communications Toolbox   

Adjacent Channel Power Ratio (ACPR) Measurements

Adjacent channel power ratio (ACPR) calculations characterize spectral regrowth in a communications system component, such as a modulator or an analog front end. Amplifier nonlinearity causes spectral regrowth. ACPR calculations determine the likelihood that a given system causes interference with an adjacent channel.

Many transmission standards, such as IS-95, CDMA, WCDMA, 802.11, and Bluetooth, contain a definition for ACPR measurements. Most standards define ACPR measurements as the ratio of the average power in the main channel and any adjacent channels. The specific offset frequencies and measurement bandwidths (BWs) you use depends on the specific industry standard you are using. For instance, measurements of CDMA amplifiers involve two offsets (from the carrier frequency) of 885 kHz and 1.98 MHz, and a measurement BW of 30 KHz.

For more information, see the commmeasure.ACPR help page.

Overview of ACPR Measurement Tutorial

In this tutorial, you obtain ACPR measurements using a WCDMA communications signal, according to the 3GPP™ TS 125.104 standard.

This example uses baseband WCDMA sample signals at the input and output of a nonlinear amplifier. The WCDMASignal.mat file contains sample data for use with the tutorial. This file divides the data into 10e3 sample blocks and stores them in the columns of data matrices, dataBeforeAmplifier and dataAfterAmplifier.

The WCDMA specification requires that you obtain all measurements using a 3.84 MHz sampling frequency.

Creating the ACPR Object and Setting Up Measurements

  1. Define the sampling frequency, load the WCDMA file, and get the data by typing the following at the MATLAB command line:

    % System sampling frequency, 3.84 MHz chip rate, 8 samples per chip
    Fs = 3.84e6*8;
    load WCDMASignal.mat
    txSignalBeforeAmplifier = dataBeforeAmplifier(:,1);
    txSignalAfterAmplifier = dataAfterAmplifier(:,1);
    
  2. Create the ACPR object and specify the sampling frequency.

    hACPR = commmeasure.ACPR('Fs',Fs)
    

    The object outputs the following:

    hACPR = 
    
                             Type: 'ACPR Measurement'
              NormalizedFrequency: 0
                               Fs: 30720000
             MainChannelFrequency: 0
                MainChannelMeasBW: 1536000
            AdjacentChannelOffset: [-3072000 3072000]
            AdjacentChannelMeasBW: 1536000
                MeasurementFilter: [1x1 dfilt.dffir]
          SpectralEstimatorOption: 'Default'
        FrequencyResolutionOption: 'Inherit from input dimensions'
                  FFTLengthOption: 'Next power of 2'
                          MaxHold: 'Off'
                       PowerUnits: 'dBm'
                       FrameCount: 0
  3. Specify the main channel center frequency and measurement bandwidth.

    Specify the main channel center frequency using the MainChannelFrequency property. Then, specify the main channel measurement bandwidth using the MainChannelMeasBW property.

    For the baseband data you are using, the main channel center frequency is at 0 Hz. The WCDMA standard specifies that you obtain main channel power using a 3.84-MHz measurement bandwidth. Specify these by typing the following.

    hACPR.MainChannelFrequency = 0;
    hACPR.MainChannelMeasBW = 3.84e6;
    
  4. Specify adjacent channel offsets and measurement bandwidths.

    The WCDMA standard specifies ACPR limits for four adjacent channels, located at 5, -5, 10, -10 MHz away from the main channel center frequency. In all cases, you obtain adjacent channel power using a 3.84-MHz bandwidth. Specify the adjacent channel offsets and measurement bandwidths using the AdjacentChannelOffset and AdjacentChannelMeasBW properties.

    hACPR.AdjacentChannelOffset = [-10 -5 5 10]*1e6;
    hACPR.AdjacentChannelMeasBW = 3.84e6;
    

    Notice that if the measurement bandwidths for all the adjacent channels are equal, you specify a scalar value. If measurement bandwidths are different, you specify a vector of measurement bandwidths with a length equal to the length of the offset vector.

Obtaining the ACPR Measurements

You obtain ACPR measurements by calling the run method of the ACPR object. You can also obtain the power measurements for the main and adjacent channels. The PowerUnits property specifies the unit of measure. The property value defaults to dBm (power ratio referenced to one milliwatt (mW)).

  1. Obtain the ACPR measurements at the amplifier input by typing the following at the MATLAB command line:

    [ACPR mainChannelPower adjChannelPower] = ...,
    run(hACPR,txSignalBeforeAmplifier)
    

    The ACPR object produces the following input measurement data:

    ACPR =
    
      -68.7815  -54.9298  -54.9667  -68.5011
    
    mainChannelPower =
    
       29.7412
    
    adjChannelPower =
    
      -39.0404  -25.1886  -25.2256  -38.7599
  2. Obtain the ACPR measurements at the amplifier output:

    [ACPR mainChannelPower adjChannelPower] = ...,
    run(hACPR,txSignalAfterAmplifier)
    

    The ACPR object produces the following input measurement data:

    ACPR =
    
      -42.9373  -28.1873  -27.9864  -43.0322
    
    mainChannelPower =
    
       41.0451
    
    adjChannelPower =
    
       -1.8922   12.8579   13.0587   -1.9870

Notice the increase in ACPR values at the output of the amplifier. This increase reflects distortion due to amplifier nonlinearity. The WCDMA standard specifies that ACPR values be below -45 dB at +/- 5 MHz offsets, and below -50 dB at +/- 10 MHz offsets. In this example, the signal at the amplifier input meets the specifications while the signal at the amplifier output does not.

Specifying a Measurement Filter

The WCDMA standard specifies that you obtain ACPR measurements using a root-raised-cosine filter. It also states that you measure both the main channel power and adjacent channel powers using a matched root-raised-cosine (RRC) filter with a roll-off factor of 0.22. You specify the measurement filter using the MeasurementFilter property. This property value defaults to an all-pass filter with unity gain.

The filter must be an FIR filter, contained in a dfilt object, and its response must center at 0 Hz. The ACPR object automatically shifts and applies the filter at each of the specified main and adjacent channel bands. (The power measurement still falls within the bands specified by the MainChannelMeasBW, and AdjacentChannelMeasBW properties.)

The WCDMASignal.mat file contains data that was obtained using a 96 tap filter with a rolloff factor of 0.22.

  1. Create the filter (using fdesign.pulseshaping, from the Signal Processing Toolbox software) and obtain measurements by typing the following at the MATLAB command line:

    PulseShapeFdesign  = fdesign.pulseshaping(8,...,
    'Square Root Raised Cosine', 'Nsym,Beta',16,0.22); 
    hRRCFilter = design(PulseShapeFdesign);
    
  2. Set this filter as the measurement filter for the ACPR object.

    hACPR.MeasurementFilter = hRRCFilter;
    
  3. Obtain the ACPR power measurements at the amplifier input.

    ACPR = run(hACPR,txSignalBeforeAmplifier)
    

    The ACPR object produces the following measurement data:

    ACPR =
      -71.7014  -55.6953  -55.9930  -71.4599

Controlling the Power Spectral Estimator

By default, the ACPR object measures power using a Welch power spectral estimator with a Hamming window and zero percent overlap. The object uses a rectangle approximation of the integral for the power spectral density estimates in the measurement bandwidth of interest. If you set SpectralEstimatorOption to 'User defined' several properties become available, providing you control of the resolution, variance, and dynamic range of the spectral estimates.

  1. Enable the SegmentLength, OverlapPercentage, and WindowOption properties by typing the following at the MATLAB command line:

    hACPR.SpectralEstimatorOption = 'User defined'
    

    This change allows you to customize the spectral estimates for obtaining power measurements. For example, you can set the spectral estimator segment length to 1024 and increase the overlap percentage to 50%, reducing the consequent variance increase. You can also choose a window with larger side lobe attenuation (compared to the default Hamming window). For more information, see spectrum.welch in the Signal Processing Toolbox™ User's Guide.

  2. Create a spectral estimator with a 'Chebyshev' window and a side lobe attenuation of 200 dB.

    hACPR.SegmentLength = 1024;
    hACPR.OverlapPercentage = 50;
    % Choosing a Chebyshev window enables a SidelobeAtten property 
    % you can use to set the side lobe attenuation of the window.
    hACPR.WindowOption = 'Chebyshev';
    hACPR.SidelobeAtten = 200;
    
  3. Obtain the ACPR power measurements at the amplifier output.

    ACPR = run(hACPR,txSignalAfterAmplifier)
    

    The ACPR object produces the following measurement data:

    ACPR =
      -43.9446  -29.7173  -29.8086  -43.7798

Controlling the Resolution of Power Spectral Density Measurements

When the SpectralEstimatorOption property of the ACPR object is 'Default', you control the power spectral measurement resolution using the FrequencyResolutionOption property. Set this property to 'Inherit from input dimensions' to obtain the maximum resolution according to the input data length. Setting the FrequencyResolutionOption property to 'Specify via property' sets the resolution to the value you specified for the FrequencyResolution property. Reducing the frequency resolution reduces the variance of the power spectral density estimates used to compute average power. The tradeoff is an increase in power leakage from frequency components outside of the measurement bandwidth.

  1. Set SpectralEstimatorOption back to default to make the FrequencyResolutionOption relevant, by typing the following at the MATLAB command line:

    hACPR.SpectralEstimatorOption = 'Default';
    hACPR.FrequencyResolutionOption = 'Specify via property'
    

    Now that the property is relevant, you can specify a frequency value in Hertz. (The larger this value, the smaller the resolution).

  2. Specify 20.4 kHz for the frequency value.

    hACPR.FrequencyResolution = 20.4e3;
    
  3. Measure ACPR for the 50 signal snapshots at the amplifier output and compute the variance of the measurements.

    for idx = 1:50
        ACPR(idx,:) = run(hACPR,dataAfterAmplifier(:,idx));
    end
    var(ACPR)
    

    The ACPR object produces the following output data:

    ans =
    
        0.4733    0.6926    0.7824    0.4596
  4. For comparison, set the resolution to 650 kHz, measure ACPR for 50 signal snapshots at the amplifier output, and compute the variance of the measurements:

    hACPR.FrequencyResolution = 650e3;
    for idx = 1:50
        ACPR(idx,:) = run(hACPR,dataAfterAmplifier(:,idx));
    end
    var(ACPR)
    

    The ACPR object produces the following output data:

    ans =
        0.3298    0.5394    0.5389    0.4168

In this example, lowering the resolution (from 20.4 to 650 KHz) also lowers the ACPR measurement variance.

Measure Power Using the Max-Hold Option.

Some communications standards specify using max-hold spectrum power measurements when computing ACPR values. This calculation compares the current power spectral density vector estimation to the previous max-hold accumulated power spectral density vector estimation. The object obtains the power spectral density vector estimation using the current input data. It obtains the previous max-hold accumulated power spectral density vector from the previous call to the run method. The object uses the maximum values at each frequency bin for calculating average power measurements. A call to the reset method clears the max-hold spectrum.

  1. Accumulate max-hold spectra for 50 amplifier output data snapshots and get ACPR measurements by typing the following at the MATLAB command line:

    hACPR.MaxHold = 'On';
    for idx = 1:49
        run(hACPR,dataAfterAmplifier(:,idx));
    end
    ACPR = run(hACPR,dataAfterAmplifier(:,50))
    

    The ACPR object produces the following output data:

    ACPR =
    
      -42.4644  -26.6522  -27.0012  -42.3082
  2. The frame count property of the ACPR object reflects the number of signal snapshots the object processes.

    hACPR.FrameCount
    %Reset the ACPR object
    reset(hACPR)
    hACPR.FrameCount
    

    The ACPR object produces the following output data:

    ans =
    
        50
    
    ans =
    
         0

Plotting the Signal Spectrum

Use the MATLAB software to plot the power spectral density of the WCDMA signals at the input and output of the nonlinear amplifier. The plot allows you to visualize the spectral regrowth effects intrinsic to amplifier nonlinearity. Notice how the measurements reflect the spectral regrowth. (Note: the following code is just for visualizing signal spectra; it has nothing to do with obtaining the ACPR measurements).

hPsd = spectrum.welch('Hamming',1024);
hopts = psdopts(hPsd);
set(hopts,'SpectrumType','twosided','NFFT',1024,'Fs',Fs,...,
'CenterDC',true)
PSD1 = psd(hPsd,txSignalBeforeAmplifier,hopts);
PSD2 = psd(hPsd,txSignalAfterAmplifier,hopts);
data = dspdata.psd([PSD1.Data PSD2.Data],PSD1.Frequencies,'Fs',Fs);
plot(data)
legend('Amplifier input', 'Amplifier output')

  


Free Early Verification Kit

Learn how to apply early verification to your development process through these technical resources.

How much time do you spend on testing to ensure implementation meets system-level requirements?

 © 1984-2009- The MathWorks, Inc.    -   Site Help   -   Patents   -   Trademarks   -   Privacy Policy   -   Preventing Piracy   -   RSS