I am investigating the time-domain response of electromagnetic waves. The input signals are a chirp with linear frequency sweep 2.5 Hz->4.5 Hz -> 2.5 Hz and another signal which is abruptly turned off at 10 seconds. enter image description here enter image description here

Let's call this $x(t)$.

I then find the Fourier Transform of these signals.

enter image description here

I have the experimental values for the response of the chambers from 1 to 6 GHz as shown below.

enter image description here (Please ignore the GHz as the frequency units, it is indeed Hz because there is a 10^9 at the bottom.)

Subsequently, I have converted the frequencies of this response from GHz to Hz.

I then multiply this response to the $X(f)$ to obtain the frequency-domain response. Which looks like this.

enter image description here

Again this is all what we expect to see. The problem is that when I do an inverse Fourier transform on $Y(f)$ to obtain the time-domain response, I get something that doesn't make sense.

enter image description here

enter image description here

Aside from the scale not being correct, the shape of these responses don't make sense. I have to mention that my sampling rate was 200 Hz. Before multiplying $S_{21}(f)\times X(f)$, I artificially made vector of up to 200 Hz and then flipped and conjugated $S_{}21(f)$ to cover frequencies from 199 Hz to 193 Hz (or -1 Hz to -6 Hz). Is this correct?

Given that everything makes send up to inverse Fourier transform, what have I done wrong there? What are good names for "Up-off chirp signal" and "Up-down Chirp signal". I just used these term because I didn't know if there are standard names for them or not.

tc = 10;
fs = 200; 
f0 = 2.5;
f1 = 4.5;
t1 = 0:1/fs:tc;
t2 = tc:1/fs:2*tc;
t = [t1 t2];
pts = length(t);

x1 = chirp(t1,f0,tc,f1,"linear", -90);
x2 = zeros(1, length(x1));
x3 = -fliplr(x1);
x_on = [x1 x3];

N = 64040; % to match the 1600 points we have for response in 1-6 GHz
X_on=fft(x_on, N) * (1/N); %apply DFT on the signal
X_off=fft(x_off, N) * (1/N); %apply DFT on the signal
f = fs*(0:N - 1)/N;

G12 = [zeros(1, 320) resp_func(:, 2)' zeros(1, 60198) conj(fliplr(resp_func(:, 2)')) zeros(1, 320)];

Y2_on = X_on .* G12;
Y2_off = X_off.* G12;

y2_on = N * ifft(Y2_on);
y2_off = N * ifft(Y2_off);

plot(linspace(0,2*tc, length(y2_on)), y2_on)
hold off
title("continuous chirp")
plot(linspace(0,2*tc, length(y2_off)), y2_off)
title("pulsed chirp")
  • $\begingroup$ Mind posting your code? The DFT of the signals does not look correct. $\endgroup$
    – Envidia
    Commented Mar 30, 2023 at 3:10
  • $\begingroup$ I never really thought of an "up-down" chirp as a "linear chirp" When I think of a linear chirp, I think of this: $$ x(t) = e^{j \pi \beta t^2} \qquad \forall \ t \in \mathbb{R}$$ Now if that signal is abruptly turned off, I might model that as a rectangular window. $\endgroup$ Commented Mar 30, 2023 at 3:16
  • $\begingroup$ @Envidia I just did. $\endgroup$
    – Reza Afra
    Commented Mar 30, 2023 at 3:18
  • $\begingroup$ Robet, then what should we call it? $\endgroup$
    – Reza Afra
    Commented Mar 30, 2023 at 3:18
  • $\begingroup$ @RezaAfra We usually call up-down sweeps "triangular". $\endgroup$
    – Envidia
    Commented Mar 30, 2023 at 3:26

2 Answers 2


There are a few issues here

  1. Your sweep only covers a very narrow frequency band, however the inverse DFT takes all frequencies as inputs. Zeroing the other frequencies is equivalent to circular convolution with a $sin(x)/x$ in the time domain which will result in enormous amount of pre- and post-ringing in the impulse response
  2. Your transfer function looks very ragged. That means that either it has a LOT of degrees of freedom or its very noisy. If its the former, you need to make sure that your impulse response has enough samples, otherwise you will get circular time domain aliasing.
  3. Your complex conjugate padding of the spectrum is wrong and so the resulting impulse response ifft(G12) will be complex. You want one more sample of padding in the center and one less at the end because of DC and Nyquist (Which don't have conjugates).

In order to debug this I would start with a much simpler system. Try a wire first, than maybe a simple lowpass or peaking filter. Once that's all looks good you can move on to real world data.


For the power spectra of the chirps, you should be getting something that looks like this: enter image description here The domain of the DFT always goes from $\frac{-f_s}{2}$ to $\frac{f_s}{2}$, so you can see here that you are oversampling by a factor of more than 20. To illustrate the the spectrum better, I will zoom in: enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.