FSK Modulator/Demodulator.
More...
Go to the source code of this file.
|
#define | BWLIST {75,800} |
|
#define | FLIST {1400,1800,1200,2200,1300,2100} |
|
#define | IGET_SAMPLE iget_sample(&buffer, len) |
|
#define | NBW 2 |
|
#define | NF 6 |
|
#define | STATE_GET_BYTE 3 |
|
#define | STATE_SEARCH_STARTBIT 0 |
|
#define | STATE_SEARCH_STARTBIT2 1 |
|
#define | STATE_SEARCH_STARTBIT3 2 |
|
|
int | fsk_serial (fsk_data *fskd, short *buffer, int *len, int *outbyte) |
| Retrieve a serial byte into outbyte. Buffer is a pointer into a series of shorts and len records the number of bytes in the buffer. len will be overwritten with the number of bytes left that were not consumed. More...
|
|
int | fskmodem_init (fsk_data *fskd) |
|
static int | get_bit_raw (fsk_data *fskd, short *buffer, int *len) |
|
static int | ibpdfilter (struct filter_struct *fs, int in) |
|
static int | ibpfilter (struct filter_struct *fs, int in) |
|
static int | idemodulator (fsk_data *fskd, int *retval, int x) |
|
static int | iget_sample (short **buffer, int *len) |
|
|
static double | coef_in [NF][NBW][8] |
| Coefficients for input filters Coefficients table, generated by program "mkfilter" mkfilter is part of the zapatatelephony.org distribution Format: coef[IDX_FREC][IDX_BW][IDX_COEF] IDX_COEF = 0 => 1/GAIN IDX_COEF = 1-6 => Coefficientes y[n].
|
|
static double | coef_out [NBW][8] |
| Coefficients for output filter Coefficients table, generated by program "mkfilter" Format: coef[IDX_BW][IDX_COEF] IDX_COEF = 0 => 1/GAIN IDX_COEF = 1-6 => Coefficientes y[n]. More...
|
|
FSK Modulator/Demodulator.
- Author
- Mark Spencer marks.nosp@m.ter@.nosp@m.digiu.nosp@m.m.co.nosp@m.m
- Includes code and algorithms from the Zapata library.
Definition in file fskmodem_int.c.
int fsk_serial |
( |
fsk_data * |
fskd, |
|
|
short * |
buffer, |
|
|
int * |
len, |
|
|
int * |
outbyte |
|
) |
| |
Retrieve a serial byte into outbyte. Buffer is a pointer into a series of shorts and len records the number of bytes in the buffer. len will be overwritten with the number of bytes left that were not consumed.
- Return values
-
0 | Still looking for something... |
1 | An output byte was received and stored in outbyte |
-1 | An error occured in the transmission He must be called with at least 80 bytes of buffer. |
Definition at line 222 of file fskmodem_int.c.
References fsk_data::instop, fsk_data::nbit, and fsk_data::parity.
Referenced by callerid_feed(), callerid_feed_jp(), and tdd_feed().
231 switch (fskd->state) {
233 case STATE_SEARCH_STARTBIT2:
234 goto search_startbit2;
235 case STATE_SEARCH_STARTBIT3:
236 goto search_startbit3;
260 beginlenx = beginlen;
261 if (idemodulator(fskd, &fskd->xi1, IGET_SAMPLE))
267 fskd->state = STATE_SEARCH_STARTBIT2;
271 if (idemodulator(fskd, &fskd->xi2, IGET_SAMPLE))
274 printf(
"xi2 = %d ", fskd->xi2);
276 if (fskd->xi2 < 512) {
284 fskd->state = STATE_SEARCH_STARTBIT3;
288 if (idemodulator(fskd, &fskd->xi1, IGET_SAMPLE))
291 printf(
"xi1 = %d ", fskd->xi1);
298 }
while (fskd->xi1 > 0);
299 fskd->state = STATE_GET_BYTE;
305 if (fskd->
nbit < 8) {
315 for (a = n1 = 0; j; j--) {
317 i = get_bit_raw(fskd, buffer, len);
318 buffer += (olen - *len);
332 i = get_bit_raw(fskd, buffer, len);
333 buffer += (olen - *len);
349 for (j = fskd->
instop; j; j--) {
350 r = get_bit_raw(fskd, buffer, len);
363 fskd->state = STATE_SEARCH_STARTBIT;
Integer Pass Band demodulator filter
Definition at line 95 of file fskmodem_int.c.
102 s = in * fs->icoefs[0];
103 fs->ixv[(fs->ip + 6) & 7] = s;
105 s = (fs->ixv[fs->ip] + fs->ixv[(fs->ip + 6) & 7]) +
106 6 * (fs->ixv[(fs->ip + 1) & 7] + fs->ixv[(fs->ip + 5) & 7]) +
107 15 * (fs->ixv[(fs->ip + 2) & 7] + fs->ixv[(fs->ip + 4) & 7]) +
108 20 * fs->ixv[(fs->ip + 3) & 7];
110 for (i = 1, j = fs->ip; i < 7; i++, j++) {
112 s_interim = (int64_t)(fs->iyv[j & 7]) *
113 (int64_t)(fs->icoefs[i]) /
115 s += (int) s_interim;
Integer Band Pass filter
Definition at line 124 of file fskmodem_int.c.
131 s = in * fs->icoefs[0] / 256;
132 fs->ixv[(fs->ip + 6) & 7] = s;
134 s = (fs->ixv[(fs->ip + 6) & 7] - fs->ixv[fs->ip])
135 + 3 * (fs->ixv[(fs->ip + 2) & 7] - fs->ixv[(fs->ip + 4) & 7]);
137 for (i = 1, j = fs->ip; i < 7; i++, j++) {
138 s_interim = (int64_t)(fs->iyv[j & 7]) *
139 (int64_t)(fs->icoefs[i]) /
141 s += (int) s_interim;
Initial value:={
{ 1.3868644653e-08,-6.3283665042e-01,4.0895057217e+00,-1.1020074592e+01,1.5850766191e+01,-1.2835109292e+01,5.5477477340e+00,0.0000000000e+00,
}, { 3.1262119724e-03,-7.8390522307e-03,8.5209627801e-02,-4.0804129163e-01,1.1157139955e+00,-1.8767603680e+00,1.8916395224e+00,0.0000000000e+00
},
}
Coefficients for output filter Coefficients table, generated by program "mkfilter" Format: coef[IDX_BW][IDX_COEF] IDX_COEF = 0 => 1/GAIN IDX_COEF = 1-6 => Coefficientes y[n].
Definition at line 88 of file fskmodem_int.c.