?? hilbert.c
字號:
/* SigLib Hilbert Transform Example */#include <stdio.h>#include <siglib.h>#include "GraphFunctions.h"/* Define constants */#define SAMPLE_LENGTH ((SLArrayIndex_t)512)#define HILBERT_TRANSFORM_LENGTH 41L#define DELAY_LENGTH (HILBERT_TRANSFORM_LENGTH >> 1)SLData_t *pSrc;SLData_t *pFilterCoeffs, *pFilterState;SLData_t *pDelayState;SLData_t *pHilbertTransformed, *pDelayed;SLArrayIndex_t FilterIndex, DelayIndex;SLData_t SinePhase;void main(void);void main(void){ GraphObject *h2DGraph; /* Declare graph object */ SLArrayIndex_t i; h2DGraph = /* Initialize graph */ Create2DGraph ("Hilbert Transform", /* Graph title */ "Time", /* X-Axis label */ "Magnitude", /* Y-Axis label */ SV_AUTO_SCALE, /* Scaling mode */ SV_SIGNED, /* Sign mode */ SV_GRAPH_LINE, /* Graph type */ "localhost"); /* Graph server */ if (h2DGraph == NULL) /* Graph creation failed - e.g is server running ? */ { printf ("\nGraph creation failure. Please check that the server is running\n"); exit (1); } pSrc = SUF_VectorArrayAllocate (SAMPLE_LENGTH); pFilterCoeffs = SUF_VectorArrayAllocate (HILBERT_TRANSFORM_LENGTH); pFilterState = SUF_VectorArrayAllocate (HILBERT_TRANSFORM_LENGTH); pHilbertTransformed = SUF_VectorArrayAllocate (SAMPLE_LENGTH); pDelayState = SUF_VectorArrayAllocate (DELAY_LENGTH); pDelayed = SUF_VectorArrayAllocate (SAMPLE_LENGTH); /* Initialise Hilbert transformer coefficients */ SIF_HilbertTransformer (pFilterCoeffs, /* Pointer to filter coefficients */ HILBERT_TRANSFORM_LENGTH); /* Filter length */ /* Initialise FIR filter for Hilbert transformer */ SIF_Fir (pFilterState, /* Pointer to filter state array */ &FilterIndex, /* Pointer to filter index register */ HILBERT_TRANSFORM_LENGTH); /* Filter length */ /* Initialise the delay */ SIF_Delay (pDelayState, /* Pointer to delay state array */ &DelayIndex, /* Pointer to delay index */ DELAY_LENGTH); /* Delay length */ SinePhase = SIGLIB_ZERO; SDA_SignalGenerate (pSrc, /* Pointer to destination array */ SIGLIB_SINE_WAVE, /* Signal type - Sine wave */ SIGLIB_ONE, /* Signal peak level */ SIGLIB_FILL, /* Fill (overwrite) or add to existing array contents */ ((SLData_t)0.01), /* Signal frequency */ SIGLIB_ZERO, /* D.C. Offset */ SIGLIB_ZERO, /* Unused */ SIGLIB_ZERO, /* Signal end value - Unused */ &SinePhase, /* Signal phase - maintained across array boundaries */ SIGLIB_NULL_DATA_PTR, /* Unused */ SAMPLE_LENGTH); /* Output array length */ Display2DGraph (h2DGraph, /* Graph handle */ "Source Signal", /* Title of the dataset */ pSrc, /* Array of Double dataset */ SAMPLE_LENGTH, /* Number of data points */ SV_GRAPH_LINE, /* Graph type */ SV_MAGENTA, /* Colour */ SV_HIDE_MARKERS, /* Marker enable / disable */ SV_GRAPH_NEW); /* New graph */ printf ("\nSource Signal\nPlease hit <Carriage Return> to continue . . ."); getchar (); /* Apply Hilbert transformerer */ SDA_Fir (pSrc, /* Input array to be filtered */ pHilbertTransformed, /* Filtered output array */ pFilterState, /* Pointer to filter state array */ pFilterCoeffs, /* Pointer to filter coefficients */ &FilterIndex, /* Pointer to filter index register */ HILBERT_TRANSFORM_LENGTH, /* Filter length */ SAMPLE_LENGTH); /* Array length */ Display2DGraph (h2DGraph, /* Graph handle */ "Hilbert Transformed Signal", /* Title of the dataset */ pHilbertTransformed, /* Array of Double dataset */ SAMPLE_LENGTH, /* Number of data points */ SV_GRAPH_LINE, /* Graph type */ SV_MAGENTA, /* Colour */ SV_HIDE_MARKERS, /* Marker enable / disable */ SV_GRAPH_NEW); /* New graph */ printf ("\nHilbert Transformed Signal\nPlease hit <Carriage Return> to continue . . ."); getchar (); /* Delay input signal */// SDA_Delay (pSrc, pDelayed, pDelayState, &DelayIndex, DELAY_LENGTH, SAMPLE_LENGTH); for (i = 0; i < SAMPLE_LENGTH; i++) { *(pDelayed+i) = SDS_Delay (*(pSrc+i), /* Input data sample */ pDelayState, /* Pointer to delay state array */ &DelayIndex, /* Pointer to delay state index */ DELAY_LENGTH); /* Delay filter length */ } Display2DGraph (h2DGraph, /* Graph handle */ "Delayed Signal", /* Title of the dataset */ pDelayed, /* Array of Double dataset */ SAMPLE_LENGTH, /* Number of data points */ SV_GRAPH_LINE, /* Graph type */ SV_MAGENTA, /* Colour */ SV_HIDE_MARKERS, /* Marker enable / disable */ SV_GRAPH_NEW); /* New graph */ printf ("\nDelayed Signal\nPlease hit <Carriage Return> to continue . . ."); getchar (); SUF_MemoryFree (pSrc); /* Free memory */ SUF_MemoryFree (pFilterCoeffs); SUF_MemoryFree (pFilterState); SUF_MemoryFree (pHilbertTransformed); SUF_MemoryFree (pDelayState); SUF_MemoryFree (pDelayed);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -