• Re: Dolph-Chebyshev Window (octave+maxima)

    From Johann Klammer@klammerj@NOSPAM.a1.net to comp.dsp on Fri Feb 14 22:07:45 2020
    From Newsgroup: comp.dsp

    Nevermind.. it seems the gamma needs2be integer.

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann Klammer@klammerj@NOSPAM.a1.net to comp.dsp on Fri Feb 21 06:23:02 2020
    From Newsgroup: comp.dsp

    On 02/14/2020 10:07 PM, Johann Klammer wrote:
    Nevermind.. it seems the gamma needs2be integer.

    or maybe not.
    there seems to also have been an off by one somewhere.
    there still was that weird dip in the middle..


    i'm using now
    M:N+1;
    alpha:cosh(acosh(10^gamma)/N);
    A(m):=alpha*cos(%pi*m/M); //<<here the M
    W(m):=chebyshev_t(N,A(m)); append(makelist(''ev(ratsimp(W(n)),numer),n,0,N/2-1),makelist(''ev(ratsimp(W(n)),numer),n,-N/2,-1));

    ..and shift the impulse resp manually later.


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann Klammer@klammerj@NOSPAM.a1.net to comp.dsp on Mon Feb 24 18:25:50 2020
    From Newsgroup: comp.dsp

    On 02/23/2020 10:54 PM, Richard (Rick) Lyons wrote:
    Hello Johann Klammer. I just now saw your posts.
    As far as I know, variable 'gamma' does not have to be an integer.

    Looking at your Feb. 13 post, using N = 32 and gamma = 48/20, my MATLAB software computes exactly the same frequency vector as your posted "freq" vector. That is a good thing.

    When I execute your code to compute your 'tf' vector (the final window sequence) I obtain the same result as my MATLAB code. As far as I can tell your computed 'tf' sequence is the correct final Chebeshev window sequence.

    My computation of your code to compute your 'tf' vector produces:

    tf =
    0.0627, 0.0740, 0.1135, 0.1629, 0.2223, 0.2910, 0.3677, 0.4507,
    0.5375, 0.6252, 0.7106, 0.7904, 0.8611, 0.9197, 0.9636, 0.9908,
    1.0000, 0.9908, 0.9636, 0.9197, 0.8611, 0.7904, 0.7106, 0.6252,
    0.5375, 0.4507, 0.3677, 0.2910, 0.2223, 0.1629, 0.1135, 0.0740,
    0.0627.

    When I plot your 'tf' window sequence it looks good to me.

    [-Rick-]


    from the freq vector in the first post?
    then it must be octaves ifft()...

    <http://members.aon.at/~aklamme4/scratch/tf.png>


    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Richard (Rick) Lyons@r.lyons@ieee.org to comp.dsp on Mon Feb 24 15:20:28 2020
    From Newsgroup: comp.dsp

    Hi Johann.
    I think the problem may be your 'chebyshev_t()' command. My MATLAB 'A(m)' sequence is equal to your 'A(m)' sequence, but my MATLAB 'W(m)' frequency-domain sequence is NOT equal to your 'freq' sequence. My 'W(m)' sequence is:

    W(m) =
    251.1886 -105.9393, 0.4193 -0.6395, 0.0152, 0.3856, 0.5997,
    0.7320, 0.8184, 0.8772, 0.9184, 0.9477, 0.9685, 0.9831, 0.9927,
    0.9982, 1.0000, 0.9982, 0.9927, 0.9831, 0.9685, 0.9477, 0.9184,
    0.8772, 0.8184, 0.7320, 0.5997, 0.3856, 0.0152 -0.6395,
    0.4193, -105.9393.

    Perhaps you could use the processing in my blog's Step# 5 to compute your 'freq' sequence, and see what happens.

    [-Rick-]
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann Klammer@klammerj@NOSPAM.a1.net to comp.dsp on Tue Feb 25 09:58:07 2020
    From Newsgroup: comp.dsp

    On 02/25/2020 12:20 AM, Richard (Rick) Lyons wrote:
    Hi Johann.
    I think the problem may be your 'chebyshev_t()' command. My MATLAB 'A(m)' sequence is equal to your 'A(m)' sequence, but my MATLAB 'W(m)' frequency-domain sequence is NOT equal to your 'freq' sequence. My 'W(m)' sequence is:

    W(m) =
    251.1886 -105.9393, 0.4193 -0.6395, 0.0152, 0.3856, 0.5997,
    0.7320, 0.8184, 0.8772, 0.9184, 0.9477, 0.9685, 0.9831, 0.9927,
    0.9982, 1.0000, 0.9982, 0.9927, 0.9831, 0.9685, 0.9477, 0.9184,
    0.8772, 0.8184, 0.7320, 0.5997, 0.3856, 0.0152 -0.6395,
    0.4193, -105.9393.

    Perhaps you could use the processing in my blog's Step# 5 to compute your 'freq' sequence, and see what happens.

    [-Rick-]

    Yes, that fixes it. Thank you.

    N=32;
    M=N+1;
    gamma=48/20;
    alpha=cosh(acosh(10^gamma)/N);
    m=[0:N-1];
    W=((-1).^m).*cheby_t(N,abs(alpha*cos(pi.*m./N)));
    td=ifft(W);
    td=real(td);
    te=[td(1)/2,td(2:N),td(1)/2];
    tf=te/max(te);

    and...

    cheby_t.m
    function retval = cheby_t (n,v)
    if(abs(v)>1)
    retval=cosh(n*acosh(v));
    else
    retval=cos(n*acos(v));
    endif
    endfunction

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Richard (Rick) Lyons@r.lyons@ieee.org to comp.dsp on Tue Feb 25 05:28:57 2020
    From Newsgroup: comp.dsp

    Hello Johann. You are very welcome.
    Sie k||nnen mich belohnen, indem Sie mir 5 Kilogramm
    Nurnberger Bratwurst schicken. :-)
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann Klammer@klammerj@NOSPAM.a1.net to comp.dsp on Wed Feb 26 16:00:28 2020
    From Newsgroup: comp.dsp

    On 02/25/2020 09:58 AM, Johann Klammer wrote:
    cheby_t.m
    function retval = cheby_t (n,v)
    if(abs(v)>1)
    retval=cosh(n*acosh(v));
    else
    retval=cos(n*acos(v));
    endif
    endfunction


    I believe this one is more correct:

    function retval = chebyshev_t (n,v)
    if(v>=1)
    retval=cosh(n*acosh(v));
    else
    if(v<=-1)
    retval=((-1) .^ n) * cosh(n*acosh(-v));
    else
    retval=cos(n*acos(v));
    endif
    endif
    endfunction

    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Richard (Rick) Lyons@r.lyons@ieee.org to comp.dsp on Thu Feb 27 11:12:57 2020
    From Newsgroup: comp.dsp

    Hello Johann.
    I can only make your Feb 26, 2020 code work if I multiply your final 'retval' sequence by an n-length sequence of 1, -1, 1, -1, ... . That is, in MATLAB code:

    retval = (-1).^(0:n-1).*retval;
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Johann Klammer@klammerj@NOSPAM.a1.net to comp.dsp on Fri Feb 28 17:31:00 2020
    From Newsgroup: comp.dsp

    On 02/27/2020 08:12 PM, Richard (Rick) Lyons wrote:
    Hello Johann.
    I can only make your Feb 26, 2020 code work if I multiply your final 'retval' sequence by an n-length sequence of 1, -1, 1, -1, ... . That is, in MATLAB code:

    retval = (-1).^(0:n-1).*retval;

    Because it's a function file to drop somewhere for octave to load.
    It's just the T_N function, not your added phase shift.


    --- Synchronet 3.22a-Linux NewsLink 1.2