| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 level->minlevel = new_frame_level; // New minimum. | 583 level->minlevel = new_frame_level; // New minimum. |
| 584 } else { | 584 } else { |
| 585 level->minlevel *= (1 + 0.001f); // Small increase. | 585 level->minlevel *= (1 + 0.001f); // Small increase. |
| 586 } | 586 } |
| 587 } | 587 } |
| 588 level->averagelevel.AddValue(new_frame_level); | 588 level->averagelevel.AddValue(new_frame_level); |
| 589 } | 589 } |
| 590 } | 590 } |
| 591 | 591 |
| 592 static void UpdateMetrics(AecCore* aec) { | 592 static void UpdateMetrics(AecCore* aec) { |
| 593 float dtmp, dtmp2; | 593 float dtmp; |
| 594 | 594 |
| 595 const float actThresholdNoisy = 8.0f; | 595 const float actThresholdNoisy = 8.0f; |
| 596 const float actThresholdClean = 40.0f; | 596 const float actThresholdClean = 40.0f; |
| 597 const float safety = 0.99995f; | 597 const float safety = 0.99995f; |
| 598 | 598 |
| 599 const float noisyPower = 300000.0f; | 599 const float noisyPower = 300000.0f; |
| 600 | 600 |
| 601 float actThreshold; | 601 float actThreshold; |
| 602 float echo, suppressedEcho; | 602 float echo, suppressedEcho; |
| 603 | 603 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 622 | 622 |
| 623 const float near_average_level = | 623 const float near_average_level = |
| 624 aec->nearlevel.averagelevel.GetLatestMean(); | 624 aec->nearlevel.averagelevel.GetLatestMean(); |
| 625 | 625 |
| 626 // Subtract noise power | 626 // Subtract noise power |
| 627 echo = near_average_level - safety * aec->nearlevel.minlevel; | 627 echo = near_average_level - safety * aec->nearlevel.minlevel; |
| 628 | 628 |
| 629 // ERL | 629 // ERL |
| 630 dtmp = 10 * static_cast<float>(log10(far_average_level / | 630 dtmp = 10 * static_cast<float>(log10(far_average_level / |
| 631 near_average_level + 1e-10f)); | 631 near_average_level + 1e-10f)); |
| 632 dtmp2 = 10 * static_cast<float>(log10(far_average_level / echo + 1e-10f)); | |
| 633 | 632 |
| 634 aec->erl.instant = dtmp; | 633 aec->erl.instant = dtmp; |
| 635 if (dtmp > aec->erl.max) { | 634 if (dtmp > aec->erl.max) { |
| 636 aec->erl.max = dtmp; | 635 aec->erl.max = dtmp; |
| 637 } | 636 } |
| 638 | 637 |
| 639 if (dtmp < aec->erl.min) { | 638 if (dtmp < aec->erl.min) { |
| 640 aec->erl.min = dtmp; | 639 aec->erl.min = dtmp; |
| 641 } | 640 } |
| 642 | 641 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 654 // A_NLP | 653 // A_NLP |
| 655 const float linout_average_level = | 654 const float linout_average_level = |
| 656 aec->linoutlevel.averagelevel.GetLatestMean(); | 655 aec->linoutlevel.averagelevel.GetLatestMean(); |
| 657 dtmp = 10 * static_cast<float>(log10(near_average_level / | 656 dtmp = 10 * static_cast<float>(log10(near_average_level / |
| 658 linout_average_level + 1e-10f)); | 657 linout_average_level + 1e-10f)); |
| 659 | 658 |
| 660 // subtract noise power | 659 // subtract noise power |
| 661 suppressedEcho = | 660 suppressedEcho = |
| 662 linout_average_level - safety * aec->linoutlevel.minlevel; | 661 linout_average_level - safety * aec->linoutlevel.minlevel; |
| 663 | 662 |
| 664 dtmp2 = 10 * static_cast<float>(log10(echo / suppressedEcho + 1e-10f)); | 663 aec->aNlp.instant = |
| 664 10 * static_cast<float>(log10(echo / suppressedEcho + 1e-10f)); |
| 665 | 665 |
| 666 aec->aNlp.instant = dtmp2; | |
| 667 if (dtmp > aec->aNlp.max) { | 666 if (dtmp > aec->aNlp.max) { |
| 668 aec->aNlp.max = dtmp; | 667 aec->aNlp.max = dtmp; |
| 669 } | 668 } |
| 670 | 669 |
| 671 if (dtmp < aec->aNlp.min) { | 670 if (dtmp < aec->aNlp.min) { |
| 672 aec->aNlp.min = dtmp; | 671 aec->aNlp.min = dtmp; |
| 673 } | 672 } |
| 674 | 673 |
| 675 aec->aNlp.counter++; | 674 aec->aNlp.counter++; |
| 676 aec->aNlp.sum += dtmp; | 675 aec->aNlp.sum += dtmp; |
| 677 aec->aNlp.average = aec->aNlp.sum / aec->aNlp.counter; | 676 aec->aNlp.average = aec->aNlp.sum / aec->aNlp.counter; |
| 678 | 677 |
| 679 // Upper mean | 678 // Upper mean |
| 680 if (dtmp > aec->aNlp.average) { | 679 if (dtmp > aec->aNlp.average) { |
| 681 aec->aNlp.hicounter++; | 680 aec->aNlp.hicounter++; |
| 682 aec->aNlp.hisum += dtmp; | 681 aec->aNlp.hisum += dtmp; |
| 683 aec->aNlp.himean = aec->aNlp.hisum / aec->aNlp.hicounter; | 682 aec->aNlp.himean = aec->aNlp.hisum / aec->aNlp.hicounter; |
| 684 } | 683 } |
| 685 | 684 |
| 686 // ERLE | 685 // ERLE |
| 687 const float nlpout_average_level = | 686 const float nlpout_average_level = |
| 688 aec->nlpoutlevel.averagelevel.GetLatestMean(); | 687 aec->nlpoutlevel.averagelevel.GetLatestMean(); |
| 689 // subtract noise power | 688 // subtract noise power |
| 690 suppressedEcho = | 689 suppressedEcho = |
| 691 nlpout_average_level - safety * aec->nlpoutlevel.minlevel; | 690 nlpout_average_level - safety * aec->nlpoutlevel.minlevel; |
| 691 dtmp = 10 * static_cast<float>(log10(echo / suppressedEcho + 1e-10f)); |
| 692 | 692 |
| 693 dtmp = 10 * static_cast<float>(log10(near_average_level / | |
| 694 nlpout_average_level + 1e-10f)); | |
| 695 dtmp2 = 10 * static_cast<float>(log10(echo / suppressedEcho + 1e-10f)); | |
| 696 | |
| 697 dtmp = dtmp2; | |
| 698 aec->erle.instant = dtmp; | 693 aec->erle.instant = dtmp; |
| 699 if (dtmp > aec->erle.max) { | 694 if (dtmp > aec->erle.max) { |
| 700 aec->erle.max = dtmp; | 695 aec->erle.max = dtmp; |
| 701 } | 696 } |
| 702 | 697 |
| 703 if (dtmp < aec->erle.min) { | 698 if (dtmp < aec->erle.min) { |
| 704 aec->erle.min = dtmp; | 699 aec->erle.min = dtmp; |
| 705 } | 700 } |
| 706 | 701 |
| 707 aec->erle.counter++; | 702 aec->erle.counter++; |
| (...skipping 1184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1892 | 1887 |
| 1893 int WebRtcAec_system_delay(AecCore* self) { | 1888 int WebRtcAec_system_delay(AecCore* self) { |
| 1894 return self->system_delay; | 1889 return self->system_delay; |
| 1895 } | 1890 } |
| 1896 | 1891 |
| 1897 void WebRtcAec_SetSystemDelay(AecCore* self, int delay) { | 1892 void WebRtcAec_SetSystemDelay(AecCore* self, int delay) { |
| 1898 assert(delay >= 0); | 1893 assert(delay >= 0); |
| 1899 self->system_delay = delay; | 1894 self->system_delay = delay; |
| 1900 } | 1895 } |
| 1901 } // namespace webrtc | 1896 } // namespace webrtc |
| OLD | NEW |