HP Forums

Full Version: Spectrum analysis (Fourier)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello everyone,
let's suppose we have the following signal: f(t)=4+(4/pi)*sin(2*pi*800*t)+(4/(3*pi))*sin(2*pi*2400*t)+(4/(5*pi))*sin(2*pi*4000*t).
Ok, this is the resulting waveform (time domain, 4 is the average value):

Now the (banal) question is, how can I determine (i.e. to plot) the spectrum (in the frequency domain) of the function on the Prime, something like this below ?

TIA and best,

Aries
You're looking for the FFT (Fast Fourier Transform) algorithm. I'd give you more info, but I've loaned out the book I had for it. Google FFT, and you should be able to find what you're looking for.

There are some constraints, such as needing 2^n digitized samples and a couple other things, but it's definitely doable.
Thanks for your help, Brad, you're right, FFT algorithm is really what I was looking for and I've found it:
http://www.codeproject.com/Articles/9388...-algorithm
Now I hope to succeed in implementing the Danielson-Lanzcos algorithm into the HP Prime.
Best,

Aries ;-)
(i don't have Hp prime to try it.) but works on Emulator.
the App assumes that you place your signal function on F0(X).
visualize your signal function (play with scales/auto zoom or whatever you want) for better representation of the signal. Type
>>Spect>>Enter.
[attachment=2424]
[attachment=2425]
[attachment=2426]
[attachment=2427]
PHP Code:
`#pragma mode( separator(.,;) integer(h32) )SamX();dftY();Set();export Spect()BEGINlocal dmin,dmax,dx;dmin:=Function.Xmin;dmax:=Function.Xmax;dx:=(dmax-dmin)/1024;L0:=makelist(X,X,dmin,dmax,dx);SamX();dftY();L5:=makelist(X,X,0,1/dx,(1/dx)/1025);Set();END;#casSamX()BEGINL1:=F0(L0);END;#end#casdftY()BEGINlocal n;L4:=mat2list(fft(L1));FOR n FROM 1 TO size(L4) STEP 1 DOL4(n):=approx(abs(L4(n))*(2/1024));END;END;#endSet()BEGINstartapp("Statistics 1Var");local n;FOR n FROM 1 TO 64 STEP 1 DOL8(n):=L5(n);L9(n):=L4(n);end;D1:=L8;D2:=L9;Statistics_1Var.H1:={'D2','D1','5'};CHECK(1);startview(1,1);END; `
Thanks for your great app, toshk, very very kind of you, it's just what I was looking for and thanks for your great tools on control systems design and analysis (Bode, Nyquist and Nichols charts) too ;-)
What about Routh-Hurwitz and the root-locus methods ?
Are you going to implement those on your future versions ?
Happy August holidays,

Aries ;-)
The posted code has a syntax error: H1:={'D2','D1','5'}; in the Set() procedure.
I think this is due to the use of H1 as a list variable, which is a global reserved variable of type real.

-Dale-
(08-14-2015 09:37 AM)DrD Wrote: [ -> ]The posted code has a syntax error: H1:={'D2','D1','5'}; in the Set() procedure.
I think this is due to the use of H1 as a list variable, which is a global reserved variable of type real.

-Dale-
Open Statistics 1var
Shift>>1
recompile the empty Statistics 1Var.
and recompile my code too.
(08-14-2015 08:48 AM)Aries Wrote: [ -> ]Thanks for your great app, toshk, very very kind of you, it's just what I was looking for and thanks for your great tools on control systems design and analysis (Bode, Nyquist and Nichols charts) too ;-)
What about Roth-Hurwitz and the root-locus methods ?
Are you going to implement those on your future versions ?
Happy August holidays,

Aries ;-)
My thoughts:
For Root-Locus method i think Geometric App is a good candidate. but not animated enough to move points along a path. or move a set of conjugate pairs to its new locations.
Also too many rules associated with this method...nevertheless if done on Matlab is doable on temperament Prime.(just less real estate screen).

Roth-Hurwitz: i always wanted to implement that on prime...one of these days i will.
i tend to use Ackermann's method (space vector) for calculating sensitivity gain K.
(08-14-2015 04:33 PM)toshk Wrote: [ -> ]Open Statistics 1var
Shift>>1
recompile the empty Statistics 1Var.
and recompile my code too.

Hello,

It is always a good idea to fully qualify your app functions - especially for something being shared.

Statistics_1Var.H1 would work no matter where the user might be.
(08-14-2015 05:46 PM)Tim Wessman Wrote: [ -> ]
(08-14-2015 04:33 PM)toshk Wrote: [ -> ]Open Statistics 1var
Shift>>1
recompile the empty Statistics 1Var.
and recompile my code too.

Hello,

It is always a good idea to fully qualify your app functions - especially for something being shared.

Statistics_1Var.H1 would work no matter where the user might be.

Noted.....and fixed. Thanks.
The code was meant for Spectrum(App) based on Statistics_2vars, then to be based on Statistics_1var and finally it striped it done to just app.
Any chance to bring back fine(.) or fine dash(-) or tinnier version of the icons in Statistics_2var App? (real estate price is less attractive with is jumbo icons [attachment=2433] in some plots sometimes).
(08-14-2015 05:06 PM)toshk Wrote: [ -> ]
(08-14-2015 08:48 AM)Aries Wrote: [ -> ]Thanks for your great app, toshk, very very kind of you, it's just what I was looking for and thanks for your great tools on control systems design and analysis (Bode, Nyquist and Nichols charts) too ;-)
What about Roth-Hurwitz and the root-locus methods ?
Are you going to implement those on your future versions ?
Happy August holidays,

Aries ;-)
My thoughts:
For Root-Locus method i think Geometric App is a good candidate. but not animated enough to move points along a path. or move a set of conjugate pairs to its new locations.
Also too many rules associated with this method...nevertheless if done on Matlab is doable on temperament Prime.(just less real estate screen).

Roth-Hurwitz: i always wanted to implement that on prime...one of these days i will.
i tend to use Ackermann's method (space vector) for calculating sensitivity gain K.

Thanks toshk, great ideas and I'm looking forward to your updates ;-)
Best,

Aries :-)
Reference URL's
• HP Forums: https://www.hpmuseum.org/forum/index.php
• :