| Index: webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h
|
| diff --git a/webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h b/webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h
|
| index b8953b0a4f8d2d4c1e0083b8de7cba0c37e80dc5..0feea30f69d9e6845951059fbe338c78cfe33ab1 100644
|
| --- a/webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h
|
| +++ b/webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h
|
| @@ -26,6 +26,25 @@
|
|
|
| namespace webrtc {
|
|
|
| +class PostFilterTransform : public LappedTransform::Callback {
|
| + public:
|
| + PostFilterTransform(size_t chunk_length, float* window, size_t fft_size);
|
| +
|
| + void ProcessChunk(float* const* data, float* final_mask);
|
| +
|
| + protected:
|
| + void ProcessAudioBlock(const complex<float>* const* input,
|
| + size_t num_input_channels,
|
| + size_t num_freq_bins,
|
| + size_t num_output_channels,
|
| + complex<float>* const* output) override;
|
| +
|
| + private:
|
| + LappedTransform transform_;
|
| + const size_t num_freq_bins_;
|
| + float* final_mask_;
|
| +};
|
| +
|
| // Enhances sound sources coming directly in front of a uniform linear array
|
| // and suppresses sound sources coming from all other directions. Operates on
|
| // multichannel signals and produces single-channel output.
|
| @@ -49,10 +68,14 @@ class NonlinearBeamformer
|
|
|
| // Process one time-domain chunk of audio. The audio is expected to be split
|
| // into frequency bands inside the ChannelBuffer. The number of frames and
|
| - // channels must correspond to the constructor parameters. The same
|
| - // ChannelBuffer can be passed in as |input| and |output|.
|
| - void ProcessChunk(const ChannelBuffer<float>& input,
|
| - ChannelBuffer<float>* output) override;
|
| + // channels must correspond to the constructor parameters.
|
| + void ProcessChunk(ChannelBuffer<float>* data) override;
|
| + // Applies the postfilter mask to one chunk of audio. The audio is expected to
|
| + // be split into frequency bands inside the ChannelBuffer. The number of
|
| + // frames must correspond to the constructor parameters and the number of
|
| + // channels is expected to be 1, since that is the output number of channels
|
| + // of ProcessChunk().
|
| + void PostFilter(ChannelBuffer<float>* data) override;
|
|
|
| void AimAt(const SphericalPointf& target_direction) override;
|
|
|
| @@ -116,8 +139,8 @@ class NonlinearBeamformer
|
| // Compute the means needed for the above frequency correction.
|
| float MaskRangeMean(size_t start_bin, size_t end_bin);
|
|
|
| - // Applies both sets of masks to |input| and store in |output|.
|
| - void ApplyMasks(const complex_f* const* input, complex_f* const* output);
|
| + // Applies post-filter mask to |input| and store in |output|.
|
| + void ApplyPostFilter(const complex_f* input, complex_f* output);
|
|
|
| void EstimateTargetPresence();
|
|
|
| @@ -126,9 +149,12 @@ class NonlinearBeamformer
|
|
|
| // Deals with the fft transform and blocking.
|
| size_t chunk_length_;
|
| - std::unique_ptr<LappedTransform> lapped_transform_;
|
| + std::unique_ptr<LappedTransform> process_transform_;
|
| + std::unique_ptr<PostFilterTransform> postfilter_transform_;
|
| float window_[kFftSize];
|
|
|
| + std::unique_ptr<ChannelBuffer<float>> dummy_out_;
|
| +
|
| // Parameters exposed to the user.
|
| const size_t num_input_channels_;
|
| int sample_rate_hz_;
|
| @@ -161,7 +187,6 @@ class NonlinearBeamformer
|
|
|
| // Array of length |kNumFreqBins|, Matrix of size |1| x |num_channels_|.
|
| ComplexMatrixF delay_sum_masks_[kNumFreqBins];
|
| - ComplexMatrixF normalized_delay_sum_masks_[kNumFreqBins];
|
|
|
| // Arrays of length |kNumFreqBins|, Matrix of size |num_input_channels_| x
|
| // |num_input_channels_|.
|
| @@ -186,6 +211,7 @@ class NonlinearBeamformer
|
|
|
| // For processing the high-frequency input signal.
|
| float high_pass_postfilter_mask_;
|
| + float old_high_pass_mask_;
|
|
|
| // True when the target signal is present.
|
| bool is_target_present_;
|
|
|