Hallo!
Ich habe ein Problem mit meinem Sharc ADSP-21369 auf einem EZ lite Kit
mit AD1835 Audio Codec. Ich versuche mit Hilfe der Funktion Block Based
Talk Throu (C) und der eingebauten FIR Funktion in Visual DSP ein Signal
zu filtrieren. Input ist ein Function Generator, der einen 500Hz Sinus
in den DAC einspeist und der Output wird auf einem digitalen Oscilloskop
angezeigt. Das reine Talk Throu funktioniert ganz wunderbar.
Jetzt habe ich Filterkoeffizienten in MATLAB erstellt für ein Lowpass
Filter mit 501 Tabs, der bei 500Hz cuttet. Die Filterkoeffizienten
liegen im Anhang im Format Float als Tekstdatei bei. Das einlesen der
Koeffizienten funktioniert auch. Jetzt möchte ich mithilfe der FIR
funktion:
" float fir (float sample, const float pm coeffs[],float dm state[], int
taps); "
aus der Datei <filter.h> das Inputsignal filtern.
1 | #include "tt.h"
|
2 | #include <processor_include.h>
|
3 | #include <stdio.h>
|
4 |
|
5 | #define TAPS 501
|
6 |
|
7 | int m = 0;
|
8 | int i = 0;
|
9 | int j = 0;
|
10 | int k = 0;
|
11 |
|
12 | float x_red = 0;
|
13 | float x_white = 0;
|
14 | float y = 0;
|
15 |
|
16 | float state[TAPS+1] = {0};
|
17 |
|
18 | float pm B_LP[TAPS] = {
|
19 | #include "b3FilterKoefficenterLP_500.txt"
|
20 | };
|
21 |
|
22 | // Place the audio processing algorith here. The input and output are given
|
23 | // as unsigned integer pointers.
|
24 |
|
25 | void processBlock(unsigned int *block_ptr)
|
26 | {
|
27 | //Clear the Block Ready Semaphore
|
28 | blockReady = 0;
|
29 |
|
30 | //Set the Processing Active Semaphore before starting processing
|
31 | isProcessing = 1;
|
32 |
|
33 | for(m=0;m<NUM_SAMPLES;m++)
|
34 | {
|
35 | switch(m%2) //Jedes 2. sample wird benutzt, um nur 1 Kanal zu filtern.
|
36 | {
|
37 | case 0:
|
38 | x_red = (float)((*(block_ptr+m))<<8);
|
39 |
|
40 | y = fir(x_red, y, B_LP, state, TAPS);
|
41 |
|
42 | *(block_ptr+m) = ((int)y)>>8;
|
43 | break;
|
44 | default:
|
45 | x_white = (float)((*(block_ptr+m))<<8);
|
46 | *(block_ptr+m) = ((int)x_white)>>8;
|
47 | break;
|
48 | }
|
49 | }
|
50 | //Clear the Processing Active Semaphore after processing is complete
|
51 | isProcessing = 0;
|
52 | }
|
Das Signal passiert allerdings nur ungehindert durch das kit hindurch ,
obwohl es bei 500Hz ja gerne schon gedämpft werden sollte. Auch bei
höheren Frequenzen passiert nichts. Ich benutze 1024 Samples.
Wär echt super, wenn mir jemand helfen könnte, ich sitz schon seit heute
morgen um 8 dran und komm einfach nicht weiter!
Gruß
Chris