Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
NCTM or The Math Forum.


anyone
Posts:
16
Registered:
4/10/13


Re: How to estimate Impulse Response from a frequency domain dataset
Posted:
Apr 12, 2013 12:39 PM


On Fri, 12 Apr 2013 07:16:09 +0000, Giuseppe wrote:
> Through an old Spectrum Analyzer I have a frequency domain dataset > (amplitude in dB and phase in degrees). I would like to estimate Impulse > Response (IR). I must compare the obtained IR with the IR automatically > measured through a newer Spectrum Analyzer. I will manage a huge > dataset, moreover I know I have to apply a Kaiser Window somehow, so I > don't think that System Identification Toolbox can work out for me. > > My frequency domain dataset expands from 800 MHz to 3 GHz with a step of > 5.5 MHz (so I have 401 samples and my Nyquist frequency is 3 GHz). What
...and, your frequency bins (equivalently 'resolution', but not 'steps') are ~5MHz wide.
> should I do from 0 to 800 MHz, and when do I apply the Kaiser Window?
You have Source > System > Frequency Response. A Frequency Response is the convolution of the Source with (in effect) the Impulse Response of the System, in the frequency domain. A similar condition exists for the time domain. If your System were LTI (look it up), and if you could derive the timedomain representation of the Frequency Response, say through use of IFFT, and if you had the timedomain representation of the Source signal, you could attempt to derive the time domain Impulse Response through an inverse convolution.
Yet, you believe SIT won't help? > I slightly modified this code I found online, but doesn't seem to work > out for me (I previously modified the phase M(:,2) in radians): > > frf = M(:,1)+1i*M(:,2); %form the complex frequency response function > fn = 3000000000; %Nyquist frequency df = 5500000; % frequency spacing > freq = [800000000:df:fn]; % frequency vector frf2 = [0 frf(2:end).' 0 > frf(end:1:2)']; % form 2sided FRF irf = ifft(frf2); % calculate IRF > dt = 1./2./fn; % sampling interval time = 0:dt:801*dt; % vector of > sampling times plot(time,real(irf)); > xlabel('Time (s)'); > ylabel('IRF'); > > Any help would be greatly appreciated. Thank you for your patience.



