The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl
Measurements >> RF Measurements >> how to estimate the PSD of a complex signal in MATLAB
https://designers-guide.org/forum/YaBB.pl?num=1242749411

Message started by Mahyar on May 19th, 2009, 9:10am

Title: how to estimate the PSD of a complex signal in MATLAB
Post by Mahyar on May 19th, 2009, 9:10am

Hi
I have a complex bandlimited single sideband signal but I don't know how to estimate the PSD of a complex signal in MATLAB.
Thanks,
M

Title: Re:  how to estimate the PSD of a complex signal in MATLAB
Post by pancho_hideboo on May 22nd, 2009, 4:45am


Mahyar wrote on May 19th, 2009, 9:10am:
I have a complex bandlimited single sideband signal but I don't know how to estimate the PSD of a complex signal in MATLAB.
I don't know what you mean by "a complex bandlimited single sideband signal".

But if you mean complex envelope signal such as i[n]+j*q[n] , use fft() or fftshift() functions which are available as standard function of MATLAB.
Here you should apply some window function(e.g. Blackman, Kaiser, Hamming, Hanning, etc.) to i[n]+j*q[n].

See the following.
http://www.designers-guide.org/Forum/YaBB.pl?num=1216663909/4#4

Here I calculate spectrum of complex signal if_out=real(if_i_out[0])+j*real(if_q_out[0])
by using Agilent ADS post processing functions.
Spectrum is calculated as Out_Spectrum=dBm(fs(2*if_out,,,,,"Kaiser")).
"fs()" is a function for FFT in Agilent ADS post processing environment.
So if you use MATLAB, you should change "fs()" to "fft()".


Title: Re:  how to estimate the PSD of a complex signal in MATLAB
Post by thechopper on May 22nd, 2009, 5:37pm

Hi,,

There are several PSD estimators in Matlab, like Pburg, PMCONV, PMYULEAR and more.

One of those should work for your requirements.

Regards
Tosei

Title: Re:  how to estimate the PSD of a complex signal in MATLAB
Post by pancho_hideboo on May 22nd, 2009, 8:16pm

Mathematically PSD is a Spectrum of auto-correlation function.


HdrChopper wrote on May 22nd, 2009, 5:37pm:
There are several PSD estimators in Matlab, like Pburg, PMCONV, PMYULEAR and more.
These pmconv(), pbrug() and pyulear() require Signal Processing Toolbox.
These give true PSD which is a Spectrum of auto-correlation function.

Strictly speaking, abs(fft(x))**2 is not PSD, as you say.

However Spectrum of actual vector signal analyzer is simple fft(x) not a Spectrum of auto-correlation function, although I can do post processing to evaluate true PSD from {i[n]+j*q[n]}.
http://www.designers-guide.org/Forum/YaBB.pl?num=1195226387

Generally a simple fft(x) is enough useful.
http://en.wikipedia.org/wiki/Parseval%27s_theorem
http://en.wikipedia.org/wiki/Spectral_density

Title: Re:  how to estimate the PSD of a complex signal in MATLAB
Post by thechopper on May 23rd, 2009, 8:34pm

[quote author=pancho_hideboo link=1242749411/0#3

Generally a simple fft(x) is enough useful.
[/quote]

Hi Pancho,

I mostly agree with you. However if you are also processing noise applying just a simple fft(x) will not give you accurate results. It will work ok if your signal is deterministic though.

Tosei

Title: Re:  how to estimate the PSD of a complex signal in MATLAB
Post by pancho_hideboo on May 23rd, 2009, 11:32pm


HdrChopper wrote on May 23rd, 2009, 8:34pm:
However if you are also processing noise applying just a simple fft(x) will not give you accurate results.
It will work ok if your signal is deterministic though.
It is true theoretically.
But I don't think so from practical point of view.

A simple abs(fft(x))2 is a approximation of true PSD, here approximation point is lack of ensemble averaging.
I think a simple abs(fft(x))2 is enough useful even for random signal(stochastic signal).

I can get following well known PSD value in Transient Noise Analysis even with simple abs(fft(x))2.
PSD=k*T=-173.8[dBm/Hz], k=1.38*10-23[J/K], T=300[K]

In the following, band limited white gaussian noises are added in system and I evaluate ACPR by using simple abs(fft(x))2.
http://www.designers-guide.org/Forum/YaBB.pl?num=1190971685/7#7

Do you truely evaluate PSD based on a Spectrum of auto-correlation function for results of Transient Noise Analysis ?, although it might be dependent on purpose of PSD.
In audio signal analysis, PSD based on a Spectrum of auto-correlation function is used exclusively.

Even if we use Spectrum of auto-correlation function as PSD for practical finite length time sequence {x[n]}, it is also no more than approximation of true PSD.

Title: Re:  how to estimate the PSD of a complex signal in MATLAB
Post by RFICDUDE on May 25th, 2009, 7:01am

Pancho is correct.
A simple abs(FFT)^2 is the power spectrum of a particular realization of a signal. The FFT will yield an accurate estimate of ACPR and EVM even though the spectrum looks noisy.

The only reason a fft looks noisy is because
1. you are looking at a signal over several or many symbols with random phase
2. you are looking at signal where several independent symbols or orthogonal channels are added together (multichannel CDMA or OFDM)

PSD techniques average out the random variation to yield an estimate of what the so called "true" or average spectral density is for a given signal. If the signal is wide sense stationary, then the average PSD (using sliding window averages such as the periodogram or Welch method) are a good (to within a confidence level) estimate of the spectral occupancy of a given signal.

Personally, I like looking at averaged PSDs just because it is a little easier to compare differences between different signals. It is difficult to compare noisy looking spectrums even if the calculated numbers for ACPR and EVM are the same.

The Designer's Guide Community Forum » Powered by YaBB 2.2.2!
YaBB © 2000-2008. All Rights Reserved.