aaron_do wrote on Jan 21st, 2010, 4:58am:I ran an envelope following analysis on a MSK signal and it showed a peak voltage of 0.316V.
Since this is a constant envelope signal, I expect the power of the signal to be about 0.316^2/100 = 1mW.
However, when I plotted the PSD and integrate over the entire bandwidth, I get a power of about 1.7mW.
I can get almost 0dBm as an integration of psdbb().
So there is no problem regarding an implementation of psdbb() in Cadence ADE Post Processing.
In Agilent ADS(RFDE) Post Processing Environment, generally I use following three functions for evaluation of Channel Power.
http://edocs.soco.agilent.com/display/ads2009/spec+power%28%29http://edocs.soco.agilent.com/display/ads2009/channel+power+vi%28%29http://edocs.soco.agilent.com/display/ads2009/channel+power+vr%28%29http://edocs.soco.agilent.com/display/ads2009/peak+to+avg+pwr%28%29#peaktoavgpwr...In the following, I use "spec_power()" to evaluate ACPR.
http://www.designers-guide.org/Forum/YaBB.pl?num=1190971685/7#7Attached figure is an input MSK signal for DUT such as Power Amplifier.
Power evaluated as an integration of psdbb() is 0.97mWatt(=-0.15dBm).
So PAPR=0.15dB
I confirmed four windows, "Blackman", "Rectangular", "Hamming" and "Hanning".
There is no difference between them.
"test_aaron.ocn" Quote:ocnWaveformTool( 'wavescan )
awvSetOptionValue( 'displayGrids t )
awvSetOptionValue( "cursorPrecision" 9 )
awvSetOptionValue( "displayAxesBy125" t )
date = getCurrentTime()
M_PI = acos( -1.0 )
M_TWO_PI = 2.0 * acos( -1.0 )
j = complex( 0.0, 1.0 )
psf_dir = "~/AHO/simulation/test_ZigBee_RF_Signal/spectre/schematic/psf"
openResults( psf_dir )
Rload = 50.0 ; [Ohm]
tstart = 0.0
tstop = 0.3m
delta_f = 1.0/(tstop-tstart)
fn = 20M
binw = 0.01M
if( binw < delta_f then binw=delta_f )
num_bin = floor( binw/delta_f + 0.5 )
winsz = floor( log10(2*fn/(num_bin*delta_f)) / log10(2) + 0.5 )
winsz = 2 ** winsz
ndata = num_bin * winsz
win_name = "Blackman"
;win_name = "Rectangular"
;win_name = "Hamming"
;win_name = "Hanning"
fmin = -5M
fmax = 5M
; Calculated Power Spectral Density Parameters:
fprintf( stderr, "Tstart for Time Interval = %g[usec]\n", tstart/1.0u )
fprintf( stderr, "Tstop for Time Interval = %g[usec]\n", tstop/1.0u )
fprintf( stderr, "Nyquist half-bandwidth = %g[MHz]\n", fn/1.0M )
fprintf( stderr, "Frequency bin width = %g[MHz]\n", binw/1.0M )
fprintf( stderr, "Max. plotting frequency = %g[MHz]\n", fmax/1.0M )
fprintf( stderr, "Min. plotting frequency = %g[MHz]\n", fmin/1.0M )
fprintf( stderr, "Number of Samples = %d\n", ndata )
fprintf( stderr, "Window Name = %s\n", win_name )
fprintf( stderr, "Window Size = %d\n", winsz )
fprintf( stderr, "Number of Bins = %d\n", num_bin )
RFsig = v( "/RFsig", ?result "envlp_td" )
RFsig_1st_Env = harmonic( v( "/RFsig", ?result "envlp_fd" ), 1 )
Inst_Env_Pwr = mag(RFsig_1st_Env)**2 / (2*Rload)
RFsig_1st = psdbb( real(RFsig_1st_Env), imag(RFsig_1st_Env),
tstart, tstop, ndata,
?windowName win_name, ?windowSize winsz,
?detrending "None" )
RFsig_1st_PSD = RFsig_1st / (2*Rload)
wid = newWindow()
addTitle( strcat("Test of psdbb(), ", date) )
bid = currentSubwindow(1)
addSubwindowTitle( "RF Signal with Carrier" )
plot( RFsig, ?expr '( "RFsig" ) )
xLimit(list(0.0, 5u))
;awvSetXAxisLabel( wid, "time", ?subwindow bid )
awvSetYAxisLabel( wid, 1, "RFsig", ?subwindow bid )
addSubwindow()
bid = currentSubwindow(2)
addSubwindowTitle( "Isig and Qsig" )
plot( real(RFsig_1st_Env) ?expr '( "Isig" ) )
plot( imag(RFsig_1st_Env) ?expr '( "Qsig" ) )
xLimit(list(0.0, 5u))
awvSetYAxisLabel( wid, 1, "Isig , Qsig", ?subwindow bid )
addSubwindow()
bid = currentSubwindow(3)
addSubwindowTitle( "Envelope Power" )
plot( dBm(Inst_Env_Pwr) ?expr '( "Inst_Env_Pwr" ) )
xLimit(list(0.0, 5u))
awvSetYAxisLabel( wid, 1, "Envelope Power", ?subwindow bid )
addSubwindow()
bid = currentSubwindow(4)
addSubwindowTitle( "Power Spectrum Density" )
plot( dBm(RFsig_1st_PSD) ?expr '( "RFsig_1st_PSD" ) )
xLimit(list(fmin, fmax))
awvSetXAxisLabel( wid, "freq [Hz]", ?subwindow bid )
awvSetYAxisLabel( wid, 1, "PSD [dBm/Hz]", ?subwindow bid )
f1 = -fn
f2 = fn
Pwr = integ( RFsig_1st_PSD, f1, f2 )
fprintf( stderr, "Power = %.2fmWatt(=%.2fdBm)\n",Pwr/1m, dBm(Pwr) )
/*
\i load "test_aaron.ocn"
\e Tstart for Time Interval = 0[usec]
\e Tstop for Time Interval = 300[usec]
\e Nyquist half-bandwidth = 20[MHz]
\e Frequency bin width = 0.01[MHz]
\e Max. plotting frequency = 5[MHz]
\e Min. plotting frequency = -5[MHz]
\e Number of Samples = 12288
\e Window Name = Blackman
\e Window Size = 4096
\e Number of Bins = 3
\e Power = 0.97mWatt(=-0.15dBm)
*/