Done! A bit impressed with myself.
Our product needs the function of echo cancellation, three possible technical solutions were identified,
1) use MCU to detect audio out and audio in audio signals, write an algorithm to calculate the strength of the two sides of the sound signal, according to the strength of the audio out and audio in between the two optional channel switching, to achieve the half-duplex call effect, but now on the market are full-duplex call effect, half-duplex will make the product lower competitive
(2) Use the echo cancellation algorithm from CPU vendor, the actual test echo elimination is not clean enough by all the adjustable parameters tuning and many round discussion with vendor, far from the expected effect. the feedback from vendor is to improve the housing to isolate the MIC as far as possible from speaker, But no room to change the housing due to ID design, sound quality and volume requirements.
(3) Download the open source echo cancellation algorithms such as webrtc and speex from the Internet, and port them to the product after cross-compiling.
4) Purchase the algorithms from a company that specializes in audio algorithms, but each product would require additional costs, which would greatly reduce the competitiveness of the product.
After weighing the options, I decided to do an in-depth research on the solution of using open source algorithms;
So, I downloaded a series of echo cancellation codes from github, gitee and other sites, both in C and matlab.
Synthesize the two voices with octave to generate a section of a double-talk scene with the near-end mic capture voice as well as the far-end reference voice.
Then run the code downloaded online for echo cancellation, analyze the output audio and pick the algorithm that works the best among them.
From the results, the AEC algorithm of webrtc audio processing is not good, the echo cancellation is not clean, and there is obvious swallowing of words in the double-talk scene. The AEC3 algorithm of webrtc audio processing is clean, but it suppresses the sound of the other end of the double-talk very much, and the sound is intermittent and unnatural;
The speex has a slight echo, it is best to find a matlab language implementation of the aec algorithm, echo elimination is very clean, double speak only a slight swallowing of words phenomenon.
Then, I use visual studio to compile and debug the open source code of webrtc audioprocessing aec, refer to the above aec algorithm of matlab to modify the code, use online debugging to set breakpoints, single-step running and other analysis of the value of the statement-by-step changes, and ultimately get the data and the results of the aec algorithm of the matlab language are identical The final data obtained is exactly the same as the result of the aec algorithm in matlab;
Today compiled to the product, the MIC and SPEAKER gain adjusted to a reasonable value, and then the actual call to test the effect of echo cancellation, the results are surprisingly good.
Thereby, there is hope to design a product that can reach sales above the small target.
The above is the detailed content of Best solution to AEC by porting matlab/octave algorithm to C. For more information, please follow other related articles on the PHP Chinese website!

C is not dead, but has flourished in many key areas: 1) game development, 2) system programming, 3) high-performance computing, 4) browsers and network applications, C is still the mainstream choice, showing its strong vitality and application scenarios.

The main differences between C# and C are syntax, memory management and performance: 1) C# syntax is modern, supports lambda and LINQ, and C retains C features and supports templates. 2) C# automatically manages memory, C needs to be managed manually. 3) C performance is better than C#, but C# performance is also being optimized.

You can use the TinyXML, Pugixml, or libxml2 libraries to process XML data in C. 1) Parse XML files: Use DOM or SAX methods, DOM is suitable for small files, and SAX is suitable for large files. 2) Generate XML file: convert the data structure into XML format and write to the file. Through these steps, XML data can be effectively managed and manipulated.

Working with XML data structures in C can use the TinyXML or pugixml library. 1) Use the pugixml library to parse and generate XML files. 2) Handle complex nested XML elements, such as book information. 3) Optimize XML processing code, and it is recommended to use efficient libraries and streaming parsing. Through these steps, XML data can be processed efficiently.

C still dominates performance optimization because its low-level memory management and efficient execution capabilities make it indispensable in game development, financial transaction systems and embedded systems. Specifically, it is manifested as: 1) In game development, C's low-level memory management and efficient execution capabilities make it the preferred language for game engine development; 2) In financial transaction systems, C's performance advantages ensure extremely low latency and high throughput; 3) In embedded systems, C's low-level memory management and efficient execution capabilities make it very popular in resource-constrained environments.

The choice of C XML framework should be based on project requirements. 1) TinyXML is suitable for resource-constrained environments, 2) pugixml is suitable for high-performance requirements, 3) Xerces-C supports complex XMLSchema verification, and performance, ease of use and licenses must be considered when choosing.

C# is suitable for projects that require development efficiency and type safety, while C is suitable for projects that require high performance and hardware control. 1) C# provides garbage collection and LINQ, suitable for enterprise applications and Windows development. 2)C is known for its high performance and underlying control, and is widely used in gaming and system programming.

C code optimization can be achieved through the following strategies: 1. Manually manage memory for optimization use; 2. Write code that complies with compiler optimization rules; 3. Select appropriate algorithms and data structures; 4. Use inline functions to reduce call overhead; 5. Apply template metaprogramming to optimize at compile time; 6. Avoid unnecessary copying, use moving semantics and reference parameters; 7. Use const correctly to help compiler optimization; 8. Select appropriate data structures, such as std::vector.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Zend Studio 13.0.1
Powerful PHP integrated development environment

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

SublimeText3 English version
Recommended: Win version, supports code prompts!

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 Chinese version
Chinese version, very easy to use
