AD9857 IQ DDS Digital Up Converter Experiment using Nucleo F401
Digital Signal Processing for IQ Quadradure Modulation DDS AD9857 using Nucleo F401.
see http://ttrftech.tumblr.com/post/114310226891/
Diff: dsp.h
- Revision:
- 0:55201637d936
- Child:
- 6:ed82052bd505
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dsp.h Sat Mar 21 08:31:20 2015 +0000 @@ -0,0 +1,56 @@ +#ifndef _DSP_H_ +#define _DSP_H_ + +#define HILBERT_TRANSFORM_FIRSTATE_LENGTH 128*2 + +extern int16_t htstat_buf[HILBERT_TRANSFORM_FIRSTATE_LENGTH]; +// capture interval 10ms onto double buffer (5ms each) +// 48kHz x 2ch * 5ms = 240*2 +#define CAPTURE_LEN 240*2 +extern int16_t cap_buf[2][CAPTURE_LEN]; +// 240*2 * 4 = 1920, single buffer +#define FIRSTATE_LENGTH 16*2 +extern int16_t fir_state[FIRSTATE_LENGTH]; +extern int16_t fir_buf[CAPTURE_LEN]; +#define CICBUF_LEN 1920 +extern int16_t cic_buf[CICBUF_LEN]; +// 1920 * 10 = 19200, double buffer +#define DMA_DATALEN 19200 +extern int16_t dma_buf[2][DMA_DATALEN]; + + +typedef struct { + uint32_t p0; + uint32_t s0; +} CICState; + +extern CICState cic; + +void cic_interpolate_x10(CICState *cic, uint32_t *src, int src_len, uint32_t *dst); + + +void fir_resample_x4(uint32_t *src_state, uint32_t *dst, int dst_len); + +void interpolate_test(); + +void hilbert_transform(uint32_t *src, uint32_t *dst, int dst_len, int sign); +void hilbert_transform_save_fir_state(uint32_t *src_tail); + +void hilbert_transform_test(); + + +typedef struct { + uint32_t vec; +} FMModState; + +extern FMModState fmmod; + +//uint32_t cos_sin(int16_t x); + +void fmmod_init(FMModState *fmmod); +void frequency_modulation(FMModState *fmmod, uint32_t *src, uint32_t *dst, int dst_len); + +void amplitude_modulation(uint32_t *src, uint32_t *dst, int dst_len); + + +#endif /* _DSP_H_ */