mat_lib.c
上传用户:cxx_68
上传日期:2021-02-21
资源大小:161k
文件大小:21k
源码类别:

语音压缩

开发平台:

Visual C++

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