# Windowing in the Frequency Domain

Started by April 4, 2009
```Hello there,
I'm currently working on a pitch identification program in MATLAB.  It
uses the Sliding DFT so I need to apply windowing functions in the
frequency domain.

I understand this is done by convolution and have managed to find the
kernel for the von Hann window: [-0.25 0.5 -0.25], but am struggling to
find a concrete answer for other windows like the Hamming and Blackman
window.
Anyone know?

Also, am I right in thinking I should be using the circular convolution
(cconv) function to do this in MATLAB?  And why doesn't cconv(A,[-0.25 0.5
-0.25]) give a result that's the same size as A?  I can't understand where
the extra elements come from.

```
```On 4 Apr, 18:28, "OldUncleSilas" <gibbering.babo...@gmail.com> wrote:
> Hello there,
> I'm currently working on a pitch identification program in MATLAB. &#2013266080;It
> uses the Sliding DFT so I need to apply windowing functions in the
> frequency domain.

Ouch... I am not aware of a single application where
windows are applied in frequency domain...

> I understand this is done by convolution and have managed to find the
> kernel for the von Hann window: [-0.25 0.5 -0.25], but am struggling to
> find a concrete answer for other windows like the Hamming and Blackman
> window.
> Anyone know?

The window functions - along with the common use - are listed
in most textbooks on DSP.

> Also, am I right in thinking I should be using the circular convolution
> (cconv) function to do this in MATLAB?

If you stick with a frequency-domain implementation then
yes, circular convolution is what you want. But then, the
approach of doing the computations in frequency domain
is wrong.

In the context of DSP circular convolution is almost never
what you want. There might be some exceptions, where
circular convolution is used in the context of cyclic
(circular?) codes, but that's the exception. Once the term
comes up, stand back, take a deep breath and think very
carefully about what you are doing. Chances are that you
are doing something wrong.

>&#2013266080;And why doesn't cconv(A,[-0.25 0.5
> -0.25]) give a result that's the same size as A? &#2013266080;I can't understand where
> the extra elements come from.

It seems you are in above your head, as this is covered
in the first month (maybe week) of DSP 101. It will save
you a lot of effort (not to mention potential abuse here)
if you find a good intro text on DSP (Rick Lyons'
"Understanding DSP" comes to mind) and read.

Rune
```
```On 4 Apr, 18:28, "OldUncleSilas" <gibbering.babo...@gmail.com> wrote:
> Hello there,
> I'm currently working on a pitch identification program in MATLAB. =A0It
> uses the Sliding DFT so I need to apply windowing functions in the
> frequency domain.

Ouch... I am not aware of a single application where
windows are applied in frequency domain...

> I understand this is done by convolution and have managed to find the
> kernel for the von Hann window: [-0.25 0.5 -0.25], but am struggling to
> find a concrete answer for other windows like the Hamming and Blackman
> window.
> Anyone know?

The window functions - along with the common use - are listed
in most textbooks on DSP.

> Also, am I right in thinking I should be using the circular convolution
> (cconv) function to do this in MATLAB?

If you stick with a frequency-domain implementation then
yes, circular convolution is what you want. But then, the
approach of doing the computations in frequency domain
is wrong.

In the context of DSP circular convolution is almost never
what you want. There might be some exceptions, where
circular convolution is used in the context of cyclic
(circular?) codes, but that's the exception. Once the term
comes up, stand back, take a deep breath and think very
carefully about what you are doing. Chances are that you
are doing something wrong.

>=A0And why doesn't cconv(A,[-0.25 0.5
> -0.25]) give a result that's the same size as A? =A0I can't understand wh=
ere
> the extra elements come from.

It seems you are in above your head, as this is covered
in the first month (maybe week) of DSP 101. It will save
you a lot of effort (not to mention potential abuse here)
if you find a good intro text on DSP (Rick Lyons'
"Understanding DSP" comes to mind) and read.

Rune
```
```On 4 Apr, 18:28, "OldUncleSilas" <gibbering.babo...@gmail.com> wrote:
> Hello there,
> I'm currently working on a pitch identification program in MATLAB. &#2013266080;It
> uses the Sliding DFT so I need to apply windowing functions in the
> frequency domain.

Ouch... I am not aware of a single application where
windows are applied in frequency domain...

> I understand this is done by convolution and have managed to find the
> kernel for the von Hann window: [-0.25 0.5 -0.25], but am struggling to
> find a concrete answer for other windows like the Hamming and Blackman
> window.
> Anyone know?

The window functions - along with the common use - are listed
in most textbooks on DSP.

> Also, am I right in thinking I should be using the circular convolution
> (cconv) function to do this in MATLAB?

If you stick with a frequency-domain implementation then
yes, circular convolution is what you want. But then, the
approach of doing the computations in frequency domain
is wrong.

In the context of DSP circular convolution is almost never
what you want. There might be some exceptions, where
circular convolution is used in the context of cyclic
(circular?) codes, but that's the exception. Once the term
comes up, stand back, take a deep breath and think very
carefully about what you are doing. Chances are that you
are doing something wrong.

>&#2013266080;And why doesn't cconv(A,[-0.25 0.5
> -0.25]) give a result that's the same size as A? &#2013266080;I can't understand where
> the extra elements come from.

It seems you are in above your head, as this is covered
in the first month (maybe week) of DSP 101. It will save
you a lot of effort (not to mention potential abuse here)
if you find a good intro text on DSP (Rick Lyons'
"Understanding DSP" comes to mind) and read.

Rune
```
```Hello, thanks for the help

>On 4 Apr, 18:28, "OldUncleSilas" <gibbering.babo...@gmail.com> wrote:
>> Hello there,
>> I'm currently working on a pitch identification program in MATLAB.
=A0It
>> uses the Sliding DFT so I need to apply windowing functions in the
>> frequency domain.
>
>Ouch... I am not aware of a single application where
>windows are applied in frequency domain...

It is impossible to window in the time domain when using the SDFT, so I
must do that process in the frequency domain.

>> I understand this is done by convolution and have managed to find the
>> kernel for the von Hann window: [-0.25 0.5 -0.25], but am struggling
to
>> find a concrete answer for other windows like the Hamming and Blackman
>> window.
>> Anyone know?
>
>The window functions - along with the common use - are listed
>in most textbooks on DSP.

Most sources list the time domain functions.  I don't know how to
translate them to the convolution kernels I need.  So far I have found two
sources that give them but they don't seem to agree.  Maybe I'm reading
them wrong.

>> Also, am I right in thinking I should be using the circular
convolution
>> (cconv) function to do this in MATLAB?
>
>If you stick with a frequency-domain implementation then
>yes, circular convolution is what you want. But then, the
>approach of doing the computations in frequency domain
>is wrong.
>
>In the context of DSP circular convolution is almost never
>what you want. There might be some exceptions, where
>circular convolution is used in the context of cyclic
>(circular?) codes, but that's the exception. Once the term
>comes up, stand back, take a deep breath and think very
>carefully about what you are doing. Chances are that you
>are doing something wrong.
>
>>=A0And why doesn't cconv(A,[-0.25 0.5
>> -0.25]) give a result that's the same size as A? =A0I can't understand
wh=
>ere
>> the extra elements come from.
>
>It seems you are in above your head, as this is covered
>in the first month (maybe week) of DSP 101. It will save
>you a lot of effort (not to mention potential abuse here)
>if you find a good intro text on DSP (Rick Lyons'
>"Understanding DSP" comes to mind) and read.
>
>Rune
>

Yeah, I guess I had a moment of stupidity there.  Happens sometimes.
```
```Rune Allnor wrote:
> On 4 Apr, 18:28, "OldUncleSilas" <gibbering.babo...@gmail.com>
> wrote:

>> I'm currently working on a pitch identification program in
>> MATLAB. &#2013266080;It uses the Sliding DFT so I need to apply windowing
>> functions in the frequency domain.
>
> Ouch... I am not aware of a single application where
> windows are applied in frequency domain...

The application is when you have a spectrum in hand and the window's
spectrum has small support.

>> I understand this is done by convolution and have managed to
>> find the kernel for the von Hann window: [-0.25 0.5 -0.25], but
>> am struggling to find a concrete answer for other windows like
>> the Hamming and Blackman window.

It's always the transform of the time-domain window function. For
windows defined as cosine sums, like your other examples, that means
the central kernal value is the window's constant term and the other
values are half the coefficients on the cosines; half because each
occurs twice.

>>&#2013266080;And why doesn't cconv(A,[-0.25 0.5 -0.25]) give a result that's
>> the same size as A?

Read the documentation: "If you omit n, it defaults to
length(a)+length(B)-1. When n = length(a)+length(B)-1, the circular
convolution is equivalent to the linear convolution computed with
conv."

Martin

--
Quidquid latine scriptum est, altum videtur.
```
```On Sat, 4 Apr 2009 10:48:09 -0700 (PDT), Rune Allnor
<allnor@tele.ntnu.no> wrote:

>On 4 Apr, 18:28, "OldUncleSilas" <gibbering.babo...@gmail.com> wrote:
>> Hello there,
>> I'm currently working on a pitch identification program in MATLAB. &#2013266080;It
>> uses the Sliding DFT so I need to apply windowing functions in the
>> frequency domain.
>
>Ouch... I am not aware of a single application where
>windows are applied in frequency domain...

Just as an example, when doing fast convolution or fast correlation
with FT-mult-FT applying the window function as part of the
inter-transform multiplication (which is in the frequency domain if
the signals are in the time domain) controls the sidelobe levels in
the output.

Eric Jacobsen
Minister of Algorithms
Abineau Communications
http://www.ericjacobsen.org

Blog: http://www.dsprelated.com/blogs-1/hf/Eric_Jacobsen.php
```
```OldUncleSilas wrote:

...

> It is impossible to window in the time domain when using the SDFT, so I
> must do that process in the frequency domain.

Why do you want a window at all? Windows are applied to blocks of data.
The SFFT is usually applied to streaming data. What is your plan?

...

Jerry
--
Engineering is the art of making what you want from things you can get.
&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;
```
```On 4 Apr, 22:12, Eric Jacobsen <eric.jacob...@ieee.org> wrote:
> On Sat, 4 Apr 2009 10:48:09 -0700 (PDT), Rune Allnor
>
> <all...@tele.ntnu.no> wrote:
> >On 4 Apr, 18:28, "OldUncleSilas" <gibbering.babo...@gmail.com> wrote:
> >> Hello there,
> >> I'm currently working on a pitch identification program in MATLAB. &#2013266080;It
> >> uses the Sliding DFT so I need to apply windowing functions in the
> >> frequency domain.
>
> >Ouch... I am not aware of a single application where
> >windows are applied in frequency domain...
>
> Just as an example, when doing fast convolution or fast correlation
> with FT-mult-FT applying the window function as part of the
> inter-transform multiplication (which is in the frequency domain if
> the signals are in the time domain) controls the sidelobe levels in
> the output.

Are we talking about the same thing? The OP wants - rightly or
wrongly - to do a convolution in frequency domain. The numbers he
states are similar (I'm not sure they are equal [*]) to a standard
window.
This is equivalent to the usual element-wise multiplication of
the contents of a time-domain segment prior to the DFT.

As far as i can tell, the OP chooses the computationally expensive
alternative to the usual window weighting? I can see no reason,
formally or computationally, to start messing around in frequency
domain?

Rune

[*] The amplitudes of the sinusoidals are similar to the usual
window function, but I think there are some 1/(N-1) terms
in the arguments to the cosines that 'spreads' the window
frequency function across all N coefficients.
```
```On Apr 4, 2:13 pm, Rune Allnor <all...@tele.ntnu.no> wrote:
> On 4 Apr, 22:12, Eric Jacobsen <eric.jacob...@ieee.org> wrote:
>
>
>
> > On Sat, 4 Apr 2009 10:48:09 -0700 (PDT), Rune Allnor
>
> > <all...@tele.ntnu.no> wrote:
> > >On 4 Apr, 18:28, "OldUncleSilas" <gibbering.babo...@gmail.com> wrote:
> > >> Hello there,
> > >> I'm currently working on a pitch identification program in MATLAB.  It
> > >> uses the Sliding DFT so I need to apply windowing functions in the
> > >> frequency domain.
>
> > >Ouch... I am not aware of a single application where
> > >windows are applied in frequency domain...
>
> > Just as an example, when doing fast convolution or fast correlation
> > with FT-mult-FT applying the window function as part of the
> > inter-transform multiplication (which is in the frequency domain if
> > the signals are in the time domain) controls the sidelobe levels in
> > the output.
>
> Are we talking about the same thing? The OP wants - rightly or
> wrongly - to do a convolution in frequency domain. The numbers he
> states are similar (I'm not sure they are equal [*]) to a standard
> window.
> This is equivalent to the usual element-wise multiplication of
> the contents of a time-domain segment prior to the DFT.
>
> As far as i can tell, the OP chooses the computationally expensive
> alternative to the usual window weighting? I can see no reason,
> formally or computationally, to start messing around in frequency
> domain?
>
> Rune
>
> [*] The amplitudes of the sinusoidals are similar to the usual
>    window function, but I think there are some 1/(N-1) terms
>    in the arguments to the cosines that 'spreads' the window
>    frequency function across all N coefficients.

The values the OP suggests are the frequency domain coefficients for
the von Hann window. An example of these is given in the harris paper
on page 62:

http://web.mit.edu/xiphmont/Public/windows.pdf

As harris points out, one of the advantages of the von Hannn window in
the frequency domain is that it is applied with only binary shifts and

An appendix to the harris paper demonstrates the equivalence of
windowing in frequency and time domains.

The commonly used frequency domain windows are those "cosine summed"
windows that require a relatively small number of terms to be summed
in the frequency domain convolution.

Frequency domain windowing may be preferable when data is more readily
available in the frequency domain as in the OP's case,  where more
than one window type is desired and can be provided without performing
an additional FFT for each additional window, and in the cases where
the frequency domain implementation can be more efficient as is the
case with low level implementation of von Hann weighting.

Dale B. Dalrymple

```