Reply by Johann Klammer●February 28, 20202020-02-28
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.
Reply by Richard (Rick) Lyons●February 27, 20202020-02-27
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;
Reply by Johann Klammer●February 26, 20202020-02-26
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
Reply by Richard (Rick) Lyons●February 25, 20202020-02-25
Hello Johann. You are very welcome.
Sie können mich belohnen, indem Sie mir 5 Kilogramm
Nurnberger Bratwurst schicken. :-)
Reply by Johann Klammer●February 25, 20202020-02-25
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
Reply by Richard (Rick) Lyons●February 24, 20202020-02-24
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-]
Reply by Johann Klammer●February 24, 20202020-02-24
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-]
>
Reply by Richard (Rick) Lyons●February 23, 20202020-02-23
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-]
Reply by Johann Klammer●February 21, 20202020-02-21
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.
Reply by Johann Klammer●February 14, 20202020-02-14