Feb 28 2007 | 4:24 am

Hi,

I'm using the Hann and Hamming windows for FFT processings.

I have the following C++ code for the Cosine window (works fine!):

long fftFrameSize = pow(2, fftLog2n);

switch(mWindowType) {

case WINDOW_COS:

for (long k = 0; k < fftFrameSize; k++) {

mWindow[k] = (double) -.5*cos(2.*M_PI*(double)k/(double)fftFrameSize)+.5;

}

break;

For the Blackman, I have:

w(n) = 0.42 - 0.8 cos(2*Pi*n/N) + 0.08cos(4*Pi*n/N)

The window length L = N+1

I'd like to test some other windows (like the Sine window) but I don't find the algorithms.

Does someone could bring me help?

A Max expression would be very cool.

A C code would be perfect.

And if you have a C++, it would be wonderful!

Best regards,

Philippe

- Feb 28 2007 | 10:00 amgreetings phillepe,more like a c expression than a c++ one...unless you're inquiringabout a hanning/window representation of a signal as aclass/inheritance representation? obviously you didn't list yourimplementation and definition. it seems to me in your former questionyou're addressing what happens in the first element (simply a divisionon 32-bit integers):mWindow[k] = (double) -.5*cos(2.*M_PI*(double)k/(double)fftFrameSize)+.5;whether this expression is valid granted in the class you've defined,you're invoking the correct libraries (i.e. ). here's asomewhat working list of windowing functions:hann up in there (aka raised cos), which is what you're attempting to invoke...hope that is helpful...brandon nickell.On 2/27/07, Philippe Gruchet wrote:>> Hi,>> I'm using the Hann and Hamming windows for FFT processings.> I have the following C++ code for the Cosine window (works fine!):>> long fftFrameSize = pow(2, fftLog2n);> switch(mWindowType) {> case WINDOW_COS:> for (long k = 0; k < fftFrameSize; k++) {> mWindow[k] = (double) -.5*cos(2.*M_PI*(double)k/(double)fftFrameSize)+.5;> }> break;>>> For the Blackman, I have:> w(n) = 0.42 - 0.8 cos(2*Pi*n/N) + 0.08cos(4*Pi*n/N)> The window length L = N+1>>> I'd like to test some other windows (like the Sine window) but I don't find the algorithms.>> Does someone could bring me help?> A Max expression would be very cool.> A C code would be perfect.> And if you have a C++, it would be wonderful!>> Best regards,> Philippe>
- Feb 28 2007 | 1:29 pmHello Brandon,mWindow[k] = (double) -.5*cos(2.*M_PI*(double)k/(double)fftFrameSize)+.5;This cosine window works very fine here in Xcode.I already and successfully implemented the Hann and Hamming windows based on the Accelerate.framework.> here's a somewhat working list of windowing functions:I was looking for some other windows and this link to Wikipedia is great and very useful, thanks!From there, I just find what seems the original resource at the MathWorks website:And I found the sine window in the MaxMSP examples (!?):in [p ---windo] ...[expr (1.1* (sin(($f1/1024. )* (2. * 3.1415926))) - .1)]As I can't find it anywhere else, is it the right sine window for FFT too?Best,Philippe
- Mar 02 2007 | 4:40 amHi Phillipe,I looked at the example patch you're referring to and see that thesample size is being ramped up into expr (1.1* (sin(($f1/1024. )* (2.* 3.1415926))) - .1). This is correct, they note that the -.1 is tojust offset the amplitude of the signal so that there's no clipping.The Sine Window is best known for its use in mp3 compression buthigher resolution Window Types have been experimented with fordifferent codecs like Ogg Vorbis for better signal representation. TheSine Window is defined as sin*((3.1415926/2*sample length)(k + 0.5).What they're really doing in that expression is tweaking the k (whereit's defined as 1.1). The Sine Window takes the entire sample range(hence 2*512 = 1024 in the denominator) so it seems the creator of thepatch played around with the coefficients to get different subjectiveresults (see the comment "in listening tests, several classic windowfunctions (hanning, hamming, squareroot, sinusoid) were tried. thesine function sounded best. go figure")...that's always an excellentstrategy!BTW, I noticed that your coefficient in the second term for theexpansion of the Blackman Window should be 0.5 instead of 0.8, so:w(n) = 0.42 - 0.8 cos(2*Pi*n/N) + 0.08cos(4*Pi*n/N)should be:w(n) = 0.42 - 0.5 cos(2*Pi*n/N) + 0.08cos(4*Pi*n/N)Glad the reference to window types was helpful...Brandon NickellOn 2/28/07, Philippe Gruchet wrote:>> Hello Brandon,>> mWindow[k] = (double) -.5*cos(2.*M_PI*(double)k/(double)fftFrameSize)+.5;>> This cosine window works very fine here in Xcode.> I already and successfully implemented the Hann and Hamming windows based on the Accelerate.framework.>> > here's a somewhat working list of windowing functions:> > http://en.wikipedia.org/wiki/Hann_window>> I was looking for some other windows and this link to Wikipedia is great and very useful, thanks!> >From there, I just find what seems the original resource at the MathWorks website:>>>> And I found the sine window in the MaxMSP examples (!?):>>> in [p ---windo] ...> [expr (1.1* (sin(($f1/1024. )* (2. * 3.1415926))) - .1)]>> As I can't find it anywhere else, is it the right sine window for FFT too?>> Best,> Philippe>
- Mar 02 2007 | 4:58 pmHi Brandon,Thank you very much for your explanation about the sine window.I keep it in safe place!> BTW, I noticed that your coefficient in the second term> for the expansion of the Blackman Window should be 0.5> instead of 0.8, so:Yes, sorry. Just a typo by typing 8 instead of 5, just below ;-)> Glad the reference to window types was helpful...Oh yes, thanks again!I can start my tests and see what works the best.Kindest regards,Philippe
- Mar 07 2007 | 10:58 pm> For the Blackman, I have:> w(n) = 0.42 - 0.5cos(2*Pi*n/N) + 0.08cos(4*Pi*n/N)> The window length L = N+1I finally found the double-precision Blackman window inside Xcode/vecLib.frameworkextern voidvDSP_blkman_windowD(double * __vDSP_C,vDSP_Length __vDSP_N,int __vDSP_FLAG)Thanks again for the NON-help about that :-(PG
- Mar 07 2007 | 11:07 pmI like the info at MathWorld:_MarkOn Mar 7, 2007, at 2:58 PM, Philippe Gruchet wrote:>>> For the Blackman, I have:>> w(n) = 0.42 - 0.5cos(2*Pi*n/N) + 0.08cos(4*Pi*n/N)>> The window length L = N+1>> I finally found the double-precision Blackman window inside Xcode/> vecLib.framework>> extern void> vDSP_blkman_windowD(> double * __vDSP_C,> vDSP_Length __vDSP_N,> int __vDSP_FLAG)>> Thanks again for the NON-help about that :-(> PG
- Jun 21 2013 | 10:52 amI realise this is 6 years late but in case anyone in future has the same issue, pretty much ever frequently used windowing function can be found at : http://en.wikipedia.org/wiki/Window_function