"cfx" <u.t.o@wanadoo.fr> wrote in message
news:bhvepg$juu$1@news-sop.inria.fr...
>
> "Rune Allnor" <allnor@tele.ntnu.no> a �crit dans le message de news:
> f56893ae.0308191106.2b3944fd@posting.google.com...
> > OK. You are applying an all-pass filter to your signal in frequency
> domain.
> > Now, I can't see the relation between the 512 complex samples of the
> > transfer function and the block size of 1024. Is the transfer function
> > specified in frequency domain? If so, what do you do with the frequency
> bins
> > between the Nyquist frequency and the sampling frequency?
>
> The sampling rate is equal to 44100, the FFTSIZE to 1024, and my fft
> function
> return FFTSIZE/2 complex samples, with each corresponding to a frequency
> component
> from SAMPLINGRATE/FFTSIZE to SAMPLINGRATE/2.
>
>
>
> >
> > Your problem appears to be how to patch blocks in time domain,
considering
> > that each sample is represented in two blocks...
> >
>
> >
> > I think it should be possible to implement a filter this way. You would
> > probably need to pay some attention to quite a few details, though.
> >
> > Having said that, my immediate response (provided I understand your
> problem
> > correctly) is that you may want to consider a time-domain implementation
> > of your all-pass filter. I don't know much about such implementations,
but
> > there may be others here who can help you with the details.
>
> I was looking for a such temporal method, but I haven't found a
> representation
> of an all-pass such that this one ( e^(j*2*pi*g(Fn)) with Fn =
> n*SAMPLINGRATE / FFTSIZE,
> and g a fnction of Fn) in the time domain (so if any one have one ;)).
>
> I will try to apply the Allpass filter in the frequency domain without
> pre-applying a window on the
> time domain samples, and apply the window after the ifft and overlap-add
the
> blocks.
Charles-Felix,
Without analyzing everything you're doing:
If you have a finite-length frequency domain function then you can always
ifft that function to get a FIR structure. Now, generally you want the
temporal FIR structure to be purely real so:
- If the frequency domain function is a transform of a real time function
then all you need to do is make sure that you're including all of the parts
of the frequency domain function in the proper order.
- If the frequency domain function is *not* a transform of a real time
function then you will get a complex-valued time function resulting from the
processing in any form. That's probably not what you want.
This suggests that you can inverse transform the filter and apply it
continuously in the time domain - but perhaps with less compute efficiency.
Otherwise, the comments from Don and Jerry about not pre- windowing in an
overlap-save method apply.
Fred
Reply by Jerry Avins●August 20, 20032003-08-20
cfx wrote:
>
> "Donald Reay" <dsr@cee.hw.ac.uk> a �crit dans le message de news:
> 8bc732eb.0308191143.75b20bdd@posting.google.com...
>
> > If I understand correctly, the original poster is trying to implement
> > processing of a time-domain signal in the frequency-domain using the
> > well-known overlap-add method. If that is so then he should not apply
> > a window to the blocks of time-domain samples (other than the
> > rectangular window implicit in taking a block of samples.)
>
> If I do not apply the window to the signal, the FFT will
> damage the signal on the side of the block, or maybe there
> a method for diminishing these effects.
> I will try to use the overlap-add method by applying the window
> after the ifft, and see the results...
> Thanks,
> Charles-Felix.
>
> >
> > Donald
What you call damage is artifacts caused by discontinuities at the edges
of the blocks. I think that what you want to do amounts to fast
convolution, and the prescribed overlap eliminates all edge effects but
the first and last. You could treat those with half windows, but with
little discernible benefit.
Jerry
--
Engineering is the art of making what you want from things you can get.
�����������������������������������������������������������������������
Reply by Donald Reay●August 20, 20032003-08-20
"cfx" <u.t.o@wanadoo.fr> wrote in message news:<bhvd6b$ins$1@news-sop.inria.fr>...
> "Donald Reay" <dsr@cee.hw.ac.uk> a �crit dans le message de news:
> 8bc732eb.0308191143.75b20bdd@posting.google.com...
>
> > If I understand correctly, the original poster is trying to implement
> > processing of a time-domain signal in the frequency-domain using the
> > well-known overlap-add method. If that is so then he should not apply
> > a window to the blocks of time-domain samples (other than the
> > rectangular window implicit in taking a block of samples.)
>
> If I do not apply the window to the signal, the FFT will
> damage the signal on the side of the block, or maybe there
> a method for diminishing these effects.
> I will try to use the overlap-add method by applying the window
> after the ifft, and see the results...
> Thanks,
> Charles-Felix.
>
> >
> > Donald
Again assuming that I understand correctly what you are trying to do,
I'd comment that the overlap-add method of fast convolution doesn't
involve windows. I would argue that the FFT doesn't damage a signal.
The FFT is a transformation of a sequence of time domain samples into
an alternative, and in terms of information equivalent, sequence of
frequency domain samples.
What I understand you to be doing is
Take a block of L time-domain samples, zero-pad to 2L samples, take
their 2L point FFT, process them in the frequency domain by point by
point multiplication (2L multiplications), take the IFFT of this
result and overlap-add L of the 2L sample result with L samples of the
previous result to obtain a block of L time-domain output samples.
Repeat (saving the un-overlapped L sample part of the most recently
calculated IFFT result.)
No windowing involved.
For this to 'work', there are limitations on the nature of the point
by point multiplication you carry out. For example, you can't
implement a brick wall low pass filter by multiplying 'low frequency'
frequency domain samples by 1 and 'high frequency' frequency domain
samples by 0. The set of frequency domain multiplication coefficients
you use must correspond to a time-limited (to L samples) impulse
response. This may be the aspect that you should be investigating.
Coming up with the multiplication coefficients that you use may
involve windowing of an ideal time-domain impulse response. In these
terms, it may be that you're going to have to accept less than ideal
all-pass filter performance if L is finite.
HTH
Donald
Reply by cfx●August 20, 20032003-08-20
"Rune Allnor" <allnor@tele.ntnu.no> a �crit dans le message de news:
f56893ae.0308191106.2b3944fd@posting.google.com...
> OK. You are applying an all-pass filter to your signal in frequency
domain.
> Now, I can't see the relation between the 512 complex samples of the
> transfer function and the block size of 1024. Is the transfer function
> specified in frequency domain? If so, what do you do with the frequency
bins
> between the Nyquist frequency and the sampling frequency?
The sampling rate is equal to 44100, the FFTSIZE to 1024, and my fft
function
return FFTSIZE/2 complex samples, with each corresponding to a frequency
component
from SAMPLINGRATE/FFTSIZE to SAMPLINGRATE/2.
>
> Your problem appears to be how to patch blocks in time domain, considering
> that each sample is represented in two blocks...
>
>
> I think it should be possible to implement a filter this way. You would
> probably need to pay some attention to quite a few details, though.
>
> Having said that, my immediate response (provided I understand your
problem
> correctly) is that you may want to consider a time-domain implementation
> of your all-pass filter. I don't know much about such implementations, but
> there may be others here who can help you with the details.
I was looking for a such temporal method, but I haven't found a
representation
of an all-pass such that this one ( e^(j*2*pi*g(Fn)) with Fn =
n*SAMPLINGRATE / FFTSIZE,
and g a fnction of Fn) in the time domain (so if any one have one ;)).
I will try to apply the Allpass filter in the frequency domain without
pre-applying a window on the
time domain samples, and apply the window after the ifft and overlap-add the
blocks.
> Rune
Thanks,
Charles-Felix
Reply by cfx●August 20, 20032003-08-20
"Donald Reay" <dsr@cee.hw.ac.uk> a �crit dans le message de news:
8bc732eb.0308191143.75b20bdd@posting.google.com...
> If I understand correctly, the original poster is trying to implement
> processing of a time-domain signal in the frequency-domain using the
> well-known overlap-add method. If that is so then he should not apply
> a window to the blocks of time-domain samples (other than the
> rectangular window implicit in taking a block of samples.)
If I do not apply the window to the signal, the FFT will
damage the signal on the side of the block, or maybe there
a method for diminishing these effects.
I will try to use the overlap-add method by applying the window
after the ifft, and see the results...
Thanks,
Charles-Felix.
>
> Donald
Reply by Donald Reay●August 19, 20032003-08-19
allnor@tele.ntnu.no (Rune Allnor) wrote in message news:<f56893ae.0308190512.56cff59a@posting.google.com>...
> "cfx" <u.t.o@wanadoo.fr> wrote in message news:<bhstp4$pje$1@news-sop.inria.fr>...
> > Hi, I have a little problem ...
> > I am working with audio datas,
> > I get the datas block by block.
> > I have to process the datas in the fourier domain,
> > for that I windowing a signal block and then I compute
> > the fft, process the block in the fourier domain, compute
> > the ifft and overlap with a previous processed block.
> > The problem is that the processing in the fourier domain
> > modify the signal phase for each frequency component.
> > That implie a sliding of the window
> > and then when I overlap the blocks, the sum is not 1.
> > So, the question is :
> > does anyone have a solution to this problem ?
>
> It's hard to suggest a solution without a better description of the
> data, what processing you do, how you do the processing, and what result
> you expect.
>
> Having said that, windowing could do some "damage" to norm of the
> data vector. If you have a data vector that is normalized to unit
> norm and use a non-rectangular window, the windowed vector need not
> be of unit norm.
>
> Rune
If I understand correctly, the original poster is trying to implement
processing of a time-domain signal in the frequency-domain using the
well-known overlap-add method. If that is so then he should not apply
a window to the blocks of time-domain samples (other than the
rectangular window implicit in taking a block of samples.)
Donald
Reply by Rune Allnor●August 19, 20032003-08-19
"cfx" <u.t.o@wanadoo.fr> wrote in message news:<bhtaol$53a$1@news-sop.inria.fr>...
> First, thanks for your attention.
>
> The goal of the processus is to apply a little decorrelation to a source
> audio signal in real time.
> And this by applying a little phasing on each signal frequency component.
>
> We can considere that I have a some audio data and I can get these data only
> by blocks of 1024 samples.
> When I get a block, I apply an Hanning window to the block and compute the
> fft (fftsize == 1024).
> In the fourier domain I want to modifie the phase of each frequency
> component.
> For that I dispose of a transfert function (an array of 512 complexes) that
> for doing that, each complex, of the
> transfert function, associated to a frequency component had a unit modul and
> an argument between
> 0 and pi/3. Then I multiply the fft of my block with the transfert function
> and compute the ifft.
OK. You are applying an all-pass filter to your signal in frequency domain.
Now, I can't see the relation between the 512 complex samples of the
transfer function and the block size of 1024. Is the transfer function
specified in frequency domain? If so, what do you do with the frequency bins
between the Nyquist frequency and the sampling frequency?
> If the block received is the block [n,n+1024-1] ('n' is a arbitrary absolute
> sample indices), I dispose of a previous windowed block [n-1024,n-1], I
> overlap these two blocks such that the data [n-512,n+512-1] are valid
> processed
> data if there is no modification of the signal phase in the processing, but
> this is not the case.
> My interpretetion of this phenomena is a sliding of the window due to the
> frequency phasing apply by the processus.
Your problem appears to be how to patch blocks in time domain, considering
that each sample is represented in two blocks...
> But now, I am not an expert in Signal Processing, and it is possible that I
> made a great mistake in my raisonment, and maybe it is not possible to do
> what I want by this way.
I think it should be possible to implement a filter this way. You would
probably need to pay some attention to quite a few details, though.
Having said that, my immediate response (provided I understand your problem
correctly) is that you may want to consider a time-domain implementation
of your all-pass filter. I don't know much about such implementations, but
there may be others here who can help you with the details.
If that's not an option, you may try to compute the time series as some
sort of weighted average between blocks. Assume you want to reconstruct
the samples [n,n+512-1]. The deconvolved data would come from the trailing
half of the block [n-512,n+512-1] (call these samples a(m), m=0,...,511)
and the leading half of the block [n, n+1024-1] (call these samples
b(m), m=0,...,511).
The resulting segment of the time series x(n) could then be computed
with the naive constant weighting
x(n+m) = 1/2(a(m)+b(m)) m=0,...,511
or possibly a more elaborate ramp weighting
x(n+m) = (511-m)/511*a(m)+ m/511*b(m) m=0,...,511.
In any case, there will be differences between the patched data from
such a block-wise approach, and data comupted either in time domain or
with other block sizes.
Rune
Reply by cfx●August 19, 20032003-08-19
First, thanks for your attention.
The goal of the processus is to apply a little decorrelation to a source
audio signal in real time.
And this by applying a little phasing on each signal frequency component.
We can considere that I have a some audio data and I can get these data only
by blocks of 1024 samples.
When I get a block, I apply an Hanning window to the block and compute the
fft (fftsize == 1024).
In the fourier domain I want to modifie the phase of each frequency
component.
For that I dispose of a transfert function (an array of 512 complexes) that
for doing that, each complex, of the
transfert function, associated to a frequency component had a unit modul and
an argument between
0 and pi/3. Then I multiply the fft of my block with the transfert function
and compute the ifft.
If the block received is the block [n,n+1024-1] ('n' is a arbitrary absolute
sample indices), I dispose of a previous windowed block [n-1024,n-1], I
overlap these two blocks such that the data [n-512,n+512-1] are valid
processed
data if there is no modification of the signal phase in the processing, but
this is not the case.
My interpretetion of this phenomena is a sliding of the window due to the
frequency phasing apply by the processus.
But now, I am not an expert in Signal Processing, and it is possible that I
made a great mistake in my raisonment, and maybe it is not possible to do
what I want by this way.
Thanks,
-cf.
Reply by Rune Allnor●August 19, 20032003-08-19
"cfx" <u.t.o@wanadoo.fr> wrote in message news:<bhstp4$pje$1@news-sop.inria.fr>...
> Hi, I have a little problem ...
> I am working with audio datas,
> I get the datas block by block.
> I have to process the datas in the fourier domain,
> for that I windowing a signal block and then I compute
> the fft, process the block in the fourier domain, compute
> the ifft and overlap with a previous processed block.
> The problem is that the processing in the fourier domain
> modify the signal phase for each frequency component.
> That implie a sliding of the window
> and then when I overlap the blocks, the sum is not 1.
> So, the question is :
> does anyone have a solution to this problem ?
It's hard to suggest a solution without a better description of the
data, what processing you do, how you do the processing, and what result
you expect.
Having said that, windowing could do some "damage" to norm of the
data vector. If you have a data vector that is normalized to unit
norm and use a non-rectangular window, the windowed vector need not
be of unit norm.
Rune
Reply by Atmapuri●August 19, 20032003-08-19
Hi!
The sum is not one, the phase get shifted and you
hear woble... There is no real solution, just
different patching aproaches.. Try to fit the phase
Use a cosine (hanning window). Overlapp by 50%...
--
Regards!
Atmapuri
www.dewresearch.com
"cfx" <u.t.o@wanadoo.fr> wrote in message
news:bhstp4$pje$1@news-sop.inria.fr...
> Hi, I have a little problem ...
> I am working with audio datas,
> I get the datas block by block.
> I have to process the datas in the fourier domain,
> for that I windowing a signal block and then I compute
> the fft, process the block in the fourier domain, compute
> the ifft and overlap with a previous processed block.
> The problem is that the processing in the fourier domain
> modify the signal phase for each frequency component.
> That implie a sliding of the window
> and then when I overlap the blocks, the sum is not 1.
> So, the question is :
> does anyone have a solution to this problem ?
>
> --cf.
>
> ps: please excuse my english, I'm french.
>
>