|
|
Problem bei eigener FFT-Programmierung |
|
domi1993 |
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.08.2011, 16:15
Titel: Problem bei eigener FFT-Programmierung
|
|
Hallo, ich habe als Aufgabe für meine Facharbeit die Aufgabe bekommen eine eigene FFT (Fast-Fourier-Transformation) zu programmieren und habe anhand eines Pseudcode den Code für Scilab entwickelt.
Die Variable a ist hierbei die Anzahl der Einträge in der Liste/Array b.
Der oberste Teil ist hierbei zur künstlichen Erzeugung der Messwerte und beim ausprobieren gebe ich dann:
ffte(h,y)
Und bekomme dann immer als Fehlermeldung
!--error 21
ungültiger Index.
at line 7 of function ffte called by :
at line 8 of function ffte called by :
ffte(n,y)
Hat jemand eine Idee woran der Fehler liegt?
Hab schon ein paar Sachen versucht, freue mich um jede Hilfe.
|
|
|
|
|
Kevin |
Forum-Fortgeschrittener
|
|
Beiträge: 93
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.08.2011, 17:03
Titel:
|
|
Hallo,
so wie der Code da sethe kann meine Interpreter den ausführen. Aber warum versuchst du in der Funktion, die Funktion selbst aufzurufen? Und vor allem Woher bekommt man die Variable Y?
Grüße
Kevin
_________________
1000 Buchstaben? Warum nur 6?
|
|
|
domi1993 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.08.2011, 17:16
Titel:
|
|
Selber aufrufen muss sich die Funktion aufgrund der Algorithmusses der FFT, hier ein kleiner Pseude-Code damit ihr wisst was ich meine.
http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation unter Implementierung als rekursiver Algorithmus.
Y soll dann das Fouriertransformierte Ergebniss als Array/Liste sein.
Der Code funktioniert auch wenn man ihn eingibt, nur wenn man die dadurch definierte Funktion dann verwendet, kommt es bei mir immer zu der oben genannen Fehlermeldung.
Achja falls jemand vlt. irgendwann meint das es die fft doch auch vorgefertigt gibt, das weiß ich auch muss aber leider sleber eine Programmieren um damit Messungen durch zu führen.
Deshalb auch mein Funktionsname ffte , da ich fft nicht überschreiben konnte/wollte.
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 18.08.2011, 18:16
Titel:
|
|
Das hier ist meiner Meinung nach ein Problem...
Wenn k = 1 ist greifst du dann auf b(0) zu und das geht nicht
Allerdings ist auch die Berechnung mit dem Teil der e-Funktion so nicht richtig.
Hier ist ja auch das k drin...es hat schon seinen Grund, warum in dem Code das k bei 0 und nicht bei 1 beginnt. In Matlab ist der erste Index aber immer 1 weshalb man das k dort immer erhöhen oder bei der e-Funktion um 1 verringern muss.
Zuletzt bearbeitet von DSP am 18.08.2011, 18:23, insgesamt 2-mal bearbeitet
|
|
|
Kevin |
Forum-Fortgeschrittener
|
|
Beiträge: 93
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.08.2011, 18:20
Titel:
|
|
Hi,
ich mag einfach keine Rekirsionen, aber egal. Wenn der Fall auftritt, dass G oder U weniger als (a/2) Elemente haben, weil was schief läuft, dann ist G(k) und U(k) nicht mehr möglich für große k. Und dass ist dann ein "invalid index". Den wirklichen Fehler behaupte ich, wirst du nur schwerlich finden, da du ja nicht weißt bei welchem Rekursionsschritt er auftritt.
Gruß
Kevin
_________________
1000 Buchstaben? Warum nur 6?
|
|
|
domi1993 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.08.2011, 18:27
Titel:
|
|
Viele Dank schonmal hab eure Vorschläge mit eingebunden alle glaub ich allerding kommt immernoch genau die selbe Fehlermeldung :
-->ffte(n,y)
!--error 21
ungültiger Index.
at line 7 of function ffte called by :
at line 8 of function ffte called by :
ffte(n,y)
Also liegt der Fehler an den Variablen, allerding weiß ich da nicht wo, da ja wieder wie zu beginn für a ein Skalar und für b ein Vektor/Array, also weiß ich nicht warum Scilab immer Ungüliger Index bei Zeile 7/8 anzeigt. Den Ungültiger Index Fehler kenne ich sonst nur wenn ich z.B. g(0) aufrufen will (den Fehler habe ich behoben
Gesammter geänderter Code
|
|
|
Kevin |
Forum-Fortgeschrittener
|
|
Beiträge: 93
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.08.2011, 18:32
Titel:
|
|
Gib mal in die Konsole ein:
-->a=[1,2,3]
a =
1. 2. 3.
-->a(4)
und dann guck dir die Fehlermeldung ein, dann hast du auch die Fehlermeldung!
Der Fehler weist eindeutig auf eine Adresse und nicht auf eine Variable hin.
Die Klammer bei 2*k-1 (2*k)-1 ist überflüssig. Punkt vor Strich kennt der Code.
_________________
1000 Buchstaben? Warum nur 6?
|
|
|
domi1993 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.08.2011, 18:38
Titel:
|
|
Ja Kevin das ist mir schon bewusst.
Die Sache die ich an der Sache momentan nicht verstehe ist das der Fehler beim rekursiven Aufrufen der Funktion auftritt. Denn es gibt ja bei der Funktion eigentlich keinen x-ten Eintrag der den Ramen sprengen könnte, sonders es handelt sich a dann um die Variablen der Version und nicht mal um Indizes.
|
|
|
Kevin |
Forum-Fortgeschrittener
|
|
Beiträge: 93
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.08.2011, 11:15
Titel:
|
|
Dein letzter Satz widerspricht der Fehlermeldung.
Aber machs dochmal ganz einfach und gib alle Zwischenergebnisse in die Konsole aus, dann siehste gleich, wo der Schuh klemmt.
_________________
1000 Buchstaben? Warum nur 6?
|
|
|
domi1993 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.08.2011, 11:33
Titel:
|
|
Zwischenergebnisse bekomme ich auch gar keine es kommt immer direkt die ungültiger Index Fehlermeldung in den Zeilen 7,8, also wenn ich mich nicht verzählt habe () in den Zeilen in denen die Funktion ffte wieder neu aufgerufen wird mit a/2 und den in den Zeilen davor erhaltenen Vektoren.
Mein Problem bei dieser Fehlermeldung ist das ich den Fehler ungültiger Index nur von dem aufrufen einer nicht-existenten Stelle eine Matrix/Vektors kenne, aber nicht beim aufrufen von Funktionen, meine einzge Erklärung wäre eine Art Definitionslücke, allerdings würde ich da nicht verstehen woher diese kommt.
|
|
|
Kevin |
Forum-Fortgeschrittener
|
|
Beiträge: 93
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.08.2011, 11:45
Titel:
|
|
Du kannst auch nur Zwischenergebnisse aus einer Funktion bekommen, wenn du da aktiv nachhilfst. Schreib doch einfach mal hinter jede Zeile:
printf(zeilennummer\n);//zeilennummer ist ein string
Dann kannst du zumindest den Ort lokalisieren, denn die Angabe der Zeile in der Fehlermeldung ist mir immernoch ein Rätsel.
_________________
1000 Buchstaben? Warum nur 6?
|
|
|
Kevin |
Forum-Fortgeschrittener
|
|
Beiträge: 93
|
|
|
|
Anmeldedatum: 18.08.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.08.2011, 12:16
Titel:
|
|
Juhuu, Fehler gefunden:
Es ist eine Adressverletzung!
1. Schleife läuft (noch keine Rekursion)
g(2*k-1)==g(1)==b(1) --> nur das erste Element in g exisitiert.
u(2*k)==u(2)==b(2) --> nur das erste Element in u exisitiert.
2. Rekursion durch G=ffte(a/2,g)
g(2*k-1)==b(1) --> nur das erste Element in g exisitiert.
u(2*k)==b(2) -->! Problem: du hast g eingesetzt und g enthält nur ein Element, also wird bei b(2) auf g(2) zugegriffen, und das ist die Adressverletzung.
_________________
1000 Buchstaben? Warum nur 6?
|
|
|
domi 1993 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.08.2011, 16:17
Titel:
|
|
Jaaaa, jetzt funktioniert, glaub ich viiiiiiielen Dank Kevin.
Habs mit nem kleinen Trick umgangen das dieser Fehler auftritt.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|