Forum: Digitale Signalverarbeitung / DSP / Machine Learning Schwierigkeit mit meinem C Code


von Der D. (dummer)


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

von blonk (Gast)


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"?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.