mat_lib.c
上传用户:csczyc
上传日期:2021-02-19
资源大小:1051k
文件大小:22k
源码类别:

语音压缩

开发平台:

C/C++

  1. /*
  2.   mat_lib.c: Matrix and vector manipulation library
  3. */
  4. #include "spbstd.h"
  5. #include "mathhalf.h"
  6. #include "wmops.h"
  7. #include "mat.h"
  8. /***************************************************************************
  9.  *
  10.  *   FUNCTION NAME: v_add
  11.  *
  12.  *   PURPOSE:
  13.  *
  14.  *     Perform the addition of the two 16 bit input vector with
  15.  *     saturation.
  16.  *
  17.  *   INPUTS:
  18.  *
  19.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  20.  *                     values fall in the range 
  21.  *                     0xffff 8000 <= vec1 <= 0x0000 7fff.
  22.  *
  23.  *     vec2            16 bit short signed integer (Shortword) vector whose 
  24.  *                     values falls in the range 
  25.  *                     0xffff 8000 <= vec2 <= 0x0000 7fff.
  26.  *
  27.  *     n               size of input vectors.
  28.  *
  29.  *   OUTPUTS:
  30.  *
  31.  *     none
  32.  *
  33.  *   RETURN VALUE:
  34.  *
  35.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  36.  *                     values fall in the range
  37.  *                     0xffff 8000 <= vec1[] <= 0x0000 7fff.
  38.  *
  39.  *   IMPLEMENTATION:
  40.  *
  41.  *     Perform the addition of the two 16 bit input vectors with
  42.  *     saturation.
  43.  *
  44.  *     vec1 = vec1 + vec2
  45.  *
  46.  *     vec1[] is set to 0x7fff if the operation results in an
  47.  *     overflow.  vec1[] is set to 0x8000 if the operation results
  48.  *     in an underflow.
  49.  *
  50.  *   KEYWORDS: add, addition
  51.  *
  52.  *************************************************************************/
  53. Shortword *v_add(Shortword *vec1,Shortword *vec2,Shortword n)
  54. {
  55.     Shortword i;
  56. Longword L_temp;
  57.     for(i=0; i < n; i++) {
  58.       /* vec1[i] = add(vec1[i],vec2[i]);  //  data_move();mark del */
  59.         L_temp = _sadd2((Longword)(vec1[i]),(Longword)(vec2[i]));
  60.         vec1[i] = (Shortword) (0x0000ffffL & L_temp);
  61.     }
  62.     return(vec1);
  63. }
  64. /***************************************************************************
  65.  *
  66.  *   FUNCTION NAME: L_v_add
  67.  *
  68.  *   PURPOSE:
  69.  *
  70.  *     Perform the addition of the two 32 bit input vector with
  71.  *     saturation.
  72.  *
  73.  *   INPUTS:
  74.  *
  75.  *     L_vec1          32 bit long signed integer (Longword) vector whose 
  76.  *                     values fall in the range 
  77.  *                     0x8000 0000 <= L_vec1 <= 0x7fff ffff.
  78.  *
  79.  *     L_vec2          32 bit long signed integer (Longword) vector whose 
  80.  *                     values falls in the range 
  81.  *                     0x8000 0000 <= L_vec2 <= 0x7fff ffff.
  82.  *
  83.  *     n               size of input vectors.
  84.  *
  85.  *   OUTPUTS:
  86.  *
  87.  *     none
  88.  *
  89.  *   RETURN VALUE:
  90.  *
  91.  *     L_vec1          32 bit long signed integer (Longword) vector whose 
  92.  *                     values fall in the range
  93.  *                     0x8000 0000 <= L_vec1[] <= 0x7fff ffff.
  94.  *
  95.  *   IMPLEMENTATION:
  96.  *
  97.  *     Perform the addition of the two 32 bit input vectors with
  98.  *     saturation.
  99.  *
  100.  *     L_vec1 = L_vec1 + L_vec2
  101.  *
  102.  *     L_vec1[] is set to 0x7fff ffff if the operation results in an
  103.  *     overflow.  L_vec1[] is set to 0x8000 0000 if the operation results
  104.  *     in an underflow.
  105.  *
  106.  *   KEYWORDS: add, addition
  107.  *
  108.  *************************************************************************/
  109. Longword *L_v_add(Longword *L_vec1,Longword *L_vec2,Shortword n)
  110. {
  111.     Shortword i;
  112.     for(i=0; i < n; i++) {
  113.       L_vec1[i] = L_add(L_vec1[i],L_vec2[i]); //   L_data_move();mark del
  114.     }
  115.     return(L_vec1);
  116. }
  117. /***************************************************************************
  118.  *
  119.  *   FUNCTION NAME: v_equ
  120.  *
  121.  *   PURPOSE:
  122.  *
  123.  *     Copy the contents of one 16 bit input vector to another
  124.  *
  125.  *   INPUTS:
  126.  *
  127.  *     vec2            16 bit short signed integer (Shortword) vector whose 
  128.  *                     values falls in the range 
  129.  *                     0xffff 8000 <= vec2 <= 0x0000 7fff.
  130.  *
  131.  *     n               size of input vector
  132.  *
  133.  *   OUTPUTS:
  134.  *
  135.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  136.  *                     values fall in the range 
  137.  *                     0xffff 8000 <= vec1 <= 0x0000 7fff.
  138.  *
  139.  *   RETURN VALUE:
  140.  *
  141.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  142.  *                     values fall in the range
  143.  *                     0xffff 8000 <= vec1[] <= 0x0000 7fff.
  144.  *
  145.  *   IMPLEMENTATION:
  146.  *
  147.  *     Copy the contents of one 16 bit input vector to another
  148.  *
  149.  *     vec1 = vec2
  150.  *
  151.  *   KEYWORDS: equate, copy
  152.  *
  153.  *************************************************************************/
  154.  Shortword *v_equ(Shortword *vec1,Shortword *vec2,Shortword n) 
  155.  {                                                             
  156.      Shortword i;                                              
  157.                                                                
  158.      for(i=0; i < n; i++) {                                    
  159.        vec1[i] = vec2[i];   // data_move();mark del            
  160.      }                                                         
  161.      return(vec1);                                             
  162.  }                                                             
  163. /***************************************************************************
  164.  *
  165.  *   FUNCTION NAME: v_equ_shr
  166.  *
  167.  *   PURPOSE:
  168.  *
  169.  *     Copy the contents of one 16 bit input vector to another with shift
  170.  *
  171.  *   INPUTS:
  172.  *
  173.  *     vec2            16 bit short signed integer (Shortword) vector whose 
  174.  *                     values falls in the range 
  175.  *                     0xffff 8000 <= vec2 <= 0x0000 7fff.
  176.  *     scale           right shift factor
  177.  *     n               size of input vector
  178.  *
  179.  *   OUTPUTS:
  180.  *
  181.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  182.  *                     values fall in the range 
  183.  *                     0xffff 8000 <= vec1 <= 0x0000 7fff.
  184.  *
  185.  *   RETURN VALUE:
  186.  *
  187.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  188.  *                     values fall in the range
  189.  *                     0xffff 8000 <= vec1[] <= 0x0000 7fff.
  190.  *
  191.  *   IMPLEMENTATION:
  192.  *
  193.  *     Copy the contents of one 16 bit input vector to another with shift
  194.  *
  195.  *     vec1 = vec2>>scale
  196.  *
  197.  *   KEYWORDS: equate, copy
  198.  *
  199.  *************************************************************************/
  200. Shortword *v_equ_shr(Shortword *vec1,Shortword *vec2,Shortword scale,
  201.      Shortword n)
  202. {
  203.     Shortword i;
  204.     Longword L_vec2,L_vec1;
  205.     for(i=0; i < n; i++) {
  206. /*  vec1[i] = shr(vec2[i],scale);  //  data_move();mark del    */
  207.   L_vec2 = (Longword)vec2[i];                     
  208.     L_vec1 = _sshvr(L_vec2,scale);                
  209.   vec1[i] = (Shortword) (0x0000ffffL & L_vec1);
  210.     }
  211.     return(vec1);
  212. }
  213. /***************************************************************************
  214.  *
  215.  *   FUNCTION NAME: L_v_equ
  216.  *
  217.  *   PURPOSE:
  218.  *
  219.  *     Copy the contents of one 32 bit input vector to another
  220.  *
  221.  *   INPUTS:
  222.  *
  223.  *     L_vec2          32 bit long signed integer (Longword) vector whose 
  224.  *                     values falls in the range 
  225.  *                     0x8000 0000 <= L_vec2 <= 0x7fff ffff.
  226.  *
  227.  *     n               size of input vector
  228.  *
  229.  *   OUTPUTS:
  230.  *
  231.  *     L_vec1          32 bit long signed integer (Longword) vector whose 
  232.  *                     values fall in the range 
  233.  *                     0x8000 0000 <= L_vec1 <= 0x7fff ffff.
  234.  *
  235.  *   RETURN VALUE:
  236.  *
  237.  *     L_vec1          32 bit long signed integer (Longword) vector whose 
  238.  *                     values fall in the range
  239.  *                     0x8000 0000 <= L_vec1[] <= 0x7fff ffff.
  240.  *
  241.  *   IMPLEMENTATION:
  242.  *
  243.  *     Copy the contents of one 32 bit input vector to another
  244.  *
  245.  *     vec1 = vec2
  246.  *
  247.  *   KEYWORDS: equate, copy
  248.  *
  249.  *************************************************************************/
  250. Longword *L_v_equ(Longword *L_vec1,Longword *L_vec2,Shortword n)
  251. {
  252.     Shortword i;
  253.     for(i=0; i < n; i++) {
  254.       L_vec1[i] = L_vec2[i];  //   L_data_move();mark del
  255.     }
  256.     return(L_vec1);
  257. }
  258. /***************************************************************************
  259.  *
  260.  *   FUNCTION NAME: v_inner
  261.  *
  262.  *   PURPOSE:
  263.  *
  264.  *     Compute the inner product of two 16 bit input vectors
  265.  *     with saturation and truncation.  Output is a 16 bit number.
  266.  *
  267.  *   INPUTS:
  268.  *
  269.  *     vec1            16 bit short signed integer (Shortword) whose value
  270.  *                     falls in the range 0xffff 8000 <= vec1 <= 0x0000 7fff.
  271.  *
  272.  *     vec2            16 bit short signed integer (Shortword) whose value
  273.  *                     falls in the range 0xffff 8000 <= vec2 <= 0x0000 7fff.
  274.  *
  275.  *     n               size of input vectors
  276.  *
  277.  *     qvec1           Q value of vec1
  278.  *
  279.  *     qvec2           Q value of vec2
  280.  *
  281.  *     qout            Q value of output
  282.  *
  283.  *   OUTPUTS:
  284.  *
  285.  *     none
  286.  *
  287.  *   RETURN VALUE:
  288.  *
  289.  *     innerprod       16 bit short signed integer (Shortword) whose value
  290.  *                     falls in the range
  291.  *                     0xffff 8000 <= innerprod <= 0x0000 7fff.
  292.  *
  293.  *   IMPLEMENTATION:
  294.  *
  295.  *     Compute the inner product of the two 16 bit input vectors.
  296.  *     The output is a 16 bit number.
  297.  *
  298.  *   KEYWORDS: inner product
  299.  *
  300.  *************************************************************************/
  301. Shortword v_inner(Shortword *vec1,Shortword *vec2,Shortword n,
  302.   Shortword qvec1,Shortword qvec2,Shortword qout)
  303. {
  304.     Shortword i;
  305.     Shortword innerprod;
  306.     Longword L_temp;
  307.     L_temp = 0;   //data_move();mark del
  308.     for(i = 0; i < n; i++)
  309.         L_temp = L_mac(L_temp,vec1[i],vec2[i]);
  310.     innerprod = extract_h(L_shl(L_temp,(Shortword)(qout-((qvec1+qvec2+1)-16))));
  311.     return(innerprod);
  312. }
  313. /***************************************************************************
  314.  *
  315.  *   FUNCTION NAME: L_v_inner
  316.  *
  317.  *   PURPOSE:
  318.  *
  319.  *     Compute the inner product of two 16 bit input vectors
  320.  *     with saturation and truncation.  Output is a 32 bit number.
  321.  *
  322.  *   INPUTS:
  323.  *
  324.  *     vec1            16 bit short signed integer (Shortword) whose value
  325.  *                     falls in the range 0xffff 8000 <= vec1 <= 0x0000 7fff.
  326.  *
  327.  *     vec2            16 bit short signed integer (Shortword) whose value
  328.  *                     falls in the range 0xffff 8000 <= vec2 <= 0x0000 7fff.
  329.  *
  330.  *     n               size of input vectors
  331.  *
  332.  *     qvec1           Q value of vec1
  333.  *
  334.  *     qvec2           Q value of vec2
  335.  *
  336.  *     qout            Q value of output
  337.  *
  338.  *   OUTPUTS:
  339.  *
  340.  *     none
  341.  *
  342.  *   RETURN VALUE:
  343.  *
  344.  *     L_innerprod     32 bit long signed integer (Longword) whose value
  345.  *                     falls in the range
  346.  *                     0x8000 0000 <= L_innerprod <= 0x7fff ffff.
  347.  *
  348.  *   IMPLEMENTATION:
  349.  *
  350.  *     Compute the inner product of the two 16 bit vectors
  351.  *     The output is a 32 bit number.
  352.  *
  353.  *   KEYWORDS: inner product
  354.  *
  355.  *************************************************************************/
  356. Longword L_v_inner(Shortword *vec1,Shortword *vec2,Shortword n,
  357.    Shortword qvec1,Shortword qvec2,Shortword qout)
  358. {
  359.     Shortword i,shift;
  360.     Longword L_innerprod;
  361.     Longword L_temp,L_qvec1,L_qvec2,L_qout,L_mul;
  362.     L_temp = 0;  // data_move();mark del
  363.     for(i = 0; i < n; i++){
  364.     /*    L_temp = L_mac(L_temp,vec1[i],vec2[i]);*/
  365.         L_mul = _smpy(vec1[i],vec2[i]);
  366.       L_temp = _sadd(L_temp,L_mul);
  367. }
  368.     /* ((qout-16)-((qvec1+qvec2+1)-16)) */
  369. L_qvec1 = (Longword)(qvec1);
  370. L_qvec2 = (Longword)(qvec2);
  371. L_qout =(Longword)(qout);
  372. L_mul = _sadd2(L_qvec1,L_qvec2);
  373. L_mul = _sadd2(L_mul,(Longword)1);
  374. L_mul = _sub2(L_qout,L_mul);             
  375.   shift = (Shortword)(0x0000ffffL & L_mul);
  376.     /*mul = (Shortword) (0x0000ffffL & L_mul);*/
  377. /*shift = _sub(qout,mul);*/
  378. L_innerprod = _sshl(L_temp,shift);
  379. /*  shift = sub(qout,add(add(qvec1,qvec2),1)); */
  380. /*     L_innerprod = L_shl(L_temp,shift); */
  381.     return(L_innerprod);
  382. }
  383. /***************************************************************************
  384.  *
  385.  *   FUNCTION NAME: v_magsq
  386.  *
  387.  *   PURPOSE:
  388.  *
  389.  *     Compute the sum of square magnitude of a 16 bit input vector
  390.  *     with saturation and truncation.  Output is a 16 bit number.
  391.  *
  392.  *   INPUTS:
  393.  *
  394.  *     vec1            16 bit short signed integer (Shortword) whose value
  395.  *                     falls in the range 0xffff 8000 <= vec1 <= 0x0000 7fff.
  396.  *
  397.  *     n               size of input vectors
  398.  *
  399.  *     qvec1           Q value of vec1
  400.  *
  401.  *     qout            Q value of output
  402.  *
  403.  *   OUTPUTS:
  404.  *
  405.  *     none
  406.  *
  407.  *   RETURN VALUE:
  408.  *
  409.  *     magsq           16 bit short signed integer (Shortword) whose value
  410.  *                     falls in the range
  411.  *                     0xffff 8000 <= magsq <= 0x0000 7fff.
  412.  *
  413.  *   IMPLEMENTATION:
  414.  *
  415.  *     Compute the sum of square magnitude of a 16 bit input vector.
  416.  *     The output is a 16 bit number.
  417.  *
  418.  *   KEYWORDS: square magnitude
  419.  *
  420.  *************************************************************************/
  421. Shortword v_magsq(Shortword *vec1,Shortword n,Shortword qvec1,Shortword qout)
  422. {
  423.     Shortword i,shift;
  424.     Shortword magsq;
  425.     Longword L_temp;
  426.     L_temp = 0;  // L_data_move();mark del
  427.     for(i = 0; i < n; i++)
  428.         L_temp = L_mac(L_temp,vec1[i],vec1[i]);
  429.     /* qout-((2*qvec1+1)-16) */
  430.     shift = sub(qout,sub(add(shl(qvec1,1),1),16));
  431.     magsq = extract_h(L_shl(L_temp,shift));
  432.     return(magsq);
  433. } /* v_magsq */
  434. /***************************************************************************
  435.  *
  436.  *   FUNCTION NAME: L_v_magsq
  437.  *
  438.  *   PURPOSE:
  439.  *
  440.  *     Compute the sum of square magnitude of a 16 bit input vector
  441.  *     with saturation and truncation.  Output is a 32 bit number.
  442.  *
  443.  *   INPUTS:
  444.  *
  445.  *     vec1            16 bit short signed integer (Shortword) whose value
  446.  *                     falls in the range 0xffff 8000 <= vec1 <= 0x0000 7fff.
  447.  *
  448.  *     n               size of input vectors
  449.  *
  450.  *     qvec1           Q value of vec1
  451.  *
  452.  *     qout            Q value of output
  453.  *
  454.  *   OUTPUTS:
  455.  *
  456.  *     none
  457.  *
  458.  *   RETURN VALUE:
  459.  *
  460.  *     L_magsq         32 bit long signed integer (Longword) whose value
  461.  *                     falls in the range
  462.  *                     0x8000 0000 <= L_magsq <= 0x7fff ffff.
  463.  *
  464.  *   IMPLEMENTATION:
  465.  *
  466.  *     Compute the sum of square magnitude of a 16 bit input vector.
  467.  *     The output is a 32 bit number.
  468.  *
  469.  *   KEYWORDS: square magnitude
  470.  *
  471.  *************************************************************************/
  472. Longword L_v_magsq(Shortword *vec1,Shortword n,Shortword qvec1,Shortword qout)
  473. {
  474.     Shortword i,shift;
  475.     Longword L_magsq;
  476.     Longword L_temp,L_mult,L_qvec1,L_qout;
  477.     L_temp = 0; //  L_data_move();mark del
  478.     for(i = 0; i < n; i++){
  479.    L_mult = _smpy(vec1[i],vec1[i]);
  480.    L_temp = _sadd(L_temp,L_mult);
  481. }
  482.        /* L_temp = L_mac(L_temp,vec1[i],vec1[i]);*/
  483.     /* ((qout-16)-((2*qvec1+1)-16)) */
  484.    /* shift = sub(sub(qout,shl(qvec1,1)),1);*/
  485. L_qvec1 = (Longword)qvec1;                                     
  486.   L_qout = (Longword)qout;                                           
  487.     L_mult = _sshl(L_qvec1,1);                                    
  488. L_mult = _sub2(L_qout,L_mult);                                     
  489.   L_mult = _sub2(L_mult,1);                                     
  490.    shift = (Shortword) (0x0000ffffL & L_mult); 
  491.     /*L_magsq = L_shl(L_temp,shift); //  L_data_move();mark del*/
  492.     L_magsq = _sshvl(L_temp,shift);  
  493.     return(L_magsq);
  494. } /* L_v_magsq */
  495.                                                 
  496. /***************************************************************************
  497.  *
  498.  *   FUNCTION NAME: v_scale
  499.  *
  500.  *   PURPOSE:
  501.  *
  502.  *     Perform a multipy of the 16 bit input vector with a 16 bit input
  503.  *     scale with saturation and truncation.
  504.  *
  505.  *   INPUTS:
  506.  *
  507.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  508.  *                     values fall in the range 
  509.  *                     0xffff 8000 <= vec1 <= 0x0000 7fff.
  510.  *     scale
  511.  *                     16 bit short signed integer (Shortword) whose value
  512.  *                     falls in the range 0xffff 8000 <= var1 <= 0x0000 7fff.
  513.  *
  514.  *     n               size of vec1
  515.  *
  516.  *   OUTPUTS:
  517.  *
  518.  *     none
  519.  *
  520.  *   RETURN VALUE:
  521.  *
  522.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  523.  *                     values fall in the range 
  524.  *                     0xffff 8000 <= vec1[] <= 0x0000 7fff.
  525.  *
  526.  *   IMPLEMENTATION:
  527.  *
  528.  *     Perform a multipy of the 16 bit input vector with the 16 bit input
  529.  *     scale.  The output is a 16 bit vector.
  530.  *
  531.  *   KEYWORDS: scale
  532.  *
  533.  *************************************************************************/
  534. Shortword *v_scale(Shortword *vec1,Shortword scale,Shortword n)
  535. {
  536.     Shortword i;
  537. Longword L_temp;
  538.     for(i=0; i < n; i++) {
  539.        /*  vec1[i] = mult(vec1[i],scale); //  data_move();mark del */
  540.    L_temp = _smpy(vec1[i],scale);
  541.        vec1[i] = (Shortword) (0x0000ffffL & (L_temp >> 16));
  542.     }
  543.     return(vec1);
  544. }
  545. /***************************************************************************
  546.  *
  547.  *   FUNCTION NAME: v_scale_shl
  548.  *
  549.  *   PURPOSE:
  550.  *
  551.  *     Perform a multipy of the 16 bit input vector with a 16 bit input
  552.  *     scale and shift to left with saturation and truncation.
  553.  *
  554.  *   INPUTS:
  555.  *
  556.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  557.  *                     values fall in the range 
  558.  *                     0xffff 8000 <= vec1 <= 0x0000 7fff.
  559.  *
  560.  *     scale           16 bit short signed integer (Shortword) whose value
  561.  *                     falls in the range 0xffff 8000 <= var1 <= 0x0000 7fff.
  562.  *
  563.  *     n               size of vec1
  564.  *
  565.  *     shift           16 bit short signed integer (Shortword) whose value
  566.  *                     falls in the range 0x0000 0000 <= var1 <= 0x0000 1f.
  567.  *
  568.  *   OUTPUTS:
  569.  *
  570.  *     none
  571.  *
  572.  *   RETURN VALUE:
  573.  *
  574.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  575.  *                     values fall in the range 
  576.  *                     0xffff 8000 <= vec1[] <= 0x0000 7fff.
  577.  *
  578.  *   IMPLEMENTATION:
  579.  *
  580.  *     Perform a multipy of the 16 bit input vector with the 16 bit input
  581.  *     scale.  The output is a 16 bit vector.
  582.  *
  583.  *   KEYWORDS: scale
  584.  *
  585.  *************************************************************************/
  586. Shortword *v_scale_shl(Shortword *vec1,Shortword scale,Shortword n,
  587.        Shortword shift)
  588. {
  589.     Shortword i;
  590.     
  591. Longword L_temp;
  592.     for(i=0; i < n; i++){
  593.        /*  vec1[i] = extract_h(L_shl(L_mult(vec1[i],scale),shift)); */
  594.    L_temp = _sshvl(_smpy(vec1[i],scale),shift);
  595.        vec1[i] = (Shortword) (0x0000ffffL & (L_temp >> 16));
  596. }
  597.     return(vec1);
  598. }
  599. /***************************************************************************
  600.  *
  601.  *   FUNCTION NAME: v_sub
  602.  *
  603.  *   PURPOSE:
  604.  *
  605.  *     Perform the subtraction of the two 16 bit input vector with
  606.  *     saturation.
  607.  *
  608.  *   INPUTS:
  609.  *
  610.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  611.  *                     values fall in the range 
  612.  *                     0xffff 8000 <= vec1 <= 0x0000 7fff.
  613.  *
  614.  *     vec2            16 bit short signed integer (Shortword) vector whose 
  615.  *                     values falls in the range 
  616.  *                     0xffff 8000 <= vec2 <= 0x0000 7fff.
  617.  *
  618.  *     n               size of input vectors.
  619.  *
  620.  *   OUTPUTS:
  621.  *
  622.  *     none
  623.  *
  624.  *   RETURN VALUE:
  625.  *
  626.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  627.  *                     values fall in the range
  628.  *                     0xffff 8000 <= vec1[] <= 0x0000 7fff.
  629.  *
  630.  *   IMPLEMENTATION:
  631.  *
  632.  *     Perform the subtraction of the two 16 bit input vectors with
  633.  *     saturation.
  634.  *
  635.  *     vec1 = vec1 - vec2
  636.  *
  637.  *     vec1[] is set to 0x7fff if the operation results in an
  638.  *     overflow.  vec1[] is set to 0x8000 if the operation results
  639.  *     in an underflow.
  640.  *
  641.  *   KEYWORDS: sub, subtraction
  642.  *
  643.  *************************************************************************/
  644. Shortword *v_sub(Shortword *vec1,Shortword *vec2,Shortword n)
  645. {
  646.     Shortword i;
  647.     for(i=0; i < n; i++) {
  648.         vec1[i] = sub(vec1[i],vec2[i]); // data_move();mark del
  649.     }
  650.     return(vec1);
  651. }
  652. /***************************************************************************
  653.  *
  654.  *   FUNCTION NAME: v_zap
  655.  *
  656.  *   PURPOSE:
  657.  *
  658.  *     Set the elements of a 16 bit input vector to zero.
  659.  *
  660.  *   INPUTS:
  661.  *
  662.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  663.  *                     values fall in the range 
  664.  *                     0xffff 8000 <= vec1 <= 0x0000 7fff.
  665.  *
  666.  *     n               size of vec1.
  667.  *
  668.  *   OUTPUTS:
  669.  *
  670.  *     none
  671.  *
  672.  *   RETURN VALUE:
  673.  *
  674.  *     vec1            16 bit short signed integer (Shortword) vector whose 
  675.  *                     values are equal to 0x0000 0000.
  676.  *
  677.  *   IMPLEMENTATION:
  678.  *
  679.  *     Set the elements of 16 bit input vector to zero.
  680.  *
  681.  *     vec1 = 0
  682.  *
  683.  *   KEYWORDS: zap, clear, reset
  684.  *
  685.  *************************************************************************/
  686. /* Shortword *v_zap(Shortword *vec1,Shortword n) */
  687. /* {                                             */
  688. /*     Shortword i;                              */
  689. /*                                               */
  690. /*     for(i = 0; i < n; i++) {                  */
  691. /*         vec1[i] = 0; //  data_move();mark del */
  692. /*     }                                         */
  693. /*                                               */
  694. /*     return(vec1);                             */
  695. /* }                                             */
  696. /***************************************************************************
  697.  *
  698.  *   FUNCTION NAME: L_v_zap
  699.  *
  700.  *   PURPOSE:
  701.  *
  702.  *     Set the elements of a 32 bit input vector to zero.
  703.  *
  704.  *   INPUTS:
  705.  *
  706.  *     L_vec1          32 bit long signed integer (Longword) vector whose 
  707.  *                     values fall in the range 
  708.  *                     0x8000 0000 <= vec1 <= 0x7fff ffff.
  709.  *
  710.  *     n               size of L_vec1.
  711.  *
  712.  *   OUTPUTS:
  713.  *
  714.  *     none
  715.  *
  716.  *   RETURN VALUE:
  717.  *
  718.  *     L_vec1          32 bit long signed integer (Longword) vector whose 
  719.  *                     values are equal to 0x0000 0000.
  720.  *
  721.  *   IMPLEMENTATION:
  722.  *
  723.  *     Set the elements of 32 bit input vector to zero.
  724.  *
  725.  *     L_vec1 = 0
  726.  *
  727.  *   KEYWORDS: zap, clear, reset
  728.  *
  729.  *************************************************************************/
  730. Longword *L_v_zap(Longword *L_vec1,Shortword n)
  731. {
  732.     Shortword i;
  733.     for(i = 0; i < n; i++) {
  734.         L_vec1[i] = 0;//   data_move();mark del
  735.     }
  736.     return(L_vec1);
  737. }