Abstract:
Presented herein are system(s), method(s), and apparatus for reducing on-chip memory requirements for audio decoding. In one embodiment, there is presented a method for decoding encoded audio signals. The method comprises fetching a first one or more tables from an off-chip memory; loading the first one or more tables to an on-chip memory; applying a first function to the encoded audio signals using the first one or more tables; fetching a second one or more tables from an off-chip memory after applying the first function; loading the second one or more tables to an on-chip memory; and applying a second function to the encoded audio signals, using the second one or more tables.

Description:
BACKGROUND OF THE INVENTION 
     Audio standards, such as MPEG-1, Layer 3 (also known as, and now referred to as MP3) employ lossy and lossless compression to reduce the memory and bandwidth requirements for storing and transmitting audio data. 
     During lossy compression, some of the original data is lost. Lossy compression includes digitization, windowing, time to frequency domain transformation, and quantization. A stochastic model of the human ear determines imperceptible portions of the original data. Accordingly, lossy compression realizes significant compression without perceptible degradation of the original signal. After lossy compression, the audio signal is represented by a series of symbols. 
     Lossless compression uses a variety of variable length codes for coding the symbols. The variable length codes for the symbols are designed to assign shorter codes to the most frequently occurring symbols and longer codes to the least frequently occurring symbols. The coding schemes include a number of tables that map the different symbols to different codes. 
     The encoded audio signal can then be transmitted and stored at a receiving terminal with an audio decoder. During play of the audio signal, the audio decoder decodes the variable length codes, inverse quantizes, transforms to the time domain, and dewindows the encoded audio signal, thereby reconstructing the original audio signal. Preferably, the foregoing occurs in real time, because most applications would require playing the audio signal at a specified speed. 
     The audio decoder is usually an integrated circuit. The audio decoder uses tables that map the different symbols to different codes to decode the variable length codes. The tables occupy approximately 50 KB of memory. In an integrated circuit, the amount of on-chip memory is limited and expensive. Although off-chip memory is less limited and less expensive, accessing off-chip memory is typically slower. Accessing the tables from off-chip memory may be too slow for audio decoding in real time. 
     Further limitations and disadvantages of conventional and traditional systems will become apparent to one of skill in the art through comparison of such systems with the invention as set forth in the remainder of the present application with reference to the drawings. 
     BRIEF SUMMARY OF THE INVENTION 
     Presented herein are system(s), method(s), and apparatus for reducing on-chip memory requirements for audio decoding. 
     In one embodiment, there is presented a method for decoding encoded audio signals. The method comprises fetching a first one or more tables from an off-chip memory; loading the first one or more tables into an on-chip memory; applying a first function to the encoded audio signals using the first one or more tables; fetching a second one or more tables from an off-chip memory after applying the first function; loading the second one or more tables into an on-chip memory; and applying a second function to the encoded audio signals, using the second one or more tables. 
     In another embodiment, there is presented an integrated circuit for decoding encoded audio signals. The integrated circuit comprises a direct memory access module, a memory, and an audio decoder. The direct memory access module fetches a first one or more tables from an off-chip memory. The memory stores the first one or more tables. The audio decoder applies a first function to the encoded audio signals using the first one or more tables. The direct memory access module fetches a second one or more tables from an off-chip memory after the audio decoder applies the first function. The memory stores the second one or more tables. The audio decoder applies a second function to the encoded audio signals, using the second one or more tables. 
     In another embodiment, there is presented an integrated circuit for decoding encoded audio signals. The integrated circuit comprises a memory, a direct memory access module, and an audio decoder. The direct memory access module is connected to the memory, and operable to fetch a first one or more tables from another memory and write the first one or more tables to the memory. The audio decoder is operably connected to access the first tables from the memory, and equipped to apply a first function to the encoded audio signals using the first one or more tables. The direct memory access module is operable to fetch a second one or more tables from the another memory after the audio decoder applies the first function and write the second one or more tables to the memory. The audio decoder is equipped to apply a second function to the encoded audio signals, using the second one or more tables. 
     These and other advantages, aspects and novel features of the invention, as well as details of illustrative aspects thereof, will be more fully understood from the following description and drawings. 
    
    
     
       BRIEF DESCRIPTION OF SEVERAL VIEWS OF THE DRAWINGS 
         FIG. 1  is a block diagram describing the encoding of audio signals; 
         FIG. 2  is a block diagram describing an exemplary audio decoder in accordance with an embodiment of the present invention; 
         FIG. 3  is a block diagram describing an exemplary integrated circuit in accordance with an embodiment of the present invention; 
         FIG. 4  is a flow diagram for decoding audio signal in accordance with an embodiment of the present invention, where the audio signal is encoded with MPEG-1, Layer 1 or 2; and 
         FIG. 5  is a flow diagram for decoding audio signal in accordance with an embodiment of the present invention, where the audio signal is encoded with MPEG-1, Layer 3. 
     
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
       FIG. 1  is a block diagram  800 C illustrating encoding of an exemplary audio signal A(t)  810 C by the MPEG encoder according to an embodiment of the present invention. The audio signal  810 C is sampled and the samples are grouped into frames  820 C (F 0  . . . F n ) of 1024 samples, e.g., (F x (0) . . . F x (1023)). The frames  820 C (F 0  . . . F n ) are grouped into windows  830 C (W 0  . . . W n ) that comprise 2048 samples or two frames, e.g., (W x (0) . . . W x (2047)). However, each window  830 C W x  has a 50% overlap with the previous window  830 C W x-1 . 
     Accordingly, the first 1024 samples of a window  830 C W x  are the same as the last 1024 samples of the previous window  830 C W x-1 . A window function w(t) is applied to each window  830 C (W 0  . . . W n ), resulting in sets (wW 0  . . . wW n ) of 2048 windowed samples  840 C, e.g., (wW x (0) . . . wW x (2047)). The modified discrete cosine transformation (MDCT) is applied to each set (wW 0  . . . wW n ) of windowed samples  840 C (wW x (0) . . . wW x (2047)), resulting sets (MDCT 0  . . . MDCT n ) of 1024 frequency coefficients. 
     The sets of frequency coefficients are then quantized and coded with Huffman symbols  870 . Header information  855 , side information  860 , and scale factors  865  are also added. The header information  855 , the side information  860 , and the scale factors  865  are encoded with variable length codes. 
     The Huffman coding and the variable length codes for the symbols are designed to assign shorter codes to the most frequently occurring symbols and longer codes to the least frequently occurring symbols. The coding schemes include a number of tables that map the different symbols to different codes. 
     In MPEG-1, layer 1 or 2, what is known as the audio elementary stream AES, comprises the header information  855 , sample information  857 , and scale factors  865 . In MPEG-1, Layer 3, the AES comprises the side information  860 , the scale factors  865 , and the Huffman data  870 . The AES can be multiplexed with other AESs. The multiplexed signal, known as the Audio Transport Stream (Audio TS) can then be stored and/or transported for playback on a playback device. The playback device can either be local or remotely located. 
     Where the playback device is remotely located, the multiplexed signal is transported over a communication medium, such as the Internet. During playback, the Audio TS is de-multiplexed, resulting in the constituent AES signals. The constituent AES signals are then decoded, resulting in the audio signal. 
     Referring now to  FIG. 2 , there is illustrated a block diagram describing an exemplary audio decoder  205  in accordance with an embodiment of the present invention. The audio decoder  205  comprises a header and bit allocation information processing module  210 , a side information decoder  215 , a scalar  220 , a Huffman decoder  225 , an inverse quantizer  230 , joint stereo module  235 , an alias reducer  240 , an IMDCT module  245 , and a synthesis sub-band filter  250 . Each of the foregoing can be implemented, for example, as hardware accelerator units under the control of a processor or controller. Each of the foregoing use different tables for decoding. The tables occupy approximately 50 KB of memory. 
     Referring now to  FIG. 3 , there is illustrated a block diagram describing an exemplary integrated circuit, configured in accordance with an embodiment of the present invention. The integrated circuit comprises an audio decoder  205  and on-chip memory  310 . The audio decoder  205  also has access to off-chip memory  320 . 
     The on-chip memory  310  can comprise Static Random Access Memory (SRAM). The on-chip memory  310  is generally expensive, and consumes a significant portion of the physical area of the integrated circuit. The off-chip memory  320  can comprise Dynamic Random Access Memory (DRAM) and is generally cheaper than the on-chip memory  310 . However, the off-chip memory  320  is also slower than the on-chip memory  310 . 
     The off-chip memory  320  stores each of the tables required by the portions of the audio decoder  205 . When specific portions of the audio decoder  205  decode the AES, a direct memory access module  315  fetches the appropriate tables from the off-chip memory  320  and loads the tables to the on-chip memory  310 . 
     The tables that are stored in the off-chip memory  320  are listed below for Layers  1 ,  2 , and  3 . 
     
       
         
               
               
             
               
               
               
             
           
               
                   
               
             
             
               
                   
                 Tables for Layers 1 and 2 
               
             
          
           
               
                   
                 MP3_bitrate[2][3][15] 
                 90 
               
               
                   
                 MP3_size_conv[2][4] 
                 8 
               
               
                   
                 MP3_decode_info_N[12] 
                 12 
               
               
                   
                 MP3_MainDataSlots[2][4][15] 
                 90 
               
               
                   
                 MP3_s_freq[2][4] 
                 8 
               
               
                   
                 MP3_L2_alloc_table0[14][16]; 
                 224 
               
               
                   
                 MP3_L2_alloc_table1[15][16]; 
                 240 
               
               
                   
                 MP3_L2_alloc_table2[4][16]; 
                 64 
               
               
                   
                 MP3_L2_alloc_table3[6][16]; 
                 96 
               
               
                   
                 MP3_L2_alloc_table4[15][16]; 
                 240 
               
               
                   
                 *MP3_L2_alloc_tables[5]; 
                 5 
               
               
                   
                 MP3_L2_alloc_sblim[5]; 
                 5 
               
               
                   
                 MP3_D_val_tab[17]; 
                 17 
               
               
                   
                 MP3_II_SBSType[16]; 
                 16 
               
               
                   
                 MP3_I_D_val_tab[16]; 
                 16 
               
               
                   
                 MP3_num_sf_tab[4]; 
                 4 
               
               
                   
                 MP3_Modulo3_tab[64]; 
                 64 
               
               
                   
                 MP3_SF_shift_tab[64]; 
                 64 
               
               
                   
                 MP3_Combined_SFC_tab[19][3]; 
                 114 
               
               
                   
                 MP3_Combined_SFC_shift_tab[19][3]; 
                 57 
               
               
                   
                 MP3_group_lookup[19]; 
                 19 
               
               
                   
                 MP3_steps_lookup[19][2]; 
                 38 
               
               
                   
                 MP3_bits_lookup[19]; 
                 19 
               
               
                   
                 MP3_jsb_table[3][4]; 
                 12 
               
               
                   
                 Tables for Hybrid 
                   
               
               
                   
                 MP3_win [4][36] 
                 288 
               
               
                   
                 MP3_imdct_bigCOS[36 + 12] 
                 96 
               
               
                   
                 MP3_imdct_bigCOS2[324] 
                 648 
               
               
                   
                 Data for Hybrid 
                   
               
               
                   
                 prevblck[2][SBLIMIT][SSLIMIT] 
                 2304 
               
               
                   
                 Tables for Sub-Band Synthesis 
                   
               
               
                   
                 MP3_fixed_A8[8][8] 
                 128 
               
               
                   
                 MP3_fixed_B8[8][8] 
                 128 
               
               
                   
                 MP3_fixed_B16[16][16] 
                 512 
               
               
                   
                 MP3_FilterCoeff[31*16+8] 
                 1008 
               
               
                   
                 MP3_delay_state_tab_even[16] 
                 16 
               
               
                   
                 MP3_delay_state_tab_odd[16] 
                 16 
               
               
                   
                 Data for Sub-Band Synthesis 
                   
               
               
                   
                 delay1[NUM_CHANNELS][2][17][8] 
                 1088 
               
               
                   
                 delay2[NUM_CHANNELS][2][17][8] 
                 1088 
               
               
                   
               
             
          
         
       
     
     
       
         
               
               
             
               
               
               
             
               
               
             
               
               
               
             
           
               
                   
               
               
                   
                 Table Sizes 
               
             
          
           
               
                   
                 Layer 3 
                 16 bits words 
               
               
                   
               
             
          
           
               
                   
                 Tables for header parsing 
               
             
          
           
               
                   
                 MP3_bitrate[2][3][15] 
                 90 
               
               
                   
                 MP3_size_conv[2][4] 
                 8 
               
               
                   
                 MP3_decode_info_N[12] 
                 12 
               
               
                   
                 MP3_MainDataSlots[2][4][15] 
                 90 
               
               
                   
                 MP3_III_gsi_N_1[5] 
                 5 
               
               
                   
                 MP3_III_gsi_N_2[8] 
                 8 
               
               
                   
                 MP3_III_gsi_N_3[8] 
                 8 
               
               
                   
                 MP3_slen[2][16] 
                 32 
               
               
                   
                 MP3_nr_of_sfb_block[6][3][4] 
                 72 
               
               
                   
                 Tables for Huffman decode 
                   
               
               
                   
                 MP3_FHDQ_case_tab 
                 16 
               
               
                   
                 MP3_FHD_tab[512] 
                 512 
               
               
                   
                 MP3_exp_pow_1_3_combined[4*16] 
                 64 
               
               
                   
                 MP3_pow_1_3[1024] 
                 1024 
               
               
                   
                 struct huffcodetab MP3_ht[HTN] 
                 102 
               
               
                   
                 *MP3_HuffLookupTable[HTN] 
                 34 
               
               
                   
                 MP3_LookupSize[HTN] 
                 34 
               
               
                   
                 MP3_HuffTree_1[7] 
                 7 
               
               
                   
                 MP3_HuffTree_2[17] 
                 17 
               
               
                   
                 MP3_HuffTree_3[17] 
                 17 
               
               
                   
                 MP3_HuffTree_5[31] 
                 31 
               
               
                   
                 MP3_HuffTree_6[31] 
                 31 
               
               
                   
                 MP3_HuffTree_7[71] 
                 71 
               
               
                   
                 MP3_HuffTree_8[71] 
                 71 
               
               
                   
                 MP3_HuffTree_9[71] 
                 71 
               
               
                   
                 MP3_HuffTree_10[127] 
                 127 
               
               
                   
                 MP3_HuffTree_11[127] 
                 127 
               
               
                   
                 MP3_HuffTree_12[127] 
                 127 
               
               
                   
                 MP3_HuffTree_13[511] 
                 511 
               
               
                   
                 MP3_HuffTree_15[511] 
                 511 
               
               
                   
                 MP3_HuffTree_16[511] 
                 511 
               
               
                   
                 MP3_HuffTree_24[512] 
                 512 
               
               
                   
                 MP3_HuffTree_32[31] 
                 31 
               
               
                   
                 MP3_HuffTree_33[31] 
                 31 
               
               
                   
                 MP3_LookupTab_1[8] 
                 8 
               
               
                   
                 MP3_LookupTab_2[64] 
                 64 
               
               
                   
                 MP3_LookupTab_3[64] 
                 64 
               
               
                   
                 MP3_LookupTab_5[64] 
                 64 
               
               
                   
                 MP3_LookupTab_6[64] 
                 64 
               
               
                   
                 MP3_LookupTab_7[64] 
                 64 
               
               
                   
                 MP3_LookupTab_8[64] 
                 64 
               
               
                   
                 MP3_LookupTab_9[64] 
                 64 
               
               
                   
                 MP3_LookupTab_10[64] 
                 64 
               
               
                   
                 MP3_LookupTab_11[64] 
                 64 
               
               
                   
                 MP3_LookupTab_12[64] 
                 64 
               
               
                   
                 MP3_LookupTab_13[256] 
                 256 
               
               
                   
                 MP3_LookupTab_15[256] 
                 256 
               
               
                   
                 MP3_LookupTab_16[256] 
                 256 
               
               
                   
                 MP3_LookupTab_24[256] 
                 256 
               
               
                   
                 MP3_LookupTab_32[64] 
                 64 
               
               
                   
                 MP3_LookupTab_33[16] 
                 16 
               
               
                   
                 Tables for Dequantization 
                   
               
               
                   
                 MP3_global_scale_tab[4] 
                 8 
               
               
                   
                 MP3_pow_m05_tab[2] 
                 4 
               
               
                   
                 MP3_pretab[22] 
                 22 
               
               
                   
                 MP3_pretab_null[22] 
                 22 
               
               
                   
                 Tables for Stereo decode 
                   
               
               
                   
                 MP3_tan_table1[16] 
                 32 
               
               
                   
                 MP3_tan_table2[16] 
                 32 
               
               
                   
                 MP3_pow_table1[16] 
                 32 
               
               
                   
                 MP3_pow_table2[16] 
                 32 
               
               
                   
                 Tables for Anti-Aliasing 
                   
               
               
                   
                 MP3_cs_ca[16] 
                 32 
               
               
                   
                 Tables for Hybrid 
                   
               
               
                   
                 MP3_win [4][36] 
                 288 
               
               
                   
                 MP3_mdct_bigCOS[36 + 12] 
                 96 
               
               
                   
                 MP3_mdct_bigCOS2[324] 
                 648 
               
               
                   
                 Data for Hybrid 
                   
               
               
                   
                 prevblck[2][SBLIMIT][SSLIMIT] 
                 2304 
               
               
                   
                 Tables for Sub-Band Synthesis 
                   
               
               
                   
                 MP3_fixed_A8[8][8] 
                 128 
               
               
                   
                 MP3_fixed_B8[8][8] 
                 128 
               
               
                   
                 MP3_fixed_B16[16][16] 
                 512 
               
               
                   
                 MP3_FilterCoeff[31*16+8] 
                 1008 
               
               
                   
                 MP3_delay_state_tab_even[16] 
                 16 
               
               
                   
                 MP3_delay_state_tab_odd[16] 
                 16 
               
               
                   
                 Data for Sub-Band Synthesis 
                   
               
               
                   
                 delay1[NUM_CHANNELS][2][17][8] 
                 1088 
               
               
                   
                 delay2[NUM_CHANNELS][2][17][8] 
                 1088 
               
               
                   
               
             
          
         
       
     
     As can be seen, storing each of the foregoing tables in the on-chip memory  310  would disadvantageously increase the requirements for the on-chip memory  310 . However, accessing the tables from the off-chip memory by each component of the audio decoder  205  would be inefficient and slow. 
     The processing speed requirements are less memory requirements by storing the tables in the off-chip memory  320 , and loading the tables used by each portion (e.g., header and bit allocation information processing module  210 , a side information decoder  215 , a scalar  220 , a Huffman decoder  225 , an inverse quantizer  230 , joint stereo module  235 , an alias reducer  240 , an IMDCT module  245 , synthesis sub-band filter  250 ) when the portion is decoder the encoded AES. 
     Referring now to  FIG. 4 , there is illustrated a flow diagram describing the decoding of layer 1 encoded audio data. At  405 , the audio decoder initializes. At  410 , the audio decoder  205  parses the header information. Additionally, during  410 , the audio decoder  205  makes a direct memory access (DMA) to fetch and load the tables for decoding the header information into the on-chip memory  310 . 
     At  415 , the audio decoder  205  parses the bit allocation table. Additionally, during  415 , the audio decoder  205  makes a direct memory access (DMA) to fetch and load the algorithm specific tables for decoding the remaining part of the header information into the on-chip memory  310 . During  420 , the audio decoder decodes the scale factors with the tables stored in the on-chip memory  310 . 
     At  430 , the audio decoder  205  decodes the Huffman coding. Additionally, during  430 , the audio decoder  205  makes a direct memory access (DMA) to fetch and load the Huffman tables for decoding the Huffman code into the on-chip memory  310 . During  435 , the audio decoder dequantizes the scale factors with the tables stored in the on-chip memory  310 . 
     At  440 , the audio decoder  205  reduces the aliasing. Additionally, during  440 , the audio decoder  205  makes a direct memory access (DMA) to fetch and load the tables for alias reduction and data from a previous block for overlap add into the on-chip memory  310 , and writes output data for the overlap add to the off-chip memory  320 . 
     At  445 , the audio decoder  205  synthesizes and filters sub-bands. Additionally, during  445 , the audio decoder  205  makes a direct memory access (DMA) to fetch and load the tables for alias reduction and delay buffer data from earlier, into the on-chip memory  310 , and writes output delay buffer data to the off-chip memory  320 . 
     Referring now to  FIG. 5 , there is illustrated a flow diagram describing the decoding of layer 3 encoded audio data. At  505 , the audio decoder is initialized. At  510 , the audio decoder  205  parses the header information. Additionally, during  510 , the audio decoder  205  makes a direct memory access (DMA) to fetch and load the common tables for decoding the header information into the on-chip memory  310 . 
     At  515 , the audio decoder  205  parses the side information. Additionally, during  515 , the audio decoder  205  makes a direct memory access (DMA) to fetch and load the algorithm specific tables for decoding the remaining part of the header information into the on-chip memory  310 . During  520 , the audio decoder parses the scale factors with the tables stored in the on-chip memory  310 . 
     At  525 , the audio decoder  205  decodes the Huffman coding. Additionally, during  525 , the audio decoder  205  makes a direct memory access (DMA) to fetch and load the Huffman tables for decoding the Huffman code into the on-chip memory  310 . During  530 ,  535 , and  540 , the audio decoder dequantizes, reorders the spectrum, and processes joint stereo information using the tables stored in the on-chip memory  310 . 
     At  545 , the audio decoder  205  reduces the aliasing. Additionally, during  545 , the audio decoder  205  makes a direct memory access (DMA) to fetch and load the tables for alias reduction and data from a previous block for overlap add into the on-chip memory  310 , and writes output data for the overlap add to the off-chip memory  320 . 
     At  550 , the audio decoder  205  synthesizes and filters sub-bands. Additionally, during  550 , the audio decoder  205  makes a direct memory access (DMA) to fetch and load the tables for alias reduction and delay buffer data from earlier, into the on-chip memory  310 , and writes output delay buffer data to the off-chip memory  320 . 
     The circuit as described herein may be implemented as a board level product, as a single chip, application specific integrated circuit (ASIC), or with varying levels of the system integrated on a single chip with other portions of the system as separate components. The degree of integration of the monitoring system may primarily be determined by speed of incoming MPEG packets, and cost considerations. Because of the sophisticated nature of modern processors, it is possible to utilize a commercially available processor, which may be implemented external to an ASIC implementation of the present system. Alternatively, if the processor is available as an ASIC core or logic block, then the commercially available processor can be implemented as part of an ASIC device wherein the memory storing instructions is implemented as firmware. 
     While the invention has been described with reference to certain embodiments, it will be understood by those skilled in the art that various changes may be made and equivalents may be substituted without departing from the scope of the invention. In addition, many modifications may be made to adapt particular situation or material to the teachings of the invention without departing from its scope. Therefore, it is intended that the invention not be limited to the particular embodiment(s) disclosed, but that the invention will include all embodiments falling within the scope of the appended claims.