Evolving software demands
Off-the-shelf software building blocks are increasingly popular for a
number of reasons. Perhaps the most important reason is that both
signal processing applications and the processors that run them are
becoming more complicated. At the same time, engineering teams are
shrinking at many companies. These factors make it more difficult for
development groups to create all of the software for an application on
their own.
In addition, as signal processing technology proliferates into a
growing range of application areas, many development groups that lack
specialized expertise in DSP software need to incorporate signal
processing functionality into their products. In some
cases—particularly when signal processing is a minor component of the
product—it is better to buy the signal-processing technology than to
hire or train signal processing specialists.
Increasing time-to-market and cost pressures are additional factors,
particularly for the growing number of signal processing applications
targeting consumer markets. These pressures push designers to use
off-the-shelf components to reduce development time, cost, and risk.
Last but not least, many products are based on standards. It is
typically difficult to implement these standards in ways that
differentiate the product. This is particularly true for applications
based on well-established standards. For example, highly optimized
G.7xx voice codec implementations are available for a broad range of
processors. It is hard to create a new codec implementation that has a
significant advantage—such as smaller memory footprint—over these
existing implementations. “Reinventing” such commoditized components is
a poor use of limited engineering resources. Instead, companies
increasingly focus their efforts on aspects of the product where there
is room to gain an advantage. For example, a company might be able to
devise a post-processing filter that makes the output of the G.7xx
codec sound better.
Potential pitfalls
Off-the-shelf software building blocks can provide many benefits, but
they also have many potential drawbacks. A key problem is that the
software may not match the application needs. As a simple example of
this, there are many types of filters. The filter functions included in
a library of building blocks might not be the right kind of filter for
your application.
Getting various software building blocks to work together can also
present serious challenges. In some cases, the processor vendor
provides a “framework” to ease integration, but even then integration
requires more than just snapping components together. We discuss this
topic further at the end of the article.
It can also be difficult to get accurate information about the quality
and performance of the available software building blocks. This is a
significant problem because much of this software comes from small
companies with limited track records—which makes it hard to know what
quality to expect. The issue of quality is particularly critical for
newer application areasf and for applications where new standards have
been introduced. Software for these applications is typically less
mature and therefore more likely to be buggy or poorly optimized.
Customer support can also be a stumbling block. When a problem arises,
the software vendor may be slow to respond or unable to resolve the
issue. And when a problem crops up in integration, it may not be
obvious which software component is to blame. To make matters worse,
the small companies selling signal processing software sometimes are
acquired, shift their business focus, or go out of business—and any of
these moves can cause them to cease supporting their earlier products.
Challenges can also arise for companies attempting to develop their own
reusable software components. This is particularly true for larger
companies, where there are multiple development groups with little
interaction. A key challenge for companies developing their own
software components is finding the right balance between completing the
current product quickly at minimum cost and investing enough time and
effort to create widely reusable components.