# How to compute the impulse response from incomplete frequency response data?

I need to compute the impulse response of a system, but I only have access to the frequency response data.

This data contains the output magnitude of the system (for a fixed input amplitude) at frequencies between 10Hz and 400Hz, sampled at each 5Hz (10, 15, 20, ..., 395, 400) with a 1000Hz sampling frequency. The magnitude past the area of interest tends towards zero, but was not measured directly.

I dont have phase information (or a way to obtain it), but I only care about magnitude information.

Here's a quick graph of the data I have:

(Amplitude units are undefined, but aren't meaningful since an arbitrary scaling factor is added during processing steps.)

How can I obtain an impulse response of the system with incomplete frequency response data?

I'm thinking of using the IFFT function in MATLAB, but I am unsure of how it will interact with the gaps and the missing information past 400Hz.

I assume I could pad the data with zeroes, but up to how many?

I can also obtain more data to "fill in" make the gaps smaller, but there will always be some since I could also sample at non-integer frequencies.

EDIT for extra context: I am trying to implement a parallel filter design to equalize the magnitude response of my system, based on the works of Balasz Bank. The author provides MATLAB code to determine the parameters of the system, but said code requires the impulse response of the system as input, not the frequency response.

The code takes the impulse response as input, converts it to minimum-phase and then computes the filter parameters using a least squares method. (The actual code is in the roomcomp.m and parfiltid.m files)

The end goal of the equalizer is to get a flat frequency response for the amplitude (In this case, amplify 0-50Hz, attenuate 50-200Hz and amplify 200+Hz). The system takes in a 1kHz signal as input, equalizes it and outputs the result in real time at 1kHz.

I'd like to take phase into account eventually, but due to time constraints, for now any solution that results in decent equalization works.

• Without phase it is impossible, for solving example it is impossible to predict any delay of the system. – fibonatic Jul 24 '18 at 17:54
• @fibonatic Can't I just set the phase to 0? – JS Lavertu Jul 24 '18 at 19:14
• Without phase, there isn’t a unique impulse response. If any impulse that satisfies the frequency response is ok, then you just need to pick one. You need to bring more physics to your problem to have a good result. Signal Processing isn’t magic – user28715 Jul 24 '18 at 19:57
• @StanleyPawlukiewicz Should I reformulate my question? I really don't need the "correct" impulse response, as long as I can get something. I'm quite aware that DSP isn't magic despite it feeling like wizardry sometimes haha! – JS Lavertu Jul 24 '18 at 20:05
• Just don’t tell the suckers. Yes, please do reformulate your question and also please explain why “something” is sufficient. There may be better somethings than other somethings. You might want to look at the non uniform DFT for part of your problem.Transforms work both ways – user28715 Jul 24 '18 at 20:18

## 2 Answers

Phase alone or magnitude alone reconstructions of the complete frequency response (and therefore the impulse response) is claimed in IEEE papers of Monson Hayes and Alan Oppenheim such as this https://www.researchgate.net/publication/3176816_Signal_Reconstruction_from_Phase_or_Magnitude)

They are specifically dealing with real systems whose Fourier transforms have Hermitian symmetry (redundancy), therefore half of the information (phase or magnitude) in principle should be enough to define the whole system. Yet the procedure is not very simple, iterative and requires some mature DSP level.

Check it out. It may help you.

Well, you can just stuff the missing bins with zeros, apply a minimum phase and then do an inverse FFT. That should get you something that's close enough for your purpose