35#ifndef CouplerDeEmbedFilter_h
36#define CouplerDeEmbedFilter_h
46 , m_groupDelaySamples(0)
55 if(fabs(m_cachedBinSize - bin_hz) > FLT_EPSILON)
58 if( (m_magKey != wmag) || (m_angleKey != wang) )
80 m_resampledSparamCosines.
clear();
81 m_resampledSparamSines.
clear();
85 m_groupDelaySamples = ceil( m_groupDelayFs / timescale );
89 if(
static_cast<size_t>(llabs(m_groupDelaySamples)) >= npoints)
92 m_groupDelaySamples = 0;
114 double m_cachedBinSize;
116 int64_t m_groupDelayFs;
117 int64_t m_groupDelaySamples;
126 virtual void Refresh(vk::raii::CommandBuffer& cmdBuf, std::shared_ptr<QueueHandle> queue)
override;
129 static std::string GetProtocolName();
138 vk::raii::CommandBuffer& cmdBuf,
139 std::unique_ptr<VulkanFFTPlan>& plan,
142 size_t npointsPadded,
143 size_t npointsUnpadded
147 vk::raii::CommandBuffer& cmdBuf,
155 vk::raii::CommandBuffer& cmdBuf,
162 vk::raii::CommandBuffer& cmdBuf,
169 vk::raii::CommandBuffer& cmdBuf,
175 vk::raii::CommandBuffer& cmdBuf,
176 std::unique_ptr<VulkanFFTPlan>& plan,
192 std::string m_maxGainName;
200 float m_cachedMaxGain;
202 size_t m_cachedNumPoints;
222 std::unique_ptr<VulkanFFTPlan> m_vkForwardPlan;
223 std::unique_ptr<VulkanFFTPlan> m_vkForwardPlan2;
225 std::unique_ptr<VulkanFFTPlan> m_vkReversePlan;
Declaration of DeEmbedFilter.
void clear()
Resize the container to be empty (but don't free memory)
Definition: AcceleratorBuffer.h:478
Encapsulates a Vulkan compute pipeline and all necessary resources to use it.
Definition: ComputePipeline.h:55
Definition: CouplerDeEmbedFilter.h:121
void ApplySParameters(vk::raii::CommandBuffer &cmdBuf, AcceleratorBuffer< float > &samplesIn, AcceleratorBuffer< float > &samplesOut, CouplerSParameters ¶ms, size_t npoints, size_t nouts)
Apply a set of processed S-parameters (either forward or inverse channel response)
Definition: CouplerDeEmbedFilter.cpp:430
void ApplySParametersInPlace(vk::raii::CommandBuffer &cmdBuf, AcceleratorBuffer< float > &samplesInout, CouplerSParameters ¶ms, size_t npoints, size_t nouts)
Apply a set of processed S-parameters (either forward or inverse channel response)
Definition: CouplerDeEmbedFilter.cpp:451
void GroupDelayCorrection(CouplerSParameters ¶ms, size_t &istart, size_t &iend, int64_t &phaseshift, bool invert)
Calculate bounds for the meaningful output data. Since we're phase shifting, there's gonna be some ga...
Definition: CouplerDeEmbedFilter.cpp:365
virtual DataLocation GetInputLocation() override
Gets the desired location of the nodes's input data.
Definition: CouplerDeEmbedFilter.cpp:135
void GenerateScalarOutput(vk::raii::CommandBuffer &cmdBuf, std::unique_ptr< VulkanFFTPlan > &plan, size_t istart, size_t iend, WaveformBase *refin, size_t stream, size_t npoints, int64_t phaseshift, AcceleratorBuffer< float > &samplesIn)
Generates a scalar output from a complex input.
Definition: CouplerDeEmbedFilter.cpp:389
void SubtractInPlace(vk::raii::CommandBuffer &cmdBuf, AcceleratorBuffer< float > &samplesInout, AcceleratorBuffer< float > &samplesSub, size_t npoints)
Subtract one signal from another and overwrite the first.
Definition: CouplerDeEmbedFilter.cpp:328
void Subtract(vk::raii::CommandBuffer &cmdBuf, AcceleratorBuffer< float > &samplesP, AcceleratorBuffer< float > &samplesN, AcceleratorBuffer< float > &samplesOut, size_t npoints)
Subtract one signal from another and overwrite the first.
Definition: CouplerDeEmbedFilter.cpp:345
void ProcessScalarInput(vk::raii::CommandBuffer &cmdBuf, std::unique_ptr< VulkanFFTPlan > &plan, AcceleratorBuffer< float > &samplesIn, AcceleratorBuffer< float > &samplesOut, size_t npointsPadded, size_t npointsUnpadded)
Zero-pad a scalar input to the proper length and FFT it.
Definition: CouplerDeEmbedFilter.cpp:472
Definition: CouplerDeEmbedFilter.h:41
void Refresh(WaveformBase *wmag, WaveformBase *wang, double bin_hz, bool invert, size_t nouts, float maxGain, int64_t timescale, size_t npoints)
Refresh the cached data.
Definition: CouplerDeEmbedFilter.h:66
virtual int64_t GetGroupDelay()
Returns the max mid-band group delay of the channel.
Definition: CouplerDeEmbedFilter.cpp:506
bool NeedUpdate(WaveformBase *wmag, WaveformBase *wang, double bin_hz)
Check to see if we need to refresh our cache.
Definition: CouplerDeEmbedFilter.h:52
void InterpolateSparameters(WaveformBase *wmag, WaveformBase *wang, float bin_hz, bool invert, size_t nouts, float maxGain)
Recalculate the cached S-parameters (and clamp gain if requested)
Definition: CouplerDeEmbedFilter.cpp:524
Abstract base class for all filter graph blocks which are not physical instrument channels.
Definition: Filter.h:95
virtual void Refresh() override
Evaluates a filter graph node.
Definition: Filter.cpp:816
A single S-parameter array.
Definition: SParameters.h:75
Descriptor for a single stream coming off a channel.
Definition: StreamDescriptor.h:46