From: robert bristow-johnson on
On Jul 8, 3:11 pm, Parlous <parlous2...(a)gmail.com> wrote:
> Thanks for the suggestions. Would it be possible to figure out the
> phase and amplitude without having to use each of the time-domain or
> FFT values? I know this is impossible with just one complex bin (both
> real and imaginary values at a bin). I tried to see what would happen
> if you watched one bin as one went through each amplitude and phase
> combination and it is a wave with increasing amplitude - not a 1 to 1
> relationship for amplitude/phase combination. It would be ideal if I
> could figure this out with only a subset of the FFT values. It sounds
> strange, but I won't have access to any time-domain data - only FFT.
> Anymore ideas? Thanks again...

i am changing your "x" to "t" (as a better choice of symbol). and
your "F" to "f0", which is a known number. and i am assigning 44100
to "Fs".

correlating with

exp((-j*2*pi*f0/Fs)*t)

is the same as convolving with

exp((+j*2*pi*f0/Fs)*t)

since the convolving by exp((+j*2*pi*f0/Fs)*t) in the time-domain is
the same as multiplying by delta(f-f0/Fs) in the frequency domain,
then you *can* do this in the frequency domain by simply sampling the
*proper* spectrum at f0/Fs. if that lies between FFT bins, you might
have to do some interpolation in the frequency domain.

but the first thing you need to worry about is the spectral leakage
caused by your nasty rectangular window. you need to window this
better before you FFT.

r b-j
From: Clay on
On Jul 8, 3:18 pm, Parlous <parlous2...(a)gmail.com> wrote:
> I think I should clarify my last post and overall problem. I actually
> only have access to a few random bins, I don't even have the complete
> FFT. I do have both the real and imaginary components to these random
> bins. If the bins are non-zero, I will know the frequency that
> generates them. I'd like to reconstruct the rest of the FFT. I'm
> considering just extrapolation. However, if I could ascertain the
> amplitude and phase of this known frequency, I could generate the rest
> of the FFT bins. Its not possible to do so with one bin but what about
> others? Would you need the entire FFT?

Few random bins? I would at least hope you have the ones nearest your
frequency of interest. Can you change your FFT length so as to make
your frequency of interest fall on or very close to a bin? Sounds like
you have an ill defined problem.

Clay
From: Parlous on
I think I have an answer, at least a preliminary one. Lets iterate
through the combinations of amplitude and phase, within numerical
abilities. Lets number each combination 1, 2, 3, ... such that 1 might
be (0.00001, -pi), 2 be (0.00002, -pi + pi/100000), and etc,
proceeding in a linearly increasing fashion. For each combination, we
generate a time-domain wave at some known frequency and run the FFT on
it (rectangular window). Now suppose we only record the values of one
bin. For my previous examples of 82.407, bins 4, 5 or 6 would be fine
as they have a lot of "energy". Any one of them will be fine. Now,
what would you see? If you looked at just the real or just the
imaginary, you would see another wave that grows linearly, as the
combinations do. If you had to use just that one wave to determine
what combination generated it you couldn't do it. This is because it
would fail the horizontal line test (not injective). However, if you
look at both domains (real & imag) for each combination, you would see
the same kind of wave pattern, just "out of phase" (as you typically
see) but there is an added advantage. If you consider both domains'
values as a "key" to the combination that generated them, I **think**
they're one-to-one. Think about it - if they're both the same
frequency (NOT the frequency I choose btw) and increasing by the same
amount linear amount, but one is "lagging" behind the other, than
they're constantly going to be different values when one considers
BOTH their values simultaneously as a "key" (like a key in a
database).

Does this make sense? I can provide some source code if need be. If
this is true, then I should be able to come up with some formulas to
describe this, or at least model it, for my application :). Thank you
again for your wonderful suggestions...
From: Parlous on
oops, I incremented the combinations wrong in my example. It should be
something like this:

Combination (Amp, Phase)
1 (0.01, -pi)
2 (0.01, -pi + phaseIncrement)
3 (0.01, -pi + 2*phaseIncrement)
4 (0.01, -pi + 3*phaseIncrement)
.....
N (0.01, -pi + K*phaseIncrement) << here -pi +
K*phaseIncrement = pi
N + 1 (0.02, -pi)
N + 2 (0.02, -pi + phaseIncrement)
.....
ad infinitum...
From: Parlous on
This posses another unusual problem - how does one choose the
appropriate increment for the amplitude and phase? One can think of
each like a "counter", just like digits in a counting system.
Theoretically, considering these particular "counters" are derived
from a continuous domain, one has to wonder how can to seemingly
infinitely dense segments [0, 1] and [-pi, pi] could be counters? Its
like infinity times infinity number of combinations!! Well, the
computer is obviously limited but I don't think that I need to even go
that far, to push the limits of floating-point numbers. From my MATLAB
experiments an amplitude increment of 0.0001 and phase increment of
2*pi/100 are just fine. Its an interesting theoretical question though
- would the real and imaginary values considered as one "value" or
"key" together be unique for the possible amplitude and phase
combinations, if one made an "ordered set" of such combinations?
Again, this is all assume ONE generated, known frequency into the FFT.