aboutsummaryrefslogtreecommitdiffstats
path: root/core/front_stablizer.h
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2023-01-06 01:40:10 -0800
committerChris Robinson <[email protected]>2023-01-06 01:40:10 -0800
commitec30a306df6c1d2079786c9cd4ae37fd6554e229 (patch)
tree223928cf686f6f62cdcc9c51f75f3b394065ff8d /core/front_stablizer.h
parent3f8a3af3637606dae61ba112cb5bd9d2d897e5cb (diff)
Avoid using a reversed all-pass for the front stablizer
While a neat trick, it's been shown to be too volatile and add noise as the signal gets louder. It's better to just accept the phase shift and ensure everything stays aligned.
Diffstat (limited to 'core/front_stablizer.h')
-rw-r--r--core/front_stablizer.h17
1 files changed, 6 insertions, 11 deletions
diff --git a/core/front_stablizer.h b/core/front_stablizer.h
index 3d328a8d..6825111a 100644
--- a/core/front_stablizer.h
+++ b/core/front_stablizer.h
@@ -10,27 +10,22 @@
struct FrontStablizer {
- static constexpr size_t DelayLength{256u};
+ FrontStablizer(size_t numchans) : ChannelFilters{numchans} { }
- FrontStablizer(size_t numchans) : DelayBuf{numchans} { }
-
- alignas(16) std::array<float,BufferLineSize + DelayLength> Side{};
- alignas(16) std::array<float,BufferLineSize + DelayLength> MidDirect{};
- alignas(16) std::array<float,DelayLength> MidDelay{};
-
- alignas(16) std::array<float,BufferLineSize + DelayLength> TempBuf{};
+ alignas(16) std::array<float,BufferLineSize> MidDirect{};
+ alignas(16) std::array<float,BufferLineSize> Side{};
+ alignas(16) std::array<float,BufferLineSize> Temp{};
BandSplitter MidFilter;
alignas(16) FloatBufferLine MidLF{};
alignas(16) FloatBufferLine MidHF{};
- using DelayLine = std::array<float,DelayLength>;
- al::FlexArray<DelayLine,16> DelayBuf;
+ al::FlexArray<BandSplitter,16> ChannelFilters;
static std::unique_ptr<FrontStablizer> Create(size_t numchans)
{ return std::unique_ptr<FrontStablizer>{new(FamCount(numchans)) FrontStablizer{numchans}}; }
- DEF_FAM_NEWDEL(FrontStablizer, DelayBuf)
+ DEF_FAM_NEWDEL(FrontStablizer, ChannelFilters)
};
#endif /* CORE_FRONT_STABLIZER_H */