Alles gut, Ulrich. Ist ja sehr nett von Dir und anderen, zu helfen. Dafür bin ich ja dann da.
i need a FFT routine for bascom avr , atmega128
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.
Hinweis kann nach Kenntnisnahme deaktiviert werden!
-
-
Hallo wimapon,
attached you find a FFT-Basic snippets, I hope its that what you want.
BASCOM-Quellcode: FFT-Schnipsel
- '( FFT-Basic Parts
- without Assembler-Routines
- 15.02.2020 /17:00
- ')
- $regfile = "m644def.dat"
- $crystal = 20000000 '20MHz
- $hwstack = 100
- $swstack = 100
- $framesize = 100
- '$sim
- $baud = 56000
- Dim Re(130) As Single 'Real-Teil vor FFT-Berechnung
- Dim Im(130) As Single 'Imag-Teil vor FFT-Berechnung
- Dim Real(130) As Word 'Betragswerte nach FFT-Berechnung
- Dim Wcos(130) As Single 'Cosinus Werte für FFT
- Dim Wsin(130) As Single 'Sinus Werte für FFT
- Dim Pi As Single
- Dim Mr As Integer
- Dim N As Word 'FFT-Punkteanzahl
- Dim Nn As Integer
- Dim L As Integer
- Dim M As Integer
- Dim Tr As Single
- Dim Ti As Single
- Dim Istep As Integer
- Dim A As Single
- Dim Wr As Single
- Dim Wi As Single
- Dim I As Integer
- Dim J As Integer
- Dim Tr0 As Single
- Dim Tr1 As Single
- Dim Ti0 As Single
- Dim Ti1 As Single
- Dim Nm As Integer
- Dim W_cond As Integer
- Dim Ptr As Integer
- Dim Re1 As Single
- Dim Im1 As Single
- Dim Re_betrag As Single
- Dim N2 As Byte 'FFT-Ergebnis, N-halbe Slots
- Dim Freq As Word 'Frequenzvorgabe für Testsinus
- Dim Abtast_dauer As Single 'Abtastdauer für Testsinus
- Dim Sin_input(128) As Single 'Speicherplatz für Testsinus
- Dim F_steps As Single 'Frequenzsteps für Testsinus
- Dim Step_radian As Single 'Steps in Rad
- Dim Schritt As Single 'Schrittweite für Testsinus
- Dim Sinuswert As Single
- Freq = 313 'Frequenz-Vorgabe für Test-Sinus-Berechnung in Hz
- 'Print "with Simulator, wait a while, calculating results"
- Declare Sub Fft
- Pi = 4 * Atn(1)
- N = 128 'Anzahl Punkte der FFT
- N2 = N / 2 'N-halbe
- '###################################################################
- '---------------only for Test-Sinus ----------------
- Schritt = 0
- Abtast_dauer = 0.000125 'Abtast-Takt, hier 125usec
- F_steps = 1 / Freq 'Anzahl Steps pro Schwingung mit Abtastdauer
- F_steps = F_steps / Abtast_dauer
- Step_radian = 2 * Pi 'Anzahl Steps pro Schwingung bezogen auf 1 Radian
- Step_radian = Step_radian / F_steps
- 'Print "Step_radian=" ; Step_radian ; " F_steps=" ; F_steps
- '---------------Test-Sinus ----------------
- For I = 1 To N 'Generierung von Sinus-Werten zum Testen
- Sinuswert = Sin(schritt)
- Sin_input(i) = 400 * Sinuswert
- Schritt = Schritt + Step_radian
- '-------------------------
- Re(i) = Sin_input(i) 'Realpart, here filled with Test Sinus Values
- Im(i) = 0
- '-------------------------
- 'Print "I=";i;" Re =";Re(i)
- Next
- '####################################################################
- ' ------ Start -----------
- 'Vorgelagerte Cos- und Sin- Berechnung
- 'may definied as a Sub
- L = 1
- Nm = N
- While L < N '
- Istep = 2 * L
- For M = 1 To L
- Ptr = M + L
- A = 1 - M
- A = A / L
- A = A * Pi
- A = A * -1 'A=-Pi*(1-M)/L
- Wcos(ptr) = Cos(a)
- Wsin(ptr) = Sin(a)
- Wsin(ptr) = Wsin(ptr) * -1 '-sin(a)
- 'Print "Ptr=" ; Ptr ; " Cos=" ; Wcos(ptr) ; " Sin=" ; Wsin(ptr)
- Next M
- L = Istep
- Wend
- Fft
- '----FFT-Results with Test Sinus
- For I = 1 To N2 '
- Re1 = Re(i) * Re(i) 'Re(i) zum Quadrat
- Im1 = Im(i) * Im(i)
- Re_betrag = Re1 + Im1
- Re_betrag = Sqr(re_betrag)
- Re_betrag = Re_betrag / 4 'reduzieren, da Wert > als 65536 sein kann
- Real(i) = Re_betrag 'Betragswert
- Print I ; " " ; Real(i) 'Betragswert-Ausgabe der einzelnen FFT-Slots
- Next I
- Real(1) = 0 '#####!!!!Gleichanteil zu Null gesetzt!
- '######################################
- End
- Sub Fft
- Mr = 0
- Nn = N - 1
- For M = 1 To Nn
- L = N
- L = L / 2 'Shift L , Right , 1 ' = L / 2
- W_cond = Mr + L
- While W_cond > Nn
- L = L / 2 'Shift L , Right , 1 ' = L / 2
- W_cond = Mr + L
- Wend
- Mr = Mr Mod L 'Mod_argu
- Mr = Mr + L
- 'Mr = Mr
- If Mr > M Then
- Tr = Re(m + 1)
- Re(m + 1) = Re(mr + 1)
- Re(mr + 1) = Tr
- Ti = Im(m + 1)
- Im(m + 1) = Im(mr + 1)
- Im(mr + 1) = Ti
- End If
- Next M
- L = 1
- Nm = N
- While L < N '
- Istep = 2 * L
- For M = 1 To L
- Ptr = M + L
- Wr = Wcos(ptr) 'cos(a)
- Wi = Wsin(ptr) 'Sin(a)
- For I = M To N Step Istep
- J = I + L
- Tr0 = Wr * Re(j)
- Tr1 = Wi * Im(j)
- Tr = Tr0 - Tr1 'ZR=CO*RE(J) - SI*IM(J)
- Ti0 = Wr * Im(j)
- Ti1 = Wi * Re(j)
- Ti = Ti0 + Ti1 'ZI=CO*IM(J) + SI*RE(J)
- Re(j) = Re(i) - Tr
- Im(j) = Im(i) - Ti
- Re(i) = Re(i) + Tr
- Im(i) = Im(i) + Ti
- Next I
- Next M
- L = Istep
- Wend
- End Sub
-
stefanhamburg schrieb:
Alles gut, Ulrich.
mcselec.com weitersprechen ? Die meisten Englischen Treats waren eher kurz. -
@Pluto25: Damit hast Du es selbst beantwortet.
-
Hallo Stefanhamburg,
noch einige Gedanken zu deinem Bannstrahl bzgl. der Verwendung der englischen Sprache von Hilfe-Suchenden in diesem Forum:
- anscheinend wird dieses Forum als hilfreicher angesehen!?
- Bascom sowie Bascom-Hilfe und auch alle Datenblätter zu den AVR’s sind ohne Englisch-Kenntnisse kaum sinnvoll anwendbar.
- Es wird sich somit niemand mit AVR’s beschäftigen wollen, der nicht auch (minimale) Sprachkenntnisse in Englisch besitzt.
- Die Problemanfragen in deutscher Sprache erfordern schon oftmals Nachfragen vom Tenor „…was ist damit gemeint…“. Übersetzer-Algorithmen sind eher nicht auf technische Belange optimiert, sodass noch mehr Verwirrung bei der Hin- und Rückübersetzung entstehen könnte.
- Im Sprachgebrauch hier werden ebenfalls Begriffe wie „Thread“ verwendet. Eine strenge deutsche Übersetzung könnte auch „Faden“ bedeuten. (nach deepl-Translator)
- Wie groß ist der Anteil der in Englisch gestellten Anfragen bezogen auf die Fülle derer in deutscher Sprache, ich vermute mal, er liegt im niedrigen einstelligen Prozent-Bereich?
Auch ich bin ein Verfechter meiner Muttersprache und ärgere mich jedes Mal, wenn gehäuft Anglizismen im Blätterwald auftauchen. Allerdings sehe ich es bei technischen Bereichen und Anwendungen differenzierter, da in diesem Bereich deutsch leider kaum zur Anwendung kommt.
Deshalb würde ich solche in Englisch notierten Anfragen etwas weniger streng betrachten; eher bereichert es dieses ausgezeichnete Forum.
In einem Buch von 2010 las ich auf Seite 14 u.a. „Ziel ist es dem Anfänger die Scheu vor dem Einstieg zu nehmen“. Das kann ich voll und ganz unterstützen, wenn ich auch auf meine Anfänge zurückblicke.
Diese Gedanken sind nur meine persönliche Meinung, andere Meinungen werden aber auch akzeptiert.
Gruß
Ulrich - anscheinend wird dieses Forum als hilfreicher angesehen!?
-
hallo wieder Ulrich,
Ich kan ein bischen deutch sprechen, aber die deutche computer worten kan ich nicht verstehen.
Darom versuche ich es auf englisch.......
Ich will jedenfalls kein probleem sein auf diezes forum
I think that your last snipet does the job for me.
I did some experiments with it , and the results looks great.
When i am ready and i can use this program for my other experiments i will inform you here.
Until sofar, thank you 1000 times for your wonderfull help
Wim PA0SLT
PS If you like to know who you helped, look at my sites:
home.kpn.nl/huiu55wi/huis.htm
ebl21.nl
at the moment i am trying to make a seismic earthquakes measuring station here at my house.
We do suffer lots of earthquakes here due to gas production.
The problem is that my sensor gets to much 50 Hz noise.
Because i need a greater sensitivity i need a FFT routine to see the difference between an
ordinary 50 Hz noise puls and a real earthquake. -
Es ist kein Problem, wenn hier einer auf Englisch fragt.
Keiner hat hier was dagegen und die meisten können es auch lesen.
Das Problem ist, dass die Antworten der User in einem deutschen Forum nur von den Leuten kommen, die auch englisch schreiben (können)
Das sind nicht unbedingt die gleichen Leute, die eine Lösung haben.
Der Fragende bekommt also nicht die größtmögliche Aufmerksamkeit und auch nicht die Spezialisten.
Das ist in einem englisch-sprachigem Forum eben anders.
Und genau das hat Stefanhamburg gemeint.
Kein Bannstrahl -
Michael schrieb:
Der Fragende bekommt also nicht die größtmögliche Aufmerksamkeit und auch nicht die Spezialisten.
Das ist in einem englisch-sprachigem Forum eben anders.
Raum für Notizen
-----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------- -
Ulrich,
The snipped you gave works like a charm.
i can use it for all kind of inputs
My problem is solved.
So i will incorperate it in my own programs.
Thank you very much for your work.
I am now a happy man
Wim -
Hallo wimapon,
I'am glad to hear that it works.
Ulrich -
Hallo wimapon,
according to your homemade seismic earthquakes measuring station: did you built the sensor(s) yourself? It is possible you give some information about the sensors? How to built? schematics?
In my vicinity there have also been drillings for gas, which have generated light earthquakes too.
Ulrich -
Hi Ulrich,
As sensor i do use a LIS332AR 3-axis +/-2g analog-output ultracompact accelerometer.
After that i du use a low frequency amplifier with a LM324
I do have much noise coming from this thing... so i have difficulties to see the difference
between an week earthquake and the continuous noise.
Therfore i am now experimenting with the FFT in the AVR program.
In the begining i did use an ordinary loudspeaker with a stone on the conus.
that worked very good. the stone must not be to heavy... the conus must
be somewhere in the middle of the movement range.....
The output of that loudspeaker was connected to the ADconvertor input of the AVR.
I am a retired geologist. I was working in oil and gas exploration with seismic interpretation.
So i do know something about earth quakes and seismics.
If i can help you, i will do!
Wim -
Hallo Wimapon,
many thanks for that informations. I have already read the sensor example using a loudspeaker in one of the popular electronic magazines. I will test that too. Do the noise come from the accelerator or from the LM324?
Here in this Bascom-Forum many users have shown programs to communicate with different 3/6-axis accelerators, e.g. MPU6050.
MPU-6050 MEMS 6-Achs-Sensor
May be it is of interest too. Search for this theme. Everything else in a PN.
Ulrich -
Okay Ulrich,
I do not know... but i am afraid it is coming from the environment.
But i am buzy looking for it now.
It is quit complicated.
i will look at your link
Wim