aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/kernels/spectrogram.h
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/core/kernels/spectrogram.h')
-rw-r--r--tensorflow/core/kernels/spectrogram.h112
1 files changed, 0 insertions, 112 deletions
diff --git a/tensorflow/core/kernels/spectrogram.h b/tensorflow/core/kernels/spectrogram.h
deleted file mode 100644
index 5476a0a961..0000000000
--- a/tensorflow/core/kernels/spectrogram.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-// Class for generating spectrogram slices from a waveform.
-// Initialize() should be called before calls to other functions. Once
-// Initialize() has been called and returned true, The Compute*() functions can
-// be called repeatedly with sequential input data (ie. the first element of the
-// next input vector directly follows the last element of the previous input
-// vector). Whenever enough audio samples are buffered to produce a
-// new frame, it will be placed in output. Output is cleared on each
-// call to Compute*(). This class is thread-unsafe, and should only be
-// called from one thread at a time.
-// With the default parameters, the output of this class should be very
-// close to the results of the following MATLAB code:
-// overlap_samples = window_length_samples - step_samples;
-// window = hann(window_length_samples, 'periodic');
-// S = abs(spectrogram(audio, window, overlap_samples)).^2;
-
-#ifndef THIRD_PARTY_TENSORFLOW_CORE_KERNELS_SPECTROGRAM_H_
-#define THIRD_PARTY_TENSORFLOW_CORE_KERNELS_SPECTROGRAM_H_
-
-#include <complex>
-#include <deque>
-#include <vector>
-
-#include "third_party/fft2d/fft.h"
-#include "tensorflow/core/framework/op_kernel.h"
-#include "tensorflow/core/framework/tensor.h"
-
-namespace tensorflow {
-
-class Spectrogram {
- public:
- Spectrogram() : initialized_(false) {}
- ~Spectrogram() {}
-
- // Initializes the class with a given window length and step length
- // (both in samples). Internally a Hann window is used as the window
- // function. Returns true on success, after which calls to Process()
- // are possible. window_length must be greater than 1 and step
- // length must be greater than 0.
- bool Initialize(int window_length, int step_length);
-
- // Initialize with an explicit window instead of a length.
- bool Initialize(const std::vector<double>& window, int step_length);
-
- // Processes an arbitrary amount of audio data (contained in input)
- // to yield complex spectrogram frames. After a successful call to
- // Initialize(), Process() may be called repeatedly with new input data
- // each time. The audio input is buffered internally, and the output
- // vector is populated with as many temporally-ordered spectral slices
- // as it is possible to generate from the input. The output is cleared
- // on each call before the new frames (if any) are added.
- //
- // The template parameters can be float or double.
- template <class InputSample, class OutputSample>
- bool ComputeComplexSpectrogram(
- const std::vector<InputSample>& input,
- std::vector<std::vector<std::complex<OutputSample>>>* output);
-
- // This function works as the one above, but returns the power
- // (the L2 norm, or the squared magnitude) of each complex value.
- template <class InputSample, class OutputSample>
- bool ComputeSquaredMagnitudeSpectrogram(
- const std::vector<InputSample>& input,
- std::vector<std::vector<OutputSample>>* output);
-
- // Return reference to the window function used internally.
- const std::vector<double>& GetWindow() const { return window_; }
-
- // Return the number of frequency channels in the spectrogram.
- int output_frequency_channels() const { return output_frequency_channels_; }
-
- private:
- template <class InputSample>
- bool GetNextWindowOfSamples(const std::vector<InputSample>& input,
- int* input_start);
- void ProcessCoreFFT();
-
- int fft_length_;
- int output_frequency_channels_;
- int window_length_;
- int step_length_;
- bool initialized_;
- int samples_to_next_step_;
-
- std::vector<double> window_;
- std::vector<double> fft_input_output_;
- std::deque<double> input_queue_;
-
- // Working data areas for the FFT routines.
- std::vector<int> fft_integer_working_area_;
- std::vector<double> fft_double_working_area_;
-
- TF_DISALLOW_COPY_AND_ASSIGN(Spectrogram);
-};
-
-} // namespace tensorflow
-
-#endif // THIRD_PARTY_TENSORFLOW_CORE_KERNELS_SPECTROGRAM_H_