Adjacent channel power ratio (ACPR) calculations (also known
as adjacent channel leakage ratio (ACLR)), 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 offset frequencies and measurement bandwidths (BWs) you use when obtaining measurements depends on which specific industry standard you are using. For instance, measurements for 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 `comm.ACPR`

help page.

Communications Toolbox™ contains the `comm.ACPR`

System
object™.
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 25 signal snapshots of 7e3 samples each 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.

Define the sample rate, load the WCDMA file, and get the data by entering the following at the MATLAB

^{®}command line:% System sampling frequency, 3.84 MHz chip rate, 8 samples per chip SampleRate = 3.84e6*8; load WCDMASignal.mat % Use the first signal snapshot txSignalBeforeAmplifier = dataBeforeAmplifier(:,1); txSignalAfterAmplifier = dataAfterAmplifier(:,1);

Create the comm.ACPR System object and specify the sampling frequency.

hACPR = comm.ACPR('SampleRate', SampleRate)

The System object presents the following information:

NormalizedFrequency: false SampleRate: 30720000 MainChannelFrequency: 0 MainMeasurementBandwidth: 50000 AdjacentChannelOffset: [-100000 100000] AdjacentMeasurementBandwidth: 50000 MeasurementFilterSource: 'None' SpectralEstimation: 'Auto' FFTLength: 'Next power of 2' MaxHold: false PowerUnits: 'dBm' MainChannelPowerOutputPort: false AdjacentChannelPowerOutputPort: false

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`MainMeasurementBandwidth`

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.MainMeasurementBandwidth = 3.84e6;

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`AdjacentMeasurementBandwidth`

properties.hACPR.AdjacentChannelOffset = [-10 -5 5 10]*1e6; hACPR.AdjacentMeasurementBandwidth = 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.

Set the

`MainChannelPowerOutputPort`

and`AdjacentChannelPowerOutputPort`

properties to`true`

by entering the following at the MATLAB command line:hACPR.MainChannelPowerOutputPort = true hACPR.AdjacentChannelPowerOutputPort = true

Create a

`comm.ACPR`

System object to measure the amplifier output.hACPRoutput = clone(hACPR);

You obtain ACPR measurements by calling the `step`

method
of `comm.ACPR`

. 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)).

Obtain the ACPR measurements at the amplifier input:

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

The

`comm.ACPR`

System object produces the following output measurement data:ACPR = -68.6668 -54.9002 -55.0653 -68.4604 mainChannelPower = 29.5190 adjChannelPower = -39.1477 -25.3812 -25.5463 -38.9414

Obtain the ACPR measurements at the amplifier output:

[ACPR mainChannelPower adjChannelPower] = ..., step(hACPRoutput,txSignalAfterAmplifier)

The

`comm.ACPR`

System object produces the following input measurement data:ACPR = -42.1625 -27.0912 -26.8785 -42.4915 mainChannelPower = 40.6725 adjChannelPower = -1.4899 13.5813 13.7941 -1.8190

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.

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 rolloff factor 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, 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 `MainMeasurementBandwidth`

,
and `AdjacentMeasurementBandwidth`

properties.)

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

Create the filter (using

`rcosdesign`

, from the Signal Processing Toolbox™ software) and obtain measurements by entering the following at the MATLAB command line:% Scale for 0 dB passband gain measFilt = rcosdesign(0.22,16,8)/sqrt(8);

Set the filter you created in the previous step as the measurement filter for the ACPR object.

release(hACPR); hACPR.MeasurementFilterSource = 'Property'; hACPR.MeasurementFilter = measFilt;

Implement the same filter at the amplifier output by cloning the

`comm.ACPR`

System object.hACPRoutput = clone(hACPR)

Obtain the ACPR power measurements at the amplifier input.

ACPR = step(hACPR,txSignalBeforeAmplifier)

The

`comm.ACPR`

System object produces the following measurement data:ACPR = -71.4648 -55.5514 -55.9476 -71.3909

Obtain the ACPR power measurements at the amplifier output.

ACPRoutput = step(hACPRoutput,txSignalAfterAmplifier)

The

`comm.ACPR`

System object produces the following measurement data:ACPR = -42.2364 -27.2242 -27.0748 -42.5810

By default, the ACPR object measures power uses 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.

Enable the SegmentLength, OverlapPercentage, and WindowOption properties by entering the following at the MATLAB command line:

release(hACPRoutput) hACPRoutput.SpectralEstimation = 'Specify window parameters'

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).

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

hACPRoutput.SegmentLength = 1024; hACPRoutput.OverlapPercentage = 50; % Choosing a Chebyshev window enables a SidelobeAtten property % you can use to set the side lobe attenuation of the window. hACPRoutput.Window = 'Chebyshev'; hACPRoutput.SidelobeAttenuation = 200;

Call the step method to obtain the ACPR power measurements at the amplifier output.

ACPRoutput = step(hACPRoutput,txSignalAfterAmplifier)

The ACPR object produces the following measurement data:

ACPR = -44.9399 -30.7136 -30.7670 -44.4450

Some communications standards specify using max-hold spectrum
power measurements when computing ACPR values. Such calculations compare
the current power spectral density vector estimation to the previous
max-hold accumulated power spectral density vector estimation. When
obtaining max-hold measurements, 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 `step`

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.

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

for idx = 1:24 step(hACPRoutput,dataAfterAmplifier(:,idx)); end ACPRoutput = step(hACPRoutput,dataAfterAmplifier(:,25))

The ACPR object produces the following output data:

ACPR = -43.1123 -26.6964 -27.0009 -42.4803

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).

win = hamming(1024); [PSD1,F] = pwelch(txSignalBeforeAmplifier,win,50,1024,SampleRate,'centered'); [PSD2,F] = pwelch(txSignalAfterAmplifier,win,50,1024,SampleRate,'centered'); plot(F,10*log10(PSD1)) hold on grid on plot(F,10*log10(PSD2),'g') legend('Amplifier input', 'Amplifier output')