-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLUTHelper.cpp
More file actions
84 lines (74 loc) · 2.52 KB
/
LUTHelper.cpp
File metadata and controls
84 lines (74 loc) · 2.52 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
#include <cstddef> // For size_t
#include <stdexcept> // For exceptions
#include "LUTHelper.h"
namespace tinyalg::waveu {
inline int LUTHelper::calculateIndex_16(size_t phaseValue, size_t numBits) {
return (phaseValue >> (numBits - 4)) & (16 - 1);
}
inline int LUTHelper::calculateIndex_32(size_t phaseValue, size_t numBits) {
return (phaseValue >> (numBits - 5)) & (32 - 1);
}
inline int LUTHelper::calculateIndex_64(size_t phaseValue, size_t numBits) {
return (phaseValue >> (numBits - 6)) & (64 - 1);
}
inline int LUTHelper::calculateIndex_128(size_t phaseValue, size_t numBits) {
return (phaseValue >> (numBits - 7)) & (128 - 1);
}
inline int LUTHelper::calculateIndex_256(size_t phaseValue, size_t numBits) {
return (phaseValue >> (numBits - 8)) & (256 - 1);
}
inline int LUTHelper::calculateIndex_512(size_t phaseValue, size_t numBits) {
return (phaseValue >> (numBits - 9)) & (512 - 1);
}
inline int LUTHelper::calculateIndex_1024(size_t phaseValue, size_t numBits) {
return (phaseValue >> (numBits - 10)) & (1024 - 1);
}
inline int LUTHelper::calculateIndex_2048(size_t phaseValue, size_t numBits) {
return (phaseValue >> (numBits - 11)) & (2048 - 1);
}
LUTIndexFunction LUTHelper::getIndexFunction(LUTSize lutSize) {
switch (lutSize) {
case LUT_16:
return calculateIndex_16;
case LUT_32:
return calculateIndex_32;
case LUT_64:
return calculateIndex_64;
case LUT_128:
return calculateIndex_128;
case LUT_256:
return calculateIndex_256;
case LUT_512:
return calculateIndex_512;
case LUT_1024:
return calculateIndex_1024;
case LUT_2048:
return calculateIndex_2048;
// Add more cases for other LUT sizes
default:
throw std::invalid_argument("Unsupported LUT size");
}
}
std::pair<float, float> LUTHelper::adjustAmplitudeAndOffset(float amplitude, float offset) {
constexpr float MAX_AMPLITUDE = 127.5f;
constexpr float DAC_MAX = 255.0f;
constexpr float DAC_MIN = 0.0f;
// Clamp amplitude
if (amplitude < DAC_MIN) {
amplitude = DAC_MIN;
} else if (amplitude > MAX_AMPLITUDE) {
amplitude = MAX_AMPLITUDE;
}
// Adjust offset
if (offset < DAC_MIN) {
offset = DAC_MIN;
}
if (offset + amplitude > DAC_MAX) {
offset = DAC_MAX - amplitude;
}
if (offset - amplitude < DAC_MIN) {
offset = amplitude;
}
return std::make_pair(amplitude, offset);
}
}