mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Schwierigkeit mit meinem C Code


Autor: Der Dummer (dummer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Leute!
Ich bin gerade dabei mich mit der DSP zu bechäftigen und die ohne 
Schwierigkeiten

Hier einfach ein Beispielcode den ich geamacht habe. Ist nicht alle, 
aber es ist wo ich Schwierigkeiten habe

double wave1[33500], wave2[33500], wavecorr[(33500*2)-1]
double sig1noise=0, sig2noise=0, noisewave1[33500]
double wave2noise[33500], sig1noiseamp=0, sig2noiseamp=0
// Tableaux preinitialiés:

int tap3[] = {0,1,1}, m3[]= {1,1,1}        N = 3 ( 3 Elements )
tap4[] = {0,0,1,1}, m4[] = {1,1,1,1},      N = 4
tap5[] = {0,0,1,0,1}, m5[] = {1,1,1,1,1}   N = 5
. . . .
. . . .
tap18[]                                    N = 18 Elements

Hier soll ich eine sequence seq[] erzeugen

void sequnce(int nbreEltsTap, int tap[], int m[])
{
int i, j, longeurSeq, reg[33500], seq[33500], comp[33500], mult[10];
int sum = 0, buf;
longeurSeq = pow(2,anzahlEltTap) - 1
for(i=0; i<longeurSeq; i++)
{
reg[i] = 0;
}
for(i=0; i<longeurSeq; i++)
{
for(j=0; j<nbreEltsTap; j++)
{
mult[j] = tap[j]*m[j];
sum += mult[j];
}
buf = sum % 2;
for(j = nbreEltsTap-1; j>0; j--)
{
m[j] = m[j-1];
}
m[0] = buf;
reg[i] = m[nbreEltsTap-1];
sum = 0;
for(j=0; j<longeurSeq; j++)
{
if (reg[j] == 0)
com[j] = 1;
else
comp[j] = 0;
}
seq[i] = reg[i]-comp[i];
wave[i] = seq[i]
}

//Hier soll ich Graphe plotten
void generateGraphs(void) // Es ist hier eine CallBackfunktion von GUI
{
if(sig1noise==1)
{
GaussNoise(sig1points, sig1noiseamp, seed, noisewave1);
for(i=0; i<sig1points; i++)
{
wave1[i] += noisewave1[i];
}
}
DeleteGraphplot(panelHandle, PANEL_SIG1GRAPH, -1,
VAL_IMMEDIAT_DRAW );
PlotY(panelHandle, PANEL_SIG1GRAPH,wave1, sig1points, VAL_DOUBLE,
VAL_THIN_LINE,.........);

if(sig2noise==1)
{
// genau wie bei sig1noise
}
if((sig1noise==1)||(sig2noise==1)
{
seed +=1;
if(seed>50)
seed = 1;
}

Correlate(wave1, sig1point, wave2, sig1poits, wavecorr);
PlotY(panelHandle, PANEL_CORRGRAPH, wavecorr,
(sig1points+sig2points-1), VAL_DOUBLE, VAL_THIN_LINE.....);
}

/* Auf dem PANEL soll ich die Anzahl der Elemente auswählen */

int CVICALLBACK Getsig1tap(.............)
{
switch(event)
{
case EVENT_COMMIT:
GetCtrlVal(panelHandle, PANEL_SIG1TAP, &sig1tap);
if(autogenerateGraphs)
GenerateGraphs;
break;
case EVENT_CHANGED:
break;
case RIGHT_CLICK:
break;
}
return 0;
}


int CVICALLBACK Getsig2tap(.............)
{
// genauso wie bei Getsig1tap
}


int CVICALLBACK Getsig1point(.............)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(panelHandle, PANEL_SIG1POINT, &sig1point);
if(autogenerateGraphs)
GenerateGraphs;
break;
case EVENT_CHANGED
if(autogenerateGraphs)
GenerateGraphs;
break;
}
return 0;
}

int CVICALLBACK Getsig2point(.............)
{
// Genauso wie bei Getsig1point

}


int CVICALLBACK Getsig1noise(.............)
{
switch(event)
{
case EVENT_COMMIT:
GetCtrlVal(panelHandle, PANEL_SIG1NOISE, &sig1noise);
if(sig1noise==0)
SetInputMode(panelHandle, PANEL_SIG1NOISEAMP, 0);
else
SetInputMode(panelHandle, PANEL_SIG1NOISEAMP, 1);
if(autoGenerateGraphs)
GenerateGraphs;
break;
case EVENT_CHANGED:
break;
}
return 0;
}

int CVICALLBACK Getsig2noise(.............)
{
//Genauso wie bei Getsig1noise
}


int CVICALLBACK Getsig1noiseamp(.............)
{
switch(event)
{
case EVENT_COMMIT:
GetCtrlVal(panelHandle, PANEL_SIG1NOISEAMP, &sig1noiseamp);
if(autoGenerateGraphs)
GenerateGraphs;
break;
case EVENT_CHANGED:
break;
}
return 0;
}

int CVICALLBACK Getsig2noiseamp(.............)
{
// Genauso wie bei Getsig1noiseamp
}


Meine Fragen
1 - Wenn ich Tap18 auswähle(Array mit 18 Elements ), soll ich eine 
sequence
    mit 262143 Elemente bekommen und plotten. Dies ist aber zu gross für
    mein Implementierung, da ich 33500 Elemente deklariert habe. So muss
    einen dynamischen Array programmieren. Dies ist mir etwas schwierig
    da ich nicht so viel mit C programmier habe. Kann jemand mir dabei
    helfen?

2 - Wenn ich den Noise Button einschalte, kriege ich eine Graph.
    Wenn ich danach eine sequence plotten möchte, wird es auf dem
    NoiseGraph geplottet. Also der Noisesignale bleibt noch. Es komm
    wiederum auf das erste Problem. Ich habe schon viel daran überlegt.
    Ich programmiere mit Labwindows.

Ich bedanke mich im voraus

Autor: blonk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Problemen mit Programmen sollte man ein minimales Beispiel
bringen, welches das Problem demonstriert und am besten übersetzbar ist! 
Denn für potentielle Helfer ist so der Einstieg viel leichter.

Vielleicht findet sich ja wer, der das jetzt alles durchgeht und 
versucht zu verstehen was du meinst, aber "Verluste" haben wirst du auf 
jeden Fall.

Den Code anständig formatieren würde auch helfen.

Präzise Sprache hilft: "Wenn ich Tap18 auswähle(Array mit 18 Elements 
)",
was heisst es denn ein Array "auszuwählen"?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.