Analog.com Analog Dialogue Wiki 简体中文
EngineerZone
EngineerZone
  • Log In
  • Site
  • Search
  • User
  • Support

    Popular Forums

    • RF and Microwave
    • Power Management
    • Video
    • FPGA Reference Designs
    • Precision ADCs
    • Linux Software Drivers
    • SigmaDSP Processors & SigmaStudio Dev. Tool

    Product Forums

    • A2B
    • Amplifiers
    • Analog Microcontrollers
    • Clock and Timing
    • Data Converters
    • Direct Digital Synthesis (DDS)
    • Energy Monitoring and Metering
    • Interface and Isolation
    • MEMS Inertial Sensors
    • Processors and DSP
    • Switches/Multiplexers
    • Temperature Sensors
    • Voltage References
    View All

    Application Forums

    • Audio
    • Automated Test Equipment (ATE)
    • Condition-Based Monitoring
    • Depth, Perception & Ranging Technologies
    • Embedded Vision Sensing Library
    • Motor Control Hardware Platforms
    • Optical Sensing
    • Precision Technology Signal Chains Library
    • Video
    • Wireless Sensor Networks Reference Library

    Design Center Forums

    • ACE Evaluation Software
    • ADEF System Platforms
    • Design Tools and Calculators
    • FPGA Reference Designs
    • Linux Software Drivers
    • Microcontroller no-OS Drivers
    • Reference Designs
    • Signal Chain Power (SCP)
    • Software Interface Tools
    • System Demonstration Platform (SDP) Support
  • Learn

    Highlighted Webinar

    Audio Design Solutions for Augmented and Virtual Reality (AR/VR) Glasses

    Recent Discussions

    • Standalone Data logging using ADALM2000
    • About sdr.tx(). Can I change the transmitter frequency after call this function?
    • About the values of CurV1,2 displayed in the cursors frame of scopy.
    • Purpose of "Load" in Scopy signal generator configuration GUI
    • about the transient response experiment example of RL Circuit using adalm2000

    Places

    • ADI Education Home
    • ADI Education China
    • ADI Education India
    • ADI Education Philippines
    • StudentZone (Analog Dialogue)
    • Virtual Classroom

    Latest Webinars

    • Audio Design Solutions for Augmented and Virtual Reality (AR/VR) Glasses
    • Robust Industrial Motor Encoder Signal Chain Solutions
    • Precision Low Power Measurement Solutions for Intelligent Edge
    • Advantages of Integrating Digital Power System Management (DPSM) into your Design
    • Optimizing GaN and GaAs RF Amplifier Performance Using Novel Biasing Techniques
    View All Webinars
  • Community Hub

    Challenge Yourself!

      KCC's Quizzes AQQ231 about Birthdays and Cake Candles
    View All

    Places

    • Community Help
    • Logic Lounge

    Resources

    • EZ Code of Conduct
    • Getting Started Guide
    • ADI: Words Matter
    • Community Help Videos
    View All
  • Blogs

    Highlighted Blogs

    Understanding Public Key Infrastructures

     

    Share Your Insights! How Can We Improve Your Engineering Design Needs?

    Latest Blogs

    • 10BASE-T1L Makes Powering Intelligent Field Instruments Painless
    • Using Python To Control The Pluto Radio And Plot Data
    • Resistance is NOT Futile
    • What is The Continuity of Engineering?
    • Move Over Sensors: Actuators Are Entering The Smart Factory Stage
    Read All Blogs

    ADI Blogs

    • EZ Spotlight
    • The Engineering Mind
  • Partners

    Electronic Design Services - PartnerZone

    • Boston Engineering
    • Calian, Advanced Technologies
    • Colorado Engineering Inc. (DBA CAES AT&E)
    • Clockworks Signal Processing
    • Epiq Solutions
    • Fidus
    • PalmSens
    • Richardson RFPD
    • Tri-Star Design, Inc.
    • VadaTech
    • Vanteon
    • X-Microwave
    View All
SigmaDSP Processors & SigmaStudio Dev. Tool
  • Processors and DSP
