Hallo. Ich schreibe im Moment an meiner Abschlussarbeit. Meine Aufgabe besteht u.a. darin, eine AM-Demodulation in C für ein 6711 DSK mit Daughterboard (48 kHz fA) von TI zu realisieren. Ich habe die Square-Law Demodulation versucht, aber die funktioniert nicht (oder ich hab Fehler drin). Könnte jemand eine Lösung vorschlagen? Bei mir kommt im Moment bei einem eingespeisten AM-Signal so ein pulsierendes 12 kHz-Signal raus. PS: Square Law: Quadrieren der Eingangsfkt. --> FIR-Tiefpass --> Wurzel --> Ausgabe
Leichte C-Probleme? Funktion: int func(int input) { //Rechnen return input * 3; } Aufruf: x = func(y) Oder nur Zeiger auf Daten übergeben und die Variable direkt bearbeiten.
So, hab mal versucht, den Code zu überarbeiten. Aber irgendwie kommt jetzt am Ausgang gar nix mehr raus. Der Aufruf lautet jetzt: z.B. Input = quadratur(Input); Mit ner zusätzlichen Variable (InputHandle) hats auch nicht funktioniert. Stimmt denn der grundsätzliche Algorithmus überhaupt? Beim Starten knackts kurz aus den Lautsprechern, dann is Schicht. Ach, ich würde es eher als mittelschwere C-Krise bezeichnen.
Mein Tip: -In kleinen Schritten vorgehen. Nur mal Output = Input Probieren. -Nicht so viele Funktionen, macht für dich vieleicht Code übersichtlicher. -Lokale Variablen in CodecISR defienieren nicht Input und Output Global. Für den Anfang: lassen wie es ist: main() EnableMcBSP1(void) void EnableCodec() interrupt void CodecIsr() { float Input, Output, GleichIn; Uint32 McbspOut,Out; Int16 temp; /* shift left channel to bits 15 - 0 and extend sign into bits 31 - 16 */ temp = (Int16) ( MCBSP_read(hMcbsp1) >> 16 ); Input = (float) temp; Out = (Uint32) Output; McbspOut = ( Out<<16 );//|( Out & 0x0000ffff ); //McbspOut = (Out<<16); MCBSP_write(hMcbsp1,McbspOut); return; } Hoffe du hast Programmgerüst aus funktionierendem Projekt
Zu früh abgesendet: interrupt void CodecIsr() { float Input, Output, GleichIn; Uint32 McbspOut,Out; Int16 temp; /* shift left channel to bits 15 - 0 and extend sign into bits 31 - 16 */ temp = (Int16) ( MCBSP_read(hMcbsp1) >> 16 ); Input = (float) temp; Out = Input; Out = (Uint32) Output; McbspOut = ( Out<<16 );//|( Out & 0x0000ffff ); //McbspOut = (Out<<16); MCBSP_write(hMcbsp1,McbspOut); return; }
Ich hab angefangen mit nem kleinen Projekt, welches ich von nem Prof. bekommen habe. Es leitet einfach den Eingang auf den Ausgang. Und das funktioniert auch wunderbar (bis auf ne leichte Frequenzabweichung, die wohl aus einem Antialiasing-Filter kommt). Soll heißen: Das Gerüst für Ein- und Ausgabe hab ich. Und die Theorie für die Umsetzung der AM-Demod. dächte ich auch zu besitzen. Der Teufel steckt im Detail.
Hi Michael. Mein Quelltext war an sich schon richtig, mein Problem war nur, dass ich als Filter einen Tiefpass benutzt habe. Also hatte ich auf meinem Ausgangssignal eine Gleichspannung, die sich als unangenehmes Quietschen bemerkbar gemacht hat und den Ausgang unbrauchbar gemacht hat. Der Quelltext sieht jetzt ungefähr so aus: ... // (input + |input| ) / 2 = one way rectification float einwegglr(float Input) { Input = (Input + fabsf(Input))/2; return 3*Input; } // filtering method --> uses external configurable filter coefficients short Fir(short Input) { int i, Sum, Prod; States[0]= Input; Sum= 0; for(i=0;i<M;i++) { Prod= Coef[i]*States[i]; Sum= Sum+Prod; } for(i=M-1;i>0;i--) { States[i]= States[i-1]; /* update states x(k- i):=x(k-(i-1)) */ } return ((float) (Sum>>15)); /* cast output to 32-bits and return */ } void processing(void) { Output = Input; } /* interrupt service routine interrupt void CodecIsr() { Uint32 McbspOut,Out; Int16 temp; /* shift left channel to bits 15 - 0 and extend sign into bits 31 - 16 */ temp = (Int16) ( MCBSP_read(hMcbsp1) >> 16 ); Input = (float) temp; einwegglr(Input);/* one way rectification by absolute values*/ Fir(Input); /* band pass filter ( 100 - 4000 Hz ) */ processing(); /* function for sending demodulated input to output */ Out = (Uint32) Output; McbspOut = ( Out<<16 )|( Out & 0x0000ffff ); McbspOut = (Out<<16); MCBSP_write(hMcbsp1,McbspOut); return; } ... Nun stehe ich allerdings vor dem nächsten Problem - die nächste Stufe wäre dann ein quadratischer Hüllkurvendemodulator. Also praktisch: quadrieren(Eingang), Tief- (oder Band)pass(Eingang), wurzel(Eingang). Nur funktioniert das irgendwie so nicht. Hast Du vielleicht ne Idee?
Hi, Can anyone tell me where can I download the other files such as DskTemplateA1.cdb? Thanks, Shlomo.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.