Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Unified Diff: webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.h

Issue 1982183002: Pull out the PostFilter to its own NonlinearBeamformer API (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Drop delay and sum Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..26859ecb7bb9def780f36e902e4b8b96c7005f25 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.
@@ -53,6 +72,12 @@ class NonlinearBeamformer
// ChannelBuffer can be passed in as |input| and |output|.
void ProcessChunk(const ChannelBuffer<float>& input,
ChannelBuffer<float>* output) 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 +141,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,7 +151,8 @@ 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];
// Parameters exposed to the user.
@@ -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_;

Powered by Google App Engine
This is Rietveld 408576698