SigmaDSP Processors & SigmaStudio Dev. Tool
Documents Thoughts on using index selectable filters...
  • Forums
  • Members
  • Tags
  • More
  • Cancel
  • Documents
  • +AD193x: FAQ
  • +ADAU1401AEBZ: FAQ
  • +ADAU144x: FAQ
  • +ADAU1452: FAQ
  • +ADAU145x: FAQ
  • -ADAU1701: FAQ
    • ADAU1701 Input and Output Signal Routing
    • ADAU1701: ADC resistor values for higher sample rates
    • Implementing Safeload Writes on the ADAU1701
    • My 2IN4OUT Proto with SPDIF based on ADAU1701
    • Setting the PLL mode for the ADAU1701 at different sample rates
    • Thoughts on using index selectable filters...
    • Using hardware data capture (trap) registers with the DSP Readback cell (AD1940, ADAU1701)
  • +ADAU1701MINIZ- FAQ
  • +ADAU1761: FAQ
  • +ADAU1772: FAQ
  • +ADI: FAQ
  • +AN-951: FAQ
  • +bitwise logic: FAQ
  • +Compressor Table Format: FAQ
  • +Creating a simple balance crossfade control: FAQ
  • +Creating constant-dB envelope decay using an existing linear decay algorithm: FAQ
  • +Crossover with more than 3 bands: FAQ
  • +E2PROM: FAQ
  • +EEPROM: FAQ
  • +EVAL DAU144XEBZ: FAQ
  • +EVAL-ADAU1781Z: FAQ
  • +Excluding Cells from the Exported System Files: FAQ
  • +GPIO button: FAQ
  • +GPIOs or Aux ADCs: FAQ
  • +How do I execute a software safeload write?: FAQ
  • +IIR coefficient filter: FAQ
  • +IIR filter: FAQ
  • +Peak Full Range Compressor: FAQ
  • +Preserving "Ear-candy": FAQ
  • +Push Button Volume: FAQ
  • +self-boot EEPROM image: FAQ
  • +Sigma300 Family Products: FAQ
  • +SigmaDSP: FAQ
  • +SigmaStudio: FAQ
  • +single precision VS double precision: FAQ
  • +Stimulus-Probe Capability and Limitations: FAQ
  • +Stopwatch to Count Successive Samples: FAQ
  • +Toolbox into the schematic tab: FAQ
  • +USB communications between the PC and SigmaDSP: FAQ
  • +Using Hierarchy Boards to create re-usable code: FAQ

Thoughts on using index selectable filters...

I recently was working on an ADAU1701 project where I wanted to select from multiple possible filter banks. My first approach was to create multiple filters in the project, split the audio signal to go through all of the filters, and then select the desired output using a multiplexer. While this approach worked, it required a lot of program instructions. In fact, it was filling up the entire program memory!

Here's a simple example illustrating this approach:

Unfortunately, using branched filter banks will drastically increase the number of instructions executed in a program, even though only one filter bank is being used at any given time. Here's the reason why:

The ADAU1701 SigmaDSP is a steam-based processor. It has a deterministic program counter. The program counter always steps through from the beginning of the program to the end of of the program. This happens on every sample. When the SigmaStudio project is compiled, all of the algorithms in the project are converted into program instructions and are assigned a location in program memory. This happens regardless of whether the actual audio path for individual algorithms is being used at any given time.

This means that all algorithms will occupy space in program memory, and since the program counter is deterministic, every instruction will be executed on every frame of the program. As a result, in my example above, both filters will be executed every time the program loops, even though only one output path is being used. That's simply the nature of the SigmaDSP core architecture.

So, how can I get multiple filters in parallel, and only select one set of filters at a given time? The solution to this problem is to use index-selectable filters.

Because of the nature of the SigmaDSP architecture, it is wasteful to put multiple sets of filters in the project if only one path is going to be used at any given time. So, my first approach was not the best way of solving the problem. In this case, instead of creating multiple "instances" of the filters, it is better to create a single "instance", and to store multiple sets of filters in memory instead. This is usually much better from a resource perspective, since parameter memory is more abundant than program memory.

Here is an example of an algorithm in SigmaStudio that implements a single "instance" of a filter and allows users to store multiple sets of parameters for that filter: https://wiki.analog.com/resources/tools-software/sigmastudio/toolbox/filters/general2ndorderindexselectable

The red index input pin for this cell selects a single set of filter coefficients from the different options in memory. This way, only one filter is executed per audio sample, but multiple options for the filter coefficients are stored in memory.

If one filter is not enough, then there is another option in the SigmaStudio library that allows users to store entire banks of filters that can be recalled using an index. The IdxSelectable Indp. Multiple Band Filter is a great example:

https://wiki.analog.com/resources/tools-software/sigmastudio/toolbox/filters/idxselectableindpmultiplebandfilter

Here is an example implementing this approach:

This implements the same functionality as my original approach, but uses fewer program instructions!

If you want to learn more, here are some more resources...

  • Filter examples, including index filters: https://wiki.analog.com/resources/tools-software/sigmastudio/tutorials/filterexamples
  • EngineerZone thread showing how to select EQ presets with GPIOs:  http://ez.analog.com/thread/14552
  • Application note including an example of an index-selectable filter: http://www.analog.com/static/imported-files/application_notes/AN-951.pdf
  • Share
  • History
  • More
  • Cancel
Related
Recommended
Social
Quick Links
  • About ADI
  • ADI Signals+
  • Analog Dialogue
  • Careers
  • Contact us
  • Investor Relations
  • News Room
  • Quality & Reliability
  • Sales & Distribution
  • Incubators
Languages
  • English
  • 简体中文
  • 日本語
Newsletter

Interested in the latest news and articles about ADI products, design tools, training and events? Subscribe today!

Sign Up
Analog Logo
©1995 - 2023 Analog Devices, Inc. All Rights Reserved
沪ICP备09046653号-1
  • Sitemap
  • Legal
  • Privacy & Security
  • Privacy Settings
EngineerZone Uses cookies to ensure you get the best experience in our community. For more information on cookies, please read our Privacy & Security Statement.