Peak to Average Power Ratio and CCDF
Peak to Average Power Ratio (PAPR) is often used to characterize digitally modulated signals. One example application is setting the level of the signal in a digital modulator. Knowing PAPR allows setting the average power to a level that is just low enough to minimize clipping.
However, for a random signal, PAPR is a statistical quantity. We have to ask, what is the probability of a given peak power? Then we can decide where to set the average power level such that clipping occurs at an acceptably low rate.
Let Pratio = the ratio of the instantaneous power of a sample to the average power of the signal. The probability that Pratio exceeds a given value is called the Complementary Cumulative Distribution Function (CCDF). Given a signal vector x, the CCDF y is computed as follows:
papr = 0:.25:12; % dB vector of PAPR values P = x.^2; % W power of each sample of vector x Pratio = P/mean(P); % power/average power PdB = 10*log10(Pratio); for i = 1:length(papr) y(i) = length(find(PdB >= papr(i)))/N; % # of samples exceeding papr(i) endIn the attached m-file, we calculate the CCDF for a sine wave and for Gaussian noise. Since the sine wave is periodic, we need only use a single period. For the noise, we need a lot of samples to find the low probability amplitudes: using 100,000 samples yields 7 samples with 10log10(Pratio) > 12 dB.
The figure below shows CCDF for a sine wave and for 100,000 samples of Gaussian noise. The PAPR of the sine wave is the maximum value vs. the x-axis. This is of course 20*log10[Vpeak/Vrms] = 20*log10[sqrt(2)] = 3.01 dB.
CCDF of a sine wave and CCDF of AWGN (100,000 samples).
“Characterizing Digitally Modulated Signals with CCDF Curves”, Agilent Technologies, 2000.
%PAPR_demo.m 4/1/16 nr % PAPR = peak to average power ratio % Complimentary Cumulative Distribution Function (CCDF) of real signal x. % x real signal vector % papr vector of papr values % y CCDF of x vs. papr papr = 0:.25:12; % dB vector of PAPR values % PAPR of sine wave f = 1; % Hz sine frequency Ts = 1/1000; % s sample time N= 1000; % number of samples n= 0:N-1; % time index t= n*Ts; % s x = sin(2*pi*f*t); % signal = one cycle of a sine wave P = x.^2; % W power of each sample of vector x Pratio = P/mean(P); % power/average power PdB = 10*log10(Pratio); for i = 1:length(papr) y(i) = length(find(PdB >= papr(i)))/N; % # of samples exceeding papr(i) end % PAPR of AWGN randn('state',0); % reset random number generator M = 100000; % number of samples x_gauss = randn(M,1); % signal = AWGN Pratio = x_gauss.^2; % power/average power (average power = 1) PdB = 10*log10(Pratio); for i = 1:length(papr) y_gauss(i) = length(find(PdB > papr(i)))/M; end semilogy(papr,y,papr,y_gauss),grid xlabel('dB above average power'),ylabel('probability') title('CCDF'),axis([0 12 1e-5 1]) text(2.8,.25,'sine'),text(7.2,.025,'AWGN')5/14/16 revised 6/25/22
Very helpful Neil. Where is the "give a beer" button, I would like to pass one to you!
Thanks. Nice to see an old post get noticed!
To post reply to a comment, click on the 'reply' button attached to each comment. To post a new comment (not a reply to a comment) check out the 'Write a Comment' tab at the top of the comments.
Please login (on the right) if you already have an account on this platform.
Otherwise, please use this form to register (free) an join one of the largest online community for Electrical/Embedded/DSP/FPGA/ML engineers: