-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFSKencoder.h
More file actions
92 lines (74 loc) · 1.53 KB
/
Copy pathFSKencoder.h
File metadata and controls
92 lines (74 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#ifndef FSKENCODER_H
#define FSKENCODER_H
class FSKencoder
{
public:
int baud;
int sampleRate;
unsigned int Freq[6];
FSKencoder()
{
baud=300;
sampleRate=48000;
// Freq[0]=441;
// Freq[1]=882;
// Freq[2]=1323;
// Freq[3]=1764;
// Freq[4]=2646;
// Freq[0]=1000;
// Freq[1]=1500;
// Freq[2]=2000;
// Freq[3]=2500;
// Freq[4]=3000;
// Freq[5]=500;
Freq[0]=1200;
Freq[1]=1800;
Freq[2]=2400;
Freq[3]=3000;
Freq[4]=3600;
Freq[5]=600;
// Freq[0]=1800;
// Freq[1]=1800;
// Freq[2]=1800;
// Freq[3]=1800;
// Freq[4]=1800;
// Freq[5]=1800;
}
unsigned int generate(short *buff, char value)
{
unsigned int sampleSize = sampleRate/baud;
for (int i=0; i<sampleSize; i++)
{
buff[i] = sin( 2.0*M_PI*Freq[value] * (i) / (float) sampleRate )*32767.0;
}
for (int i=0; i<sampleSize/10; i++)
{
buff[i] *= (double) i/(sampleSize/10.0);
buff[sampleSize-i-1] *= (double) i/(sampleSize/10.0);
}
return sampleSize;
}
unsigned int generateBits(short *buff, bool first, bool second)
{
char value;
value=first<<1 | second;
return generate(buff, value);
}
unsigned int encode(char *data, unsigned int length, short *result)
{
unsigned int offset=0;
for (unsigned int i=0; i<length; i++)
{
offset+=generate(&result[offset], 5);
char byte=data[i];
// cout<<(unsigned int) byte%256<<endl;
for (int j=7; j>0; j-=2)
{
offset+=generateBits(&result[offset], byte&(1<<j), byte&(1<<j-1));
}
offset+=generate(&result[offset], 4);
}
return offset;
}
};
#endif