VISR  0.11.1
Versatile Interactive Scene Renderer
time_frequency_parameter.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_PML_TIME_FREQUENCY_PARAMETER_HPP_INCLUDED
4 #define VISR_PML_TIME_FREQUENCY_PARAMETER_HPP_INCLUDED
5 
6 #include "export_symbols.hpp"
8 
10 
13 
14 #include <complex>
15 #include <initializer_list>
16 #include <istream>
17 
18 namespace visr
19 {
20 namespace pml
21 {
22 
23 namespace // unnamed
24 {
28  template<typename ElementType> struct TimeFrequencyParameterType {};
29 
30  template<> struct TimeFrequencyParameterType<float>
31  {
32  static constexpr const ParameterType ptype() { return detail::compileTimeHashFNV1( "TimeFrequencyParameterFloat" ); }
33  };
34  template<> struct TimeFrequencyParameterType<double>
35  {
36  static constexpr const ParameterType ptype() { return detail::compileTimeHashFNV1( "TimeFrequencyParameterDouble" ); }
37  };
38 } // unnamed
39 
45 template<typename ElementType >
46 class VISR_PML_LIBRARY_SYMBOL TimeFrequencyParameter: public TypedParameterBase<TimeFrequencyParameter<ElementType>, TimeFrequencyParameterConfig, TimeFrequencyParameterType<ElementType>::ptype() >
47 {
48 public:
53  TimeFrequencyParameter( std::size_t alignment = 0 );
54 
60  explicit TimeFrequencyParameter(ParameterConfigBase const & config);
61 
67 
76  explicit TimeFrequencyParameter( std::size_t dftSize,
77  std::size_t numDftSamples,
78  std::size_t numChannels,
79  size_t alignment = 0 );
80 
87 
88  virtual ~TimeFrequencyParameter() override;
89 
91 
100  void resize( std::size_t dftSize, std::size_t numDftSamples, std::size_t numChannels );
101 
102  std::size_t alignment() const { return mData.alignmentElements(); }
103 
104  std::size_t dftSize() const { return mData.numberOfColumns(); }
105 
106  std::size_t dftSamples() const { return mData.numberOfRows() / mNumberOfChannels; }
107 
108  std::size_t channelStride() const { return mData.stride(); }
109 
110  std::size_t dftSampleStride() const { return mData.stride() * numberOfChannels(); }
111 
112  std::size_t numberOfChannels() const { return mNumberOfChannels; }
113 
114  std::complex< ElementType > const * dftSlice( std::size_t channelIdx, std::size_t dftSampleIdx ) const
115  {
116  return mData.row( dftSampleIdx * numberOfChannels() + channelIdx );
117  }
118 
119  std::complex< ElementType > * dftSlice( std::size_t channelIdx, std::size_t dftSampleIdx )
120  {
121  return mData.row( dftSampleIdx * numberOfChannels() + channelIdx );
122  }
123 private:
125 
126  std::size_t mNumberOfChannels;
127 };
128 
129 } // namespace pml
130 } // namespace visr
131 
134 
135 #endif // VISR_PML_TIME_FREQUENCY_PARAMETER_HPP_INCLUDED
std::complex< ElementType > * dftSlice(std::size_t channelIdx, std::size_t dftSampleIdx)
Definition: time_frequency_parameter.hpp:119
std::size_t const numChannels
Definition: delay_vector.cpp:21
std::size_t channelStride() const
Definition: time_frequency_parameter.hpp:108
uint64_t ParameterType
Definition: parameter_type.hpp:13
Definition: time_frequency_parameter.hpp:46
std::size_t dftSampleStride() const
Definition: time_frequency_parameter.hpp:110
constexpr uint64_t compileTimeHashFNV1(const char *s)
Definition: compile_time_hash_fnv1.hpp:25
std::size_t alignment() const
Definition: time_frequency_parameter.hpp:102
Definition: options.cpp:10
Definition: parameter_factory.hpp:20
Definition: parameter_config_base.hpp:22
Definition: time_frequency_parameter_config.hpp:20
#define DEFINE_PARAMETER_TYPE(ParameterClassType, ParameterId, ParameterConfigType)
Definition: parameter_type.hpp:60
std::complex< ElementType > const * dftSlice(std::size_t channelIdx, std::size_t dftSampleIdx) const
Definition: time_frequency_parameter.hpp:114
std::size_t dftSize() const
Definition: time_frequency_parameter.hpp:104
std::size_t numberOfChannels() const
Definition: time_frequency_parameter.hpp:112
Definition: init_filter_matrix.hpp:15
std::size_t dftSamples() const
Definition: time_frequency_parameter.hpp:106