mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-13 00:04:53 +00:00
Add chan_usbradio to trunk
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@82389 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
2813
channels/chan_usbradio.c
Normal file
2813
channels/chan_usbradio.c
Normal file
File diff suppressed because it is too large
Load Diff
341
channels/xpmr/LICENSE
Executable file
341
channels/xpmr/LICENSE
Executable file
@@ -0,0 +1,341 @@
|
|||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Library General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) 19yy <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) 19yy name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Library General
|
||||||
|
Public License instead of this License.
|
300
channels/xpmr/sinetabx.h
Executable file
300
channels/xpmr/sinetabx.h
Executable file
@@ -0,0 +1,300 @@
|
|||||||
|
/*
|
||||||
|
* sinetabx.h - for Xelatec Private Mobile Radio Processes
|
||||||
|
*
|
||||||
|
* All Rights Reserved. Copyright (C)2007, Xelatec, LLC
|
||||||
|
*
|
||||||
|
* 20070808 1235 Steven Henke, W9SH, sph@xelatec.com
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* This version may be optionally licenced under the GNU LGPL licence.
|
||||||
|
*
|
||||||
|
* A license has been granted to Digium (via disclaimer) for the use of
|
||||||
|
* this code.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
*
|
||||||
|
* \brief Private Land Mobile Radio Channel Voice and Signaling Processor
|
||||||
|
*
|
||||||
|
* \author Steven Henke, W9SH <sph@xelatec.com> Xelatec, LLC
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XPMR_SINETABX_H
|
||||||
|
#define XPMR_SINETABX_H 1
|
||||||
|
|
||||||
|
#define SAMPLES_PER_SINE 256
|
||||||
|
|
||||||
|
const i16 sinetablex[]={
|
||||||
|
0, // 0
|
||||||
|
804, // 1
|
||||||
|
1608, // 2
|
||||||
|
2410, // 3
|
||||||
|
3212, // 4
|
||||||
|
4011, // 5
|
||||||
|
4808, // 6
|
||||||
|
5602, // 7
|
||||||
|
6393, // 8
|
||||||
|
7179, // 9
|
||||||
|
7962, // 10
|
||||||
|
8739, // 11
|
||||||
|
9512, // 12
|
||||||
|
10278, // 13
|
||||||
|
11039, // 14
|
||||||
|
11793, // 15
|
||||||
|
12539, // 16
|
||||||
|
13279, // 17
|
||||||
|
14010, // 18
|
||||||
|
14732, // 19
|
||||||
|
15446, // 20
|
||||||
|
16151, // 21
|
||||||
|
16846, // 22
|
||||||
|
17530, // 23
|
||||||
|
18204, // 24
|
||||||
|
18868, // 25
|
||||||
|
19519, // 26
|
||||||
|
20159, // 27
|
||||||
|
20787, // 28
|
||||||
|
21403, // 29
|
||||||
|
22005, // 30
|
||||||
|
22594, // 31
|
||||||
|
23170, // 32
|
||||||
|
23731, // 33
|
||||||
|
24279, // 34
|
||||||
|
24811, // 35
|
||||||
|
25329, // 36
|
||||||
|
25832, // 37
|
||||||
|
26319, // 38
|
||||||
|
26790, // 39
|
||||||
|
27245, // 40
|
||||||
|
27683, // 41
|
||||||
|
28105, // 42
|
||||||
|
28510, // 43
|
||||||
|
28898, // 44
|
||||||
|
29268, // 45
|
||||||
|
29621, // 46
|
||||||
|
29956, // 47
|
||||||
|
30273, // 48
|
||||||
|
30571, // 49
|
||||||
|
30852, // 50
|
||||||
|
31113, // 51
|
||||||
|
31356, // 52
|
||||||
|
31580, // 53
|
||||||
|
31785, // 54
|
||||||
|
31971, // 55
|
||||||
|
32137, // 56
|
||||||
|
32285, // 57
|
||||||
|
32412, // 58
|
||||||
|
32521, // 59
|
||||||
|
32609, // 60
|
||||||
|
32678, // 61
|
||||||
|
32728, // 62
|
||||||
|
32757, // 63
|
||||||
|
32767, // 64
|
||||||
|
32757, // 65
|
||||||
|
32728, // 66
|
||||||
|
32678, // 67
|
||||||
|
32609, // 68
|
||||||
|
32521, // 69
|
||||||
|
32412, // 70
|
||||||
|
32285, // 71
|
||||||
|
32137, // 72
|
||||||
|
31971, // 73
|
||||||
|
31785, // 74
|
||||||
|
31580, // 75
|
||||||
|
31356, // 76
|
||||||
|
31113, // 77
|
||||||
|
30852, // 78
|
||||||
|
30571, // 79
|
||||||
|
30273, // 80
|
||||||
|
29956, // 81
|
||||||
|
29621, // 82
|
||||||
|
29268, // 83
|
||||||
|
28898, // 84
|
||||||
|
28510, // 85
|
||||||
|
28105, // 86
|
||||||
|
27683, // 87
|
||||||
|
27245, // 88
|
||||||
|
26790, // 89
|
||||||
|
26319, // 90
|
||||||
|
25832, // 91
|
||||||
|
25329, // 92
|
||||||
|
24811, // 93
|
||||||
|
24279, // 94
|
||||||
|
23731, // 95
|
||||||
|
23170, // 96
|
||||||
|
22594, // 97
|
||||||
|
22005, // 98
|
||||||
|
21403, // 99
|
||||||
|
20787, // 100
|
||||||
|
20159, // 101
|
||||||
|
19519, // 102
|
||||||
|
18868, // 103
|
||||||
|
18204, // 104
|
||||||
|
17530, // 105
|
||||||
|
16846, // 106
|
||||||
|
16151, // 107
|
||||||
|
15446, // 108
|
||||||
|
14732, // 109
|
||||||
|
14010, // 110
|
||||||
|
13279, // 111
|
||||||
|
12539, // 112
|
||||||
|
11793, // 113
|
||||||
|
11039, // 114
|
||||||
|
10278, // 115
|
||||||
|
9512, // 116
|
||||||
|
8739, // 117
|
||||||
|
7962, // 118
|
||||||
|
7179, // 119
|
||||||
|
6393, // 120
|
||||||
|
5602, // 121
|
||||||
|
4808, // 122
|
||||||
|
4011, // 123
|
||||||
|
3212, // 124
|
||||||
|
2410, // 125
|
||||||
|
1608, // 126
|
||||||
|
804, // 127
|
||||||
|
0, // 128
|
||||||
|
-804, // 129
|
||||||
|
-1608, // 130
|
||||||
|
-2410, // 131
|
||||||
|
-3212, // 132
|
||||||
|
-4011, // 133
|
||||||
|
-4808, // 134
|
||||||
|
-5602, // 135
|
||||||
|
-6393, // 136
|
||||||
|
-7179, // 137
|
||||||
|
-7962, // 138
|
||||||
|
-8739, // 139
|
||||||
|
-9512, // 140
|
||||||
|
-10278, // 141
|
||||||
|
-11039, // 142
|
||||||
|
-11793, // 143
|
||||||
|
-12539, // 144
|
||||||
|
-13279, // 145
|
||||||
|
-14010, // 146
|
||||||
|
-14732, // 147
|
||||||
|
-15446, // 148
|
||||||
|
-16151, // 149
|
||||||
|
-16846, // 150
|
||||||
|
-17530, // 151
|
||||||
|
-18204, // 152
|
||||||
|
-18868, // 153
|
||||||
|
-19519, // 154
|
||||||
|
-20159, // 155
|
||||||
|
-20787, // 156
|
||||||
|
-21403, // 157
|
||||||
|
-22005, // 158
|
||||||
|
-22594, // 159
|
||||||
|
-23170, // 160
|
||||||
|
-23731, // 161
|
||||||
|
-24279, // 162
|
||||||
|
-24811, // 163
|
||||||
|
-25329, // 164
|
||||||
|
-25832, // 165
|
||||||
|
-26319, // 166
|
||||||
|
-26790, // 167
|
||||||
|
-27245, // 168
|
||||||
|
-27683, // 169
|
||||||
|
-28105, // 170
|
||||||
|
-28510, // 171
|
||||||
|
-28898, // 172
|
||||||
|
-29268, // 173
|
||||||
|
-29621, // 174
|
||||||
|
-29956, // 175
|
||||||
|
-30273, // 176
|
||||||
|
-30571, // 177
|
||||||
|
-30852, // 178
|
||||||
|
-31113, // 179
|
||||||
|
-31356, // 180
|
||||||
|
-31580, // 181
|
||||||
|
-31785, // 182
|
||||||
|
-31971, // 183
|
||||||
|
-32137, // 184
|
||||||
|
-32285, // 185
|
||||||
|
-32412, // 186
|
||||||
|
-32521, // 187
|
||||||
|
-32609, // 188
|
||||||
|
-32678, // 189
|
||||||
|
-32728, // 190
|
||||||
|
-32757, // 191
|
||||||
|
-32767, // 192
|
||||||
|
-32757, // 193
|
||||||
|
-32728, // 194
|
||||||
|
-32678, // 195
|
||||||
|
-32609, // 196
|
||||||
|
-32521, // 197
|
||||||
|
-32412, // 198
|
||||||
|
-32285, // 199
|
||||||
|
-32137, // 200
|
||||||
|
-31971, // 201
|
||||||
|
-31785, // 202
|
||||||
|
-31580, // 203
|
||||||
|
-31356, // 204
|
||||||
|
-31113, // 205
|
||||||
|
-30852, // 206
|
||||||
|
-30571, // 207
|
||||||
|
-30273, // 208
|
||||||
|
-29956, // 209
|
||||||
|
-29621, // 210
|
||||||
|
-29268, // 211
|
||||||
|
-28898, // 212
|
||||||
|
-28510, // 213
|
||||||
|
-28105, // 214
|
||||||
|
-27683, // 215
|
||||||
|
-27245, // 216
|
||||||
|
-26790, // 217
|
||||||
|
-26319, // 218
|
||||||
|
-25832, // 219
|
||||||
|
-25329, // 220
|
||||||
|
-24811, // 221
|
||||||
|
-24279, // 222
|
||||||
|
-23731, // 223
|
||||||
|
-23170, // 224
|
||||||
|
-22594, // 225
|
||||||
|
-22005, // 226
|
||||||
|
-21403, // 227
|
||||||
|
-20787, // 228
|
||||||
|
-20159, // 229
|
||||||
|
-19519, // 230
|
||||||
|
-18868, // 231
|
||||||
|
-18204, // 232
|
||||||
|
-17530, // 233
|
||||||
|
-16846, // 234
|
||||||
|
-16151, // 235
|
||||||
|
-15446, // 236
|
||||||
|
-14732, // 237
|
||||||
|
-14010, // 238
|
||||||
|
-13279, // 239
|
||||||
|
-12539, // 240
|
||||||
|
-11793, // 241
|
||||||
|
-11039, // 242
|
||||||
|
-10278, // 243
|
||||||
|
-9512, // 244
|
||||||
|
-8739, // 245
|
||||||
|
-7962, // 246
|
||||||
|
-7179, // 247
|
||||||
|
-6393, // 248
|
||||||
|
-5602, // 249
|
||||||
|
-4808, // 250
|
||||||
|
-4011, // 251
|
||||||
|
-3212, // 252
|
||||||
|
-2410, // 253
|
||||||
|
-1608, // 254
|
||||||
|
-804, // 255
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* !XPMR_SINETABX_H */
|
2266
channels/xpmr/xpmr.c
Executable file
2266
channels/xpmr/xpmr.c
Executable file
File diff suppressed because it is too large
Load Diff
553
channels/xpmr/xpmr.h
Executable file
553
channels/xpmr/xpmr.h
Executable file
@@ -0,0 +1,553 @@
|
|||||||
|
/*
|
||||||
|
* xpmr.h - for Xelatec Private Mobile Radio Processes
|
||||||
|
*
|
||||||
|
* All Rights Reserved. Copyright (C)2007, Xelatec, LLC
|
||||||
|
*
|
||||||
|
* 20070808 1235 Steven Henke, W9SH, sph@xelatec.com
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* This version may be optionally licenced under the GNU LGPL licence.
|
||||||
|
*
|
||||||
|
* A license has been granted to Digium (via disclaimer) for the use of
|
||||||
|
* this code.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
*
|
||||||
|
* \brief Private Land Mobile Radio Channel Voice and Signaling Processor
|
||||||
|
*
|
||||||
|
* \author Steven Henke, W9SH <sph@xelatec.com> Xelatec, LLC
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XPMR_H
|
||||||
|
#define XPMR_H 1
|
||||||
|
|
||||||
|
#ifdef CHAN_USBRADIO
|
||||||
|
#define XPMR_DEBUG0 1
|
||||||
|
#define XPMR_TRACE 0
|
||||||
|
#else
|
||||||
|
#define XPMR_DEBUG0 1
|
||||||
|
#define XPMR_TRACE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if(XPMR_TRACE == 1)
|
||||||
|
#define TRACEX(a) {printf a;}
|
||||||
|
#define TRACEXL(a) {printf("%s @ %u : ",__FILE__ ,__LINE__); printf a; }
|
||||||
|
#define TRACEXT(a) { struct timeval hack; gettimeofday(&hack,NULL); printf("%ld.",hack.tv_sec%100000); printf("%i : ",(int)hack.tv_usec); printf a; }
|
||||||
|
#else
|
||||||
|
#define TRACEX(a)
|
||||||
|
#define TRACEXL(a)
|
||||||
|
#define TRACEXT(a)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define i8 int8_t
|
||||||
|
#define u8 u_int8_t
|
||||||
|
#define i16 int16_t
|
||||||
|
#define u16 u_int16_t
|
||||||
|
#define i32 int32_t
|
||||||
|
#define u32 u_int32_t
|
||||||
|
#define i64 int64_t
|
||||||
|
#define u64 u_int64_t
|
||||||
|
|
||||||
|
#define M_Q24 0x01000000 //
|
||||||
|
#define M_Q23 0x00800000 //
|
||||||
|
#define M_Q22 0x00400000 //
|
||||||
|
#define M_Q21 0x00200000 //
|
||||||
|
#define M_Q20 0x00100000 // 1048576
|
||||||
|
#define M_Q19 0x00080000 // 524288
|
||||||
|
#define M_Q18 0x00040000 // 262144
|
||||||
|
#define M_Q17 0x00020000 // 131072
|
||||||
|
#define M_Q16 0x00010000 // 65536
|
||||||
|
#define M_Q15 0x00008000 // 32768
|
||||||
|
#define M_Q14 0x00004000 // 16384
|
||||||
|
#define M_Q13 0x00002000 // 8182
|
||||||
|
#define M_Q12 0x00001000 // 4096
|
||||||
|
#define M_Q11 0x00000800 // 2048
|
||||||
|
#define M_Q10 0x00000400 // 1024
|
||||||
|
#define M_Q9 0x00000200 // 512
|
||||||
|
#define M_Q8 0x00000100 // 256
|
||||||
|
#define M_Q7 0x00000080 // 128
|
||||||
|
#define M_Q6 0x00000040 // 64
|
||||||
|
#define M_Q5 0x00000020 // 32
|
||||||
|
#define M_Q4 0x00000010 // 16
|
||||||
|
#define M_Q3 0x00000008 // 16
|
||||||
|
#define M_Q2 0x00000004 // 16
|
||||||
|
#define M_Q1 0x00000002 // 16
|
||||||
|
#define M_Q0 0x00000001 // 16
|
||||||
|
|
||||||
|
#define RADIANS_PER_CYCLE (2*M_PI)
|
||||||
|
|
||||||
|
#define SAMPLE_RATE_INPUT 48000
|
||||||
|
#define SAMPLE_RATE_NETWORK 8000
|
||||||
|
|
||||||
|
#define SAMPLES_PER_BLOCK 160
|
||||||
|
#define MS_PER_FRAME 20
|
||||||
|
|
||||||
|
#define CTCSS_NUM_CODES 38
|
||||||
|
#define CTCSS_SCOUNT_MUL 100
|
||||||
|
#define CTCSS_INTEGRATE 3932 // 32767*.120 // 120/1000 // 0.120
|
||||||
|
#define CTCSS_INPUT_LIMIT 1000
|
||||||
|
#define CTCSS_DETECT_POINT 1989
|
||||||
|
#define CTCSS_HYSTERSIS 200
|
||||||
|
|
||||||
|
#define CTCSS_TURN_OFF_TIME 160 // ms
|
||||||
|
#define CTCSS_TURN_OFF_SHIFT 240 // degrees
|
||||||
|
#define TOC_NOTONE_TIME 600 // ms
|
||||||
|
|
||||||
|
#ifndef CHAN_USBRADIO
|
||||||
|
enum {RX_AUDIO_NONE,RX_AUDIO_SPEAKER,RX_AUDIO_FLAT};
|
||||||
|
enum {TX_AUDIO_NONE,TX_AUDIO_FLAT,TX_AUDIO_FILTERED,TX_AUDIO_PROC};
|
||||||
|
enum {CD_IGNORE,CD_XPMR_NOISE,CD_XPMR_VOX,CD_HID,CD_HID_INVERT};
|
||||||
|
enum {SD_IGNORE,SD_HID,SD_HID_INVERT,SD_XPMR}; // no,external,externalinvert,software
|
||||||
|
enum {RX_KEY_CARRIER,RX_KEY_CARRIER_CODE};
|
||||||
|
enum {TX_OUT_OFF,TX_OUT_VOICE,TX_OUT_LSD,TX_OUT_COMPOSITE,TX_OUT_AUX};
|
||||||
|
enum {TOC_NONE,TOC_PHASE,TOC_NOTONE};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
one structure for each ctcss tone to decode
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
i16 counter; // counter to next sample
|
||||||
|
i16 counterFactor; // full divisor used to increment counter
|
||||||
|
i16 binFactor;
|
||||||
|
i16 fudgeFactor;
|
||||||
|
i16 peak; // peak amplitude now maw sph now
|
||||||
|
i16 enabled;
|
||||||
|
i16 state; // dead, running, error
|
||||||
|
i16 zIndex; // z bucket index
|
||||||
|
i16 z[4]; // maw sph today
|
||||||
|
i16 zi;
|
||||||
|
i16 dvu;
|
||||||
|
i16 dvd;
|
||||||
|
i16 zd;
|
||||||
|
i16 setpt;
|
||||||
|
i16 hyst;
|
||||||
|
i16 decode;
|
||||||
|
i16 diffpeak;
|
||||||
|
i16 debug; // value held from last pass
|
||||||
|
i16 *pDebug0; // pointer to debug output
|
||||||
|
i16 *pDebug1; // pointer to debug output
|
||||||
|
i16 *pDebug2; // pointer to debug output
|
||||||
|
|
||||||
|
} t_tdet;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
i16 enabled; // if 0 none, 0xFFFF all tones, or single tone
|
||||||
|
i16 *input;
|
||||||
|
i16 clamplitude;
|
||||||
|
i16 center;
|
||||||
|
i16 decode; // current ctcss decode index
|
||||||
|
i32 BlankingTimer;
|
||||||
|
u32 TurnOffTimer;
|
||||||
|
t_tdet tdet[CTCSS_NUM_CODES];
|
||||||
|
i16 gain;
|
||||||
|
i16 limit;
|
||||||
|
i16 *pDebug0;
|
||||||
|
i16 *pDebug1;
|
||||||
|
i16 *pDebug2;
|
||||||
|
i16 testIndex;
|
||||||
|
i16 multiFreq;
|
||||||
|
i8 relax;
|
||||||
|
|
||||||
|
} t_dec_ctcss;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
i16 enabled; // if 0 none, 0xFFFF all tones, or single tone
|
||||||
|
i16 clamplitude;
|
||||||
|
i16 center;
|
||||||
|
i16 decode; // current ctcss decode value
|
||||||
|
i32 BlankingTimer;
|
||||||
|
u32 TurnOffTimer;
|
||||||
|
i16 gain;
|
||||||
|
i16 limit;
|
||||||
|
i16 *pDebug0;
|
||||||
|
i16 *pDebug1;
|
||||||
|
i16 rxPolarity;
|
||||||
|
} t_dec_dcs;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Low Speed Data decoding both polarities
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
i16 counter; // counter to next sample
|
||||||
|
i16 synced;
|
||||||
|
u32 syncCorr[2];
|
||||||
|
u32 data[2];
|
||||||
|
i16 state; // disabled, enabled,
|
||||||
|
i16 decode;
|
||||||
|
i16 debug;
|
||||||
|
|
||||||
|
i16 polarity;
|
||||||
|
u32 frameNum;
|
||||||
|
|
||||||
|
u16 area;
|
||||||
|
u16 chan;
|
||||||
|
u16 home;
|
||||||
|
u16 id;
|
||||||
|
u16 free;
|
||||||
|
|
||||||
|
u16 crc;
|
||||||
|
i16 rssi;
|
||||||
|
|
||||||
|
} t_decLsd;
|
||||||
|
|
||||||
|
|
||||||
|
/* general purpose pmr signal processing element */
|
||||||
|
|
||||||
|
struct t_pmr_chan;
|
||||||
|
|
||||||
|
typedef struct t_pmr_sps
|
||||||
|
{
|
||||||
|
i16 index; // unique to each instance
|
||||||
|
|
||||||
|
i16 enabled; // enabled/disabled
|
||||||
|
|
||||||
|
struct t_pmr_chan *parentChan;
|
||||||
|
|
||||||
|
i16 *source; // source buffer
|
||||||
|
i16 *sourceB; // source buffer B
|
||||||
|
i16 *sink; // sink buffer
|
||||||
|
|
||||||
|
i16 numChanOut; // allows output direct to interleaved buffer
|
||||||
|
i16 selChanOut;
|
||||||
|
|
||||||
|
u32 ticks;
|
||||||
|
|
||||||
|
void *buff; // this structure's internal buffer
|
||||||
|
|
||||||
|
i16 *debugBuff0; // debug buffer
|
||||||
|
i16 *debugBuff1; // debug buffer
|
||||||
|
i16 *debugBuff2; // debug buffer
|
||||||
|
i16 *debugBuff3; // debug buffer
|
||||||
|
|
||||||
|
i16 nSamples; // number of samples in the buffer
|
||||||
|
|
||||||
|
u32 buffSize; // buffer maximum index
|
||||||
|
u32 buffInIndex; // index to current input point
|
||||||
|
u32 buffOutIndex; // index to current output point
|
||||||
|
u32 buffLead; // lead of input over output through cb
|
||||||
|
|
||||||
|
i16 decimate; // decimation or interpolation factor (could be put in coef's)
|
||||||
|
i16 interpolate;
|
||||||
|
i16 decimator; // like the state this must be saved between calls (could be put in x's)
|
||||||
|
|
||||||
|
u32 sampleRate; // in Hz for elements in this structure
|
||||||
|
u32 freq; // in 0.1 Hz
|
||||||
|
|
||||||
|
i16 measPeak; // do measure Peak
|
||||||
|
i16 amax; // buffer amplitude maximum
|
||||||
|
i16 amin; // buffer amplitude minimum
|
||||||
|
i16 apeak; // buffer amplitude peak value (peak to peak)/2
|
||||||
|
i16 setpt; // amplitude set point for amplitude comparator
|
||||||
|
i16 hyst; // hysterysis for amplitude comparator
|
||||||
|
i16 compOut; // amplitude comparator output
|
||||||
|
|
||||||
|
i32 discounteru; // amplitude detector integrator discharge counter upper
|
||||||
|
i32 discounterl; // amplitude detector integrator discharge counter lower
|
||||||
|
i32 discfactor; // amplitude detector integrator discharge factor
|
||||||
|
|
||||||
|
i16 err; // error condition
|
||||||
|
i16 option; // option / request zero
|
||||||
|
i16 state; // stopped, start, stopped assumes zero'd
|
||||||
|
|
||||||
|
i16 cleared; // output buffer cleared
|
||||||
|
|
||||||
|
i16 delay;
|
||||||
|
i16 decode;
|
||||||
|
|
||||||
|
i32 inputGain; // apply to input data ? in Q7.8 format
|
||||||
|
i32 inputGainB; // apply to input data ? in Q7.8 format
|
||||||
|
i32 outputGain; // apply to output data ? in Q7.8 format
|
||||||
|
i16 mixOut;
|
||||||
|
i16 monoOut;
|
||||||
|
|
||||||
|
i16 filterType; // iir, fir, 1, 2, 3, 4 ...
|
||||||
|
|
||||||
|
i16 (*sigProc)(struct t_pmr_sps *sps); // function to call
|
||||||
|
|
||||||
|
i32 calcAdjust; // final adjustment
|
||||||
|
i16 nx; // number of x history elements
|
||||||
|
i16 ncoef; // number of coefficients
|
||||||
|
i16 size_x; // size of each x history element
|
||||||
|
i16 size_coef; // size of each coefficient
|
||||||
|
void *x; // history registers
|
||||||
|
void *x2; // history registers, 2nd bank
|
||||||
|
void *coef; // coefficients
|
||||||
|
void *coef2; // coefficients 2
|
||||||
|
|
||||||
|
void *nextSps; // next Sps function
|
||||||
|
|
||||||
|
} t_pmr_sps;
|
||||||
|
|
||||||
|
/*
|
||||||
|
pmr channel
|
||||||
|
*/
|
||||||
|
typedef struct t_pmr_chan
|
||||||
|
{
|
||||||
|
i16 index; // which one
|
||||||
|
i16 enabled; // enabled/disabled
|
||||||
|
i16 status; // ok, error, busy, idle, initializing
|
||||||
|
|
||||||
|
i16 nSamplesRx; // max frame size
|
||||||
|
i16 nSamplesTx;
|
||||||
|
|
||||||
|
i32 inputSampleRate; // in S/s 48000
|
||||||
|
i32 baseSampleRate; // in S/s 8000
|
||||||
|
|
||||||
|
i16 inputGain;
|
||||||
|
i16 inputOffset;
|
||||||
|
|
||||||
|
u32 frameCountRx; // number processed
|
||||||
|
u32 frameCountTx;
|
||||||
|
|
||||||
|
i32 txHangTime;
|
||||||
|
i32 txTurnOff;
|
||||||
|
|
||||||
|
i16 rxDC; // average DC value of input
|
||||||
|
i16 rxSqSet; // carrier squelch threshold
|
||||||
|
i16 rxSqHyst; // carrier squelch hysterysis
|
||||||
|
i16 rxRssi; // current Rssi level
|
||||||
|
i16 rxQuality; // signal quality metric
|
||||||
|
i16 rxCarrierDetect; // carrier detect
|
||||||
|
i16 rxCdType;
|
||||||
|
i16 rxExtCarrierDetect;
|
||||||
|
i32 inputBlanking; // Tx pulse eliminator
|
||||||
|
|
||||||
|
i16 rxDemod; // see enum
|
||||||
|
i16 txMod; //
|
||||||
|
|
||||||
|
i16 rxNoiseSquelchEnable;
|
||||||
|
i16 rxHpfEnable;
|
||||||
|
i16 rxDeEmpEnable;
|
||||||
|
i16 rxCenterSlicerEnable;
|
||||||
|
i16 rxCtcssDecodeEnable;
|
||||||
|
i16 rxDcsDecodeEnable;
|
||||||
|
i16 rxDelayLineEnable;
|
||||||
|
|
||||||
|
i16 txHpfEnable;
|
||||||
|
i16 txLimiterEnable;
|
||||||
|
i16 txPreEmpEnable;
|
||||||
|
i16 txLpfEnable;
|
||||||
|
|
||||||
|
char radioDuplex;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
unsigned pmrNoiseSquelch:1;
|
||||||
|
unsigned rxHpf:1;
|
||||||
|
unsigned txHpf:1;
|
||||||
|
unsigned txLpf:1;
|
||||||
|
unsigned rxDeEmphasis:1;
|
||||||
|
unsigned txPreEmphasis:1;
|
||||||
|
unsigned startSpecialTone:1;
|
||||||
|
unsigned stopSpecialTone:1;
|
||||||
|
unsigned doingSpecialTone:1;
|
||||||
|
unsigned extCarrierDetect:1;
|
||||||
|
unsigned txCapture:1;
|
||||||
|
unsigned rxCapture:1;
|
||||||
|
}b;
|
||||||
|
|
||||||
|
i16 dummy;
|
||||||
|
|
||||||
|
i32 txScramFreq;
|
||||||
|
i32 rxScramFreq;
|
||||||
|
|
||||||
|
i16 gainVoice;
|
||||||
|
i16 gainSubAudible;
|
||||||
|
|
||||||
|
i16 txMixA; // Off, Ctcss, Voice, Composite
|
||||||
|
i16 txMixB; // Off, Ctcss, Voice, Composite
|
||||||
|
|
||||||
|
i16 rxMuting;
|
||||||
|
|
||||||
|
i16 rxCpuSaver;
|
||||||
|
i16 txCpuSaver;
|
||||||
|
|
||||||
|
i8 rxSqMode; // 0 open, 1 carrier, 2 coded
|
||||||
|
|
||||||
|
i8 cdMethod;
|
||||||
|
|
||||||
|
i16 rxSquelchPoint;
|
||||||
|
|
||||||
|
i16 rxCarrierPoint;
|
||||||
|
i16 rxCarrierHyst;
|
||||||
|
|
||||||
|
i16 rxCtcssMap[CTCSS_NUM_CODES];
|
||||||
|
|
||||||
|
i16 txCtcssTocShift;
|
||||||
|
i16 txCtcssTocTime;
|
||||||
|
i8 txTocType;
|
||||||
|
|
||||||
|
float txCtcssFreq;
|
||||||
|
float rxCtcssFreq;
|
||||||
|
float rxInputGain;
|
||||||
|
|
||||||
|
i16 rxCtcssIndex;
|
||||||
|
|
||||||
|
i16 txPttIn; // from external request
|
||||||
|
i16 txPttOut; // to radio hardware
|
||||||
|
|
||||||
|
i16 bandwidth; // wide/narrow
|
||||||
|
i16 txCompand; // type
|
||||||
|
i16 rxCompand; //
|
||||||
|
|
||||||
|
i16 txEqRight; // muted, flat, pre-emp limited filtered
|
||||||
|
i16 txEqLeft;
|
||||||
|
|
||||||
|
i16 txPotRight; //
|
||||||
|
i16 txPotLeft; //
|
||||||
|
|
||||||
|
i16 rxPotRight; //
|
||||||
|
i16 rxPotLeft; //
|
||||||
|
|
||||||
|
i16 function;
|
||||||
|
|
||||||
|
i16 txState; // off,settling,on,hangtime,turnoff
|
||||||
|
|
||||||
|
t_pmr_sps *spsMeasure; // measurement block
|
||||||
|
|
||||||
|
t_pmr_sps *spsRx; // 1st signal processing struct
|
||||||
|
t_pmr_sps *spsRxLsd;
|
||||||
|
t_pmr_sps *spsRxDeEmp;
|
||||||
|
t_pmr_sps *spsRxHpf;
|
||||||
|
t_pmr_sps *spsRxVox;
|
||||||
|
t_pmr_sps *spsDelayLine; // Last signal processing struct
|
||||||
|
t_pmr_sps *spsRxOut; // Last signal processing struct
|
||||||
|
|
||||||
|
t_pmr_sps *spsTx; // 1st signal processing struct
|
||||||
|
|
||||||
|
t_pmr_sps *spsTxLsdLpf;
|
||||||
|
t_pmr_sps *spsTxOutA; // Last signal processing struct
|
||||||
|
|
||||||
|
t_pmr_sps *spsTxOutB; // Last signal processing struct
|
||||||
|
|
||||||
|
t_pmr_sps *spsSigGen0; // ctcss
|
||||||
|
t_pmr_sps *spsSigGen1; // test and other tones
|
||||||
|
|
||||||
|
// tune tweaks
|
||||||
|
|
||||||
|
i32 rxVoxTimer; // Vox Hang Timer
|
||||||
|
|
||||||
|
i16 *prxSquelchAdjust;
|
||||||
|
|
||||||
|
// i16 *prxNoiseMeasure; // for autotune
|
||||||
|
// i32 *prxNoiseAdjust;
|
||||||
|
|
||||||
|
i16 *prxVoiceMeasure;
|
||||||
|
i32 *prxVoiceAdjust;
|
||||||
|
|
||||||
|
i16 *prxCtcssMeasure;
|
||||||
|
i32 *prxCtcssAdjust;
|
||||||
|
|
||||||
|
i16 *ptxVoiceAdjust; // from calling application
|
||||||
|
i32 *ptxCtcssAdjust; // from calling application
|
||||||
|
|
||||||
|
i32 *ptxLimiterAdjust; // from calling application
|
||||||
|
|
||||||
|
i16 *pRxDemod; // buffers
|
||||||
|
i16 *pRxBase; // decimated lpf input
|
||||||
|
i16 *pRxNoise;
|
||||||
|
i16 *pRxLsd; // subaudible only
|
||||||
|
i16 *pRxHpf; // subaudible removed
|
||||||
|
i16 *pRxDeEmp; // EIA Audio
|
||||||
|
i16 *pRxSpeaker; // EIA Audio
|
||||||
|
i16 *pRxDcTrack; // DC Restored LSD
|
||||||
|
i16 *pRxLsdLimit; // LSD Limited
|
||||||
|
i16 *pRxCtcss; //
|
||||||
|
i16 *pRxSquelch;
|
||||||
|
|
||||||
|
i16 *pTxBase; // input data
|
||||||
|
i16 *pTxHpf;
|
||||||
|
i16 *pTxPreEmp;
|
||||||
|
i16 *pTxLimiter;
|
||||||
|
i16 *pTxLsd;
|
||||||
|
i16 *pTxLsdLpf;
|
||||||
|
i16 *pTxComposite;
|
||||||
|
i16 *pTxMod; // upsampled, low pass filtered
|
||||||
|
|
||||||
|
i16 *pTxOut; //
|
||||||
|
|
||||||
|
i16 *pTxPttIn;
|
||||||
|
i16 *pTxPttOut;
|
||||||
|
i16 *pTxHang;
|
||||||
|
i16 *pTxCode;
|
||||||
|
|
||||||
|
i16 *pSigGen0;
|
||||||
|
i16 *pSigGen1;
|
||||||
|
|
||||||
|
i16 *pAlt0;
|
||||||
|
i16 *pAlt1;
|
||||||
|
|
||||||
|
i16 *pNull;
|
||||||
|
|
||||||
|
i16 *prxDebug; // consolidated debug buffer
|
||||||
|
i16 *ptxDebug; // consolidated debug buffer
|
||||||
|
|
||||||
|
i16 *prxDebug0;
|
||||||
|
i16 *prxDebug1;
|
||||||
|
i16 *prxDebug2;
|
||||||
|
i16 *prxDebug3;
|
||||||
|
|
||||||
|
i16 *ptxDebug0;
|
||||||
|
i16 *ptxDebug1;
|
||||||
|
i16 *ptxDebug2;
|
||||||
|
i16 *ptxDebug3;
|
||||||
|
|
||||||
|
t_dec_ctcss *rxCtcss;
|
||||||
|
|
||||||
|
i16 clamplitudeDcs;
|
||||||
|
i16 centerDcs;
|
||||||
|
u32 dcsBlankingTimer;
|
||||||
|
i16 dcsDecode; // current dcs decode value
|
||||||
|
|
||||||
|
i16 clamplitudeLsd;
|
||||||
|
i16 centerLsd;
|
||||||
|
t_decLsd decLsd[2]; // for both polarities
|
||||||
|
|
||||||
|
} t_pmr_chan;
|
||||||
|
|
||||||
|
static i16 TxTestTone(t_pmr_chan *pChan, i16 function);
|
||||||
|
|
||||||
|
t_pmr_chan *createPmrChannel(t_pmr_chan *tChan, i16 numSamples);
|
||||||
|
t_pmr_sps *createPmrSps(void);
|
||||||
|
i16 destroyPmrChannel(t_pmr_chan *pChan);
|
||||||
|
i16 destroyPmrSps(t_pmr_sps *pSps);
|
||||||
|
i16 pmr_rx_frontend(t_pmr_sps *mySps);
|
||||||
|
i16 pmr_gp_fir(t_pmr_sps *mySps);
|
||||||
|
i16 pmr_gp_iir(t_pmr_sps *mySps);
|
||||||
|
i16 gp_inte_00(t_pmr_sps *mySps);
|
||||||
|
i16 gp_diff(t_pmr_sps *mySps);
|
||||||
|
i16 CenterSlicer(t_pmr_sps *mySps);
|
||||||
|
i16 ctcss_detect(t_pmr_chan *pmrChan);
|
||||||
|
i16 SoftLimiter(t_pmr_sps *mySps);
|
||||||
|
i16 SigGen(t_pmr_sps *mySps);
|
||||||
|
i16 pmrMixer(t_pmr_sps *mySps);
|
||||||
|
i16 DelayLine(t_pmr_sps *mySps);
|
||||||
|
i16 PmrRx(t_pmr_chan *PmrChan, i16 *input, i16 *output);
|
||||||
|
i16 PmrTx(t_pmr_chan *PmrChan, i16 *input, i16 *output);
|
||||||
|
i16 CtcssFreqIndex(float freq);
|
||||||
|
i16 MeasureBlock(t_pmr_sps *mySps);
|
||||||
|
#endif /* ! XPMR_H */
|
||||||
|
|
||||||
|
/* end of file */
|
||||||
|
|
||||||
|
|
||||||
|
|
963
channels/xpmr/xpmr_coef.h
Executable file
963
channels/xpmr/xpmr_coef.h
Executable file
@@ -0,0 +1,963 @@
|
|||||||
|
/*
|
||||||
|
* xpmr_coef.h - for Xelatec Private Mobile Radio Processes
|
||||||
|
*
|
||||||
|
* All Rights Reserved. Copyright (C)2007, Xelatec, LLC
|
||||||
|
*
|
||||||
|
* 20070808 1235 Steven Henke, W9SH, sph@xelatec.com
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* This version may be optionally licenced under the GNU LGPL licence.
|
||||||
|
*
|
||||||
|
* A license has been granted to Digium (via disclaimer) for the use of
|
||||||
|
* this code.
|
||||||
|
*
|
||||||
|
* Some filter coeficients via 'WinFilter' http://www.winfilter.20m.com.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
*
|
||||||
|
* \brief Private Land Mobile Radio Channel Voice and Signaling Processor
|
||||||
|
*
|
||||||
|
* \author Steven Henke, W9SH <sph@xelatec.com> Xelatec, LLC
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XPMR_COEF_H
|
||||||
|
#define XMPR_COEF_H 1
|
||||||
|
|
||||||
|
// frequencies in 0.1 Hz
|
||||||
|
const u32 dtmf_row[] =
|
||||||
|
{
|
||||||
|
6970, 7700, 8520, 9410
|
||||||
|
};
|
||||||
|
const u32 dtmf_col[] =
|
||||||
|
{
|
||||||
|
12090, 13360, 14770, 16330
|
||||||
|
};
|
||||||
|
|
||||||
|
const i16 coef_dcs_rx = 1488; // dcs rx data divisor for oversampling 8000/134.4
|
||||||
|
const i16 coef_dcs_tx = 5952; // dcs tx data divisor
|
||||||
|
|
||||||
|
const i16 coef_lsd_div = 672; // low speed data divisor
|
||||||
|
const u32 coef_lsd_sync = 0x158; // 000101011000
|
||||||
|
const u32 coef_lsd_sync_pattern[] = {0x0000000F, 0x0F0FF000};
|
||||||
|
|
||||||
|
#define CTCSS_COEF_INT 120
|
||||||
|
#define CTCSS_SAMPLE_RATE 8000
|
||||||
|
#define TDIV(x) ((CTCSS_SAMPLE_RATE*1000/x)+5)/10
|
||||||
|
|
||||||
|
i32 coef_ctcss[4][5]=
|
||||||
|
{
|
||||||
|
// freq, divisor, integrator, filter
|
||||||
|
{770,TDIV(770),CTCSS_COEF_INT,0,0},
|
||||||
|
{1000,TDIV(1000),CTCSS_COEF_INT,0,0},
|
||||||
|
{1035,TDIV(1035),CTCSS_COEF_INT,0,0},
|
||||||
|
{0,0,0,0}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
i16 coef_ctcss_div[]=
|
||||||
|
{
|
||||||
|
2985, // 00 067.0
|
||||||
|
2782, // 01 071.9
|
||||||
|
2688, // 02 074.4
|
||||||
|
2597, // 03 077.0
|
||||||
|
2509, // 04 079.7
|
||||||
|
2424, // 05 082.5
|
||||||
|
2342, // 06 085.4
|
||||||
|
2260, // 07 088.5
|
||||||
|
2186, // 08 091.5
|
||||||
|
2110, // 09 094.8
|
||||||
|
2053, // 10 097.4
|
||||||
|
2000, // 11 100.0
|
||||||
|
1932, // 12 103.5
|
||||||
|
1866, // 13 107.2
|
||||||
|
1803, // 14 110.9
|
||||||
|
1742, // 15 114.8
|
||||||
|
1684, // 16 118.8
|
||||||
|
1626, // 17 123.0
|
||||||
|
1571, // 18 127.3
|
||||||
|
1517, // 19 131.8
|
||||||
|
1465, // 20 136.5
|
||||||
|
1415, // 21 141.3
|
||||||
|
1368, // 22 146.2
|
||||||
|
1321, // 23 151.4
|
||||||
|
1276, // 24 156.7
|
||||||
|
1233, // 25 162.2
|
||||||
|
1191, // 26 167.9
|
||||||
|
1151, // 27 173.8
|
||||||
|
1112, // 28 179.9
|
||||||
|
1074, // 29 186.2
|
||||||
|
1037, // 30 192.8
|
||||||
|
983, // 31 203.5
|
||||||
|
949, // 32 210.7
|
||||||
|
917, // 33 218.1
|
||||||
|
886, // 34 225.7
|
||||||
|
856, // 35 233.6
|
||||||
|
827, // 36 241.8
|
||||||
|
799 // 37 250.3
|
||||||
|
};
|
||||||
|
|
||||||
|
float freq_ctcss[]=
|
||||||
|
{
|
||||||
|
067.0, // 00
|
||||||
|
071.9, // 01
|
||||||
|
074.4, // 02
|
||||||
|
077.0, // 03
|
||||||
|
079.7, // 04
|
||||||
|
082.5, // 05
|
||||||
|
085.4, // 06
|
||||||
|
088.5, // 07
|
||||||
|
091.5, // 08
|
||||||
|
094.8, // 09
|
||||||
|
097.4, // 10
|
||||||
|
100.0, // 11
|
||||||
|
103.5, // 12
|
||||||
|
107.2, // 13
|
||||||
|
110.9, // 14
|
||||||
|
114.8, // 15
|
||||||
|
118.8, // 16
|
||||||
|
123.0, // 17
|
||||||
|
127.3, // 18
|
||||||
|
131.8, // 19
|
||||||
|
136.5, // 20
|
||||||
|
141.3, // 21
|
||||||
|
146.2, // 22
|
||||||
|
151.4, // 23
|
||||||
|
156.7, // 24
|
||||||
|
162.2, // 25
|
||||||
|
167.9, // 26
|
||||||
|
173.8, // 27
|
||||||
|
179.9, // 28
|
||||||
|
186.2, // 29
|
||||||
|
192.8, // 30
|
||||||
|
203.5, // 31
|
||||||
|
210.7 , // 32
|
||||||
|
218.1 , // 33
|
||||||
|
225.7 , // 34
|
||||||
|
233.6 , // 35
|
||||||
|
241.8 , // 36
|
||||||
|
250.3 // 37
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
noise squelch carrier detect filter
|
||||||
|
*/
|
||||||
|
static const int16_t taps_fir_bpf_noise_1 = 66;
|
||||||
|
static const int32_t gain_fir_bpf_noise_1 = 65536;
|
||||||
|
static const int16_t coef_fir_bpf_noise_1[] = {
|
||||||
|
139,
|
||||||
|
-182,
|
||||||
|
-269,
|
||||||
|
-66,
|
||||||
|
56,
|
||||||
|
59,
|
||||||
|
250,
|
||||||
|
395,
|
||||||
|
-80,
|
||||||
|
-775,
|
||||||
|
-557,
|
||||||
|
437,
|
||||||
|
779,
|
||||||
|
210,
|
||||||
|
-17,
|
||||||
|
123,
|
||||||
|
-692,
|
||||||
|
-1664,
|
||||||
|
-256,
|
||||||
|
2495,
|
||||||
|
2237,
|
||||||
|
-1018,
|
||||||
|
-2133,
|
||||||
|
-478,
|
||||||
|
-1134,
|
||||||
|
-2711,
|
||||||
|
2642,
|
||||||
|
10453,
|
||||||
|
4010,
|
||||||
|
-14385,
|
||||||
|
-16488,
|
||||||
|
6954,
|
||||||
|
23030,
|
||||||
|
6954,
|
||||||
|
-16488,
|
||||||
|
-14385,
|
||||||
|
4010,
|
||||||
|
10453,
|
||||||
|
2642,
|
||||||
|
-2711,
|
||||||
|
-1134,
|
||||||
|
-478,
|
||||||
|
-2133,
|
||||||
|
-1018,
|
||||||
|
2237,
|
||||||
|
2495,
|
||||||
|
-256,
|
||||||
|
-1664,
|
||||||
|
-692,
|
||||||
|
123,
|
||||||
|
-17,
|
||||||
|
210,
|
||||||
|
779,
|
||||||
|
437,
|
||||||
|
-557,
|
||||||
|
-775,
|
||||||
|
-80,
|
||||||
|
395,
|
||||||
|
250,
|
||||||
|
59,
|
||||||
|
56,
|
||||||
|
-66,
|
||||||
|
-269,
|
||||||
|
-182,
|
||||||
|
139,
|
||||||
|
257
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
tbd
|
||||||
|
*/
|
||||||
|
static const int16_t taps_fir_lpf_3K_1 = 66;
|
||||||
|
static const int32_t gain_fir_lpf_3K_1 = 131072;
|
||||||
|
static const int16_t coef_fir_lpf_3K_1[] = {
|
||||||
|
259,
|
||||||
|
58,
|
||||||
|
-185,
|
||||||
|
-437,
|
||||||
|
-654,
|
||||||
|
-793,
|
||||||
|
-815,
|
||||||
|
-696,
|
||||||
|
-434,
|
||||||
|
-48,
|
||||||
|
414,
|
||||||
|
886,
|
||||||
|
1284,
|
||||||
|
1523,
|
||||||
|
1529,
|
||||||
|
1254,
|
||||||
|
691,
|
||||||
|
-117,
|
||||||
|
-1078,
|
||||||
|
-2049,
|
||||||
|
-2854,
|
||||||
|
-3303,
|
||||||
|
-3220,
|
||||||
|
-2472,
|
||||||
|
-995,
|
||||||
|
1187,
|
||||||
|
3952,
|
||||||
|
7086,
|
||||||
|
10300,
|
||||||
|
13270,
|
||||||
|
15672,
|
||||||
|
17236,
|
||||||
|
17778,
|
||||||
|
17236,
|
||||||
|
15672,
|
||||||
|
13270,
|
||||||
|
10300,
|
||||||
|
7086,
|
||||||
|
3952,
|
||||||
|
1187,
|
||||||
|
-995,
|
||||||
|
-2472,
|
||||||
|
-3220,
|
||||||
|
-3303,
|
||||||
|
-2854,
|
||||||
|
-2049,
|
||||||
|
-1078,
|
||||||
|
-117,
|
||||||
|
691,
|
||||||
|
1254,
|
||||||
|
1529,
|
||||||
|
1523,
|
||||||
|
1284,
|
||||||
|
886,
|
||||||
|
414,
|
||||||
|
-48,
|
||||||
|
-434,
|
||||||
|
-696,
|
||||||
|
-815,
|
||||||
|
-793,
|
||||||
|
-654,
|
||||||
|
-437,
|
||||||
|
-185,
|
||||||
|
58,
|
||||||
|
259,
|
||||||
|
393
|
||||||
|
};
|
||||||
|
|
||||||
|
/**************************************************************
|
||||||
|
Filter type: Low Pass
|
||||||
|
Filter model: Butterworth
|
||||||
|
Filter order: 9
|
||||||
|
Sampling Frequency: 8 KHz
|
||||||
|
Cut Frequency: 0.250000 KHz
|
||||||
|
Coefficents Quantization: 16-bit
|
||||||
|
***************************************************************/
|
||||||
|
static const int16_t taps_fir_lpf_250_11_64 = 64;
|
||||||
|
static const int32_t gain_fir_lpf_250_11_64 = 262144;
|
||||||
|
static const int16_t coef_fir_lpf_250_11_64[] =
|
||||||
|
{
|
||||||
|
366,
|
||||||
|
-3,
|
||||||
|
-418,
|
||||||
|
-865,
|
||||||
|
-1328,
|
||||||
|
-1788,
|
||||||
|
-2223,
|
||||||
|
-2609,
|
||||||
|
-2922,
|
||||||
|
-3138,
|
||||||
|
-3232,
|
||||||
|
-3181,
|
||||||
|
-2967,
|
||||||
|
-2573,
|
||||||
|
-1988,
|
||||||
|
-1206,
|
||||||
|
-228,
|
||||||
|
937,
|
||||||
|
2277,
|
||||||
|
3767,
|
||||||
|
5379,
|
||||||
|
7077,
|
||||||
|
8821,
|
||||||
|
10564,
|
||||||
|
12259,
|
||||||
|
13855,
|
||||||
|
15305,
|
||||||
|
16563,
|
||||||
|
17588,
|
||||||
|
18346,
|
||||||
|
18812,
|
||||||
|
18968,
|
||||||
|
18812,
|
||||||
|
18346,
|
||||||
|
17588,
|
||||||
|
16563,
|
||||||
|
15305,
|
||||||
|
13855,
|
||||||
|
12259,
|
||||||
|
10564,
|
||||||
|
8821,
|
||||||
|
7077,
|
||||||
|
5379,
|
||||||
|
3767,
|
||||||
|
2277,
|
||||||
|
937,
|
||||||
|
-228,
|
||||||
|
-1206,
|
||||||
|
-1988,
|
||||||
|
-2573,
|
||||||
|
-2967,
|
||||||
|
-3181,
|
||||||
|
-3232,
|
||||||
|
-3138,
|
||||||
|
-2922,
|
||||||
|
-2609,
|
||||||
|
-2223,
|
||||||
|
-1788,
|
||||||
|
-1328,
|
||||||
|
-865,
|
||||||
|
-418,
|
||||||
|
-3,
|
||||||
|
366,
|
||||||
|
680
|
||||||
|
};
|
||||||
|
|
||||||
|
// de-emphasis integrator 300 Hz with 8KS/s
|
||||||
|
// a0, b1
|
||||||
|
static const int16_t taps_int_lpf_300_1_2 = 2;
|
||||||
|
static const int32_t gain_int_lpf_300_1_2 = 8182;
|
||||||
|
static const int16_t coef_int_lpf_300_1_2[]={
|
||||||
|
6878,
|
||||||
|
25889
|
||||||
|
};
|
||||||
|
|
||||||
|
// pre-emphasis differentiator 4000 Hz with 8KS/s
|
||||||
|
// a0,a1,b0,
|
||||||
|
static const int16_t taps_int_hpf_4000_1_2 = 2;
|
||||||
|
static const int32_t gain_int_hpf_4000_1_2 = 16384;
|
||||||
|
static const int16_t coef_int_hpf_4000_1_2[]={
|
||||||
|
17610,
|
||||||
|
-17610,
|
||||||
|
2454
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
ltr crc table
|
||||||
|
from http://www.radioreference.com/forums/showthread.php?t=24126
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const u8 ltr_table[]=
|
||||||
|
{
|
||||||
|
0x38, // 00 Area 0111000
|
||||||
|
0x1c, // 01 Channel 4 0011100
|
||||||
|
0x0e, // 02 Channel 3 0001110
|
||||||
|
0x46, // 03 Channel 2 1000110
|
||||||
|
0x23, // 04 Channel 1 0100011
|
||||||
|
0x51, // 05 Channel 0 1010001
|
||||||
|
0x68, // 06 Home 4 1101000
|
||||||
|
0x75, // 07 Home 3 1110101
|
||||||
|
0x7a, // 08 Home 2 1111010
|
||||||
|
0x3d, // 09 Home 1 0111101
|
||||||
|
0x1f, // 10 Home 0 0011111
|
||||||
|
0x4f, // 11 Group 7 1001111
|
||||||
|
0x26, // 12 Group 6 0100110
|
||||||
|
0x52, // 13 Group 5 1010010
|
||||||
|
0x29, // 14 Group 4 0101001
|
||||||
|
0x15, // 15 Group 3 0010101
|
||||||
|
0x0d, // 16 Group 2 0001101
|
||||||
|
0x45, // 17 Group 1 1000101
|
||||||
|
0x62, // 18 Group 0 1100010
|
||||||
|
0x31, // 19 Free 4 0110001
|
||||||
|
0x19, // 20 Free 3 0011001
|
||||||
|
0x0d, // 21 Free 2 0001101
|
||||||
|
0x07, // 22 Free 1 0000111
|
||||||
|
0x43 // 23 Free 0 1000011
|
||||||
|
};
|
||||||
|
|
||||||
|
static const i16 bitWeight[]=
|
||||||
|
{
|
||||||
|
0, // 0
|
||||||
|
1, // 1
|
||||||
|
1, // 2
|
||||||
|
2, // 3
|
||||||
|
1, // 4
|
||||||
|
2, // 5
|
||||||
|
2, // 6
|
||||||
|
3, // 7
|
||||||
|
1, // 8
|
||||||
|
2, // 9
|
||||||
|
2, // 10
|
||||||
|
3, // 11
|
||||||
|
2, // 12
|
||||||
|
3, // 13
|
||||||
|
3, // 14
|
||||||
|
4, // 15
|
||||||
|
1, // 16
|
||||||
|
2, // 17
|
||||||
|
2, // 18
|
||||||
|
3, // 19
|
||||||
|
2, // 20
|
||||||
|
3, // 21
|
||||||
|
3, // 22
|
||||||
|
4, // 23
|
||||||
|
2, // 24
|
||||||
|
3, // 25
|
||||||
|
3, // 26
|
||||||
|
4, // 27
|
||||||
|
3, // 28
|
||||||
|
4, // 29
|
||||||
|
4, // 30
|
||||||
|
5, // 31
|
||||||
|
1, // 32
|
||||||
|
2, // 33
|
||||||
|
2, // 34
|
||||||
|
3, // 35
|
||||||
|
2, // 36
|
||||||
|
3, // 37
|
||||||
|
3, // 38
|
||||||
|
4, // 39
|
||||||
|
2, // 40
|
||||||
|
3, // 41
|
||||||
|
3, // 42
|
||||||
|
4, // 43
|
||||||
|
3, // 44
|
||||||
|
4, // 45
|
||||||
|
4, // 46
|
||||||
|
5, // 47
|
||||||
|
2, // 48
|
||||||
|
3, // 49
|
||||||
|
3, // 50
|
||||||
|
4, // 51
|
||||||
|
3, // 52
|
||||||
|
4, // 53
|
||||||
|
4, // 54
|
||||||
|
5, // 55
|
||||||
|
3, // 56
|
||||||
|
4, // 57
|
||||||
|
4, // 58
|
||||||
|
5, // 59
|
||||||
|
4, // 60
|
||||||
|
5, // 61
|
||||||
|
5, // 62
|
||||||
|
6, // 63
|
||||||
|
1, // 64
|
||||||
|
2, // 65
|
||||||
|
2, // 66
|
||||||
|
3, // 67
|
||||||
|
2, // 68
|
||||||
|
3, // 69
|
||||||
|
3, // 70
|
||||||
|
4, // 71
|
||||||
|
2, // 72
|
||||||
|
3, // 73
|
||||||
|
3, // 74
|
||||||
|
4, // 75
|
||||||
|
3, // 76
|
||||||
|
4, // 77
|
||||||
|
4, // 78
|
||||||
|
5, // 79
|
||||||
|
2, // 80
|
||||||
|
3, // 81
|
||||||
|
3, // 82
|
||||||
|
4, // 83
|
||||||
|
3, // 84
|
||||||
|
4, // 85
|
||||||
|
4, // 86
|
||||||
|
5, // 87
|
||||||
|
3, // 88
|
||||||
|
4, // 89
|
||||||
|
4, // 90
|
||||||
|
5, // 91
|
||||||
|
4, // 92
|
||||||
|
5, // 93
|
||||||
|
5, // 94
|
||||||
|
6, // 95
|
||||||
|
2, // 96
|
||||||
|
3, // 97
|
||||||
|
3, // 98
|
||||||
|
4, // 99
|
||||||
|
3, // 100
|
||||||
|
4, // 101
|
||||||
|
4, // 102
|
||||||
|
5, // 103
|
||||||
|
3, // 104
|
||||||
|
4, // 105
|
||||||
|
4, // 106
|
||||||
|
5, // 107
|
||||||
|
4, // 108
|
||||||
|
5, // 109
|
||||||
|
5, // 110
|
||||||
|
6, // 111
|
||||||
|
3, // 112
|
||||||
|
4, // 113
|
||||||
|
4, // 114
|
||||||
|
5, // 115
|
||||||
|
4, // 116
|
||||||
|
5, // 117
|
||||||
|
5, // 118
|
||||||
|
6, // 119
|
||||||
|
4, // 120
|
||||||
|
5, // 121
|
||||||
|
5, // 122
|
||||||
|
6, // 123
|
||||||
|
5, // 124
|
||||||
|
6, // 125
|
||||||
|
6, // 126
|
||||||
|
7, // 127
|
||||||
|
1, // 128
|
||||||
|
2, // 129
|
||||||
|
2, // 130
|
||||||
|
3, // 131
|
||||||
|
2, // 132
|
||||||
|
3, // 133
|
||||||
|
3, // 134
|
||||||
|
4, // 135
|
||||||
|
2, // 136
|
||||||
|
3, // 137
|
||||||
|
3, // 138
|
||||||
|
4, // 139
|
||||||
|
3, // 140
|
||||||
|
4, // 141
|
||||||
|
4, // 142
|
||||||
|
5, // 143
|
||||||
|
2, // 144
|
||||||
|
3, // 145
|
||||||
|
3, // 146
|
||||||
|
4, // 147
|
||||||
|
3, // 148
|
||||||
|
4, // 149
|
||||||
|
4, // 150
|
||||||
|
5, // 151
|
||||||
|
3, // 152
|
||||||
|
4, // 153
|
||||||
|
4, // 154
|
||||||
|
5, // 155
|
||||||
|
4, // 156
|
||||||
|
5, // 157
|
||||||
|
5, // 158
|
||||||
|
6, // 159
|
||||||
|
2, // 160
|
||||||
|
3, // 161
|
||||||
|
3, // 162
|
||||||
|
4, // 163
|
||||||
|
3, // 164
|
||||||
|
4, // 165
|
||||||
|
4, // 166
|
||||||
|
5, // 167
|
||||||
|
3, // 168
|
||||||
|
4, // 169
|
||||||
|
4, // 170
|
||||||
|
5, // 171
|
||||||
|
4, // 172
|
||||||
|
5, // 173
|
||||||
|
5, // 174
|
||||||
|
6, // 175
|
||||||
|
3, // 176
|
||||||
|
4, // 177
|
||||||
|
4, // 178
|
||||||
|
5, // 179
|
||||||
|
4, // 180
|
||||||
|
5, // 181
|
||||||
|
5, // 182
|
||||||
|
6, // 183
|
||||||
|
4, // 184
|
||||||
|
5, // 185
|
||||||
|
5, // 186
|
||||||
|
6, // 187
|
||||||
|
5, // 188
|
||||||
|
6, // 189
|
||||||
|
6, // 190
|
||||||
|
7, // 191
|
||||||
|
2, // 192
|
||||||
|
3, // 193
|
||||||
|
3, // 194
|
||||||
|
4, // 195
|
||||||
|
3, // 196
|
||||||
|
4, // 197
|
||||||
|
4, // 198
|
||||||
|
5, // 199
|
||||||
|
3, // 200
|
||||||
|
4, // 201
|
||||||
|
4, // 202
|
||||||
|
5, // 203
|
||||||
|
4, // 204
|
||||||
|
5, // 205
|
||||||
|
5, // 206
|
||||||
|
6, // 207
|
||||||
|
3, // 208
|
||||||
|
4, // 209
|
||||||
|
4, // 210
|
||||||
|
5, // 211
|
||||||
|
4, // 212
|
||||||
|
5, // 213
|
||||||
|
5, // 214
|
||||||
|
6, // 215
|
||||||
|
4, // 216
|
||||||
|
5, // 217
|
||||||
|
5, // 218
|
||||||
|
6, // 219
|
||||||
|
5, // 220
|
||||||
|
6, // 221
|
||||||
|
6, // 222
|
||||||
|
7, // 223
|
||||||
|
3, // 224
|
||||||
|
4, // 225
|
||||||
|
4, // 226
|
||||||
|
5, // 227
|
||||||
|
4, // 228
|
||||||
|
5, // 229
|
||||||
|
5, // 230
|
||||||
|
6, // 231
|
||||||
|
4, // 232
|
||||||
|
5, // 233
|
||||||
|
5, // 234
|
||||||
|
6, // 235
|
||||||
|
5, // 236
|
||||||
|
6, // 237
|
||||||
|
6, // 238
|
||||||
|
7, // 239
|
||||||
|
4, // 240
|
||||||
|
5, // 241
|
||||||
|
5, // 242
|
||||||
|
6, // 243
|
||||||
|
5, // 244
|
||||||
|
6, // 245
|
||||||
|
6, // 246
|
||||||
|
7, // 247
|
||||||
|
5, // 248
|
||||||
|
6, // 249
|
||||||
|
6, // 250
|
||||||
|
7, // 251
|
||||||
|
6, // 252
|
||||||
|
7, // 253
|
||||||
|
7, // 254
|
||||||
|
8 // 255
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
ctcss decode filter
|
||||||
|
*/
|
||||||
|
/**************************************************************
|
||||||
|
Filter type: Low Pass
|
||||||
|
Filter model: Butterworth
|
||||||
|
Filter order: 9
|
||||||
|
Sampling Frequency: 8 KHz
|
||||||
|
Cut Frequency: 0.250000 KHz
|
||||||
|
Coefficents Quantization: 16-bit
|
||||||
|
***************************************************************/
|
||||||
|
static const int16_t taps_fir_lpf_250_9_66 = 66;
|
||||||
|
static const int32_t gain_fir_lpf_250_9_66 = 262144;
|
||||||
|
static const int16_t coef_fir_lpf_250_9_66[] =
|
||||||
|
{
|
||||||
|
676,
|
||||||
|
364,
|
||||||
|
-3,
|
||||||
|
-415,
|
||||||
|
-860,
|
||||||
|
-1320,
|
||||||
|
-1777,
|
||||||
|
-2209,
|
||||||
|
-2593,
|
||||||
|
-2904,
|
||||||
|
-3119,
|
||||||
|
-3212,
|
||||||
|
-3162,
|
||||||
|
-2949,
|
||||||
|
-2557,
|
||||||
|
-1975,
|
||||||
|
-1198,
|
||||||
|
-226,
|
||||||
|
932,
|
||||||
|
2263,
|
||||||
|
3744,
|
||||||
|
5346,
|
||||||
|
7034,
|
||||||
|
8767,
|
||||||
|
10499,
|
||||||
|
12184,
|
||||||
|
13770,
|
||||||
|
15211,
|
||||||
|
16462,
|
||||||
|
17480,
|
||||||
|
18234,
|
||||||
|
18696,
|
||||||
|
18852,
|
||||||
|
18696,
|
||||||
|
18234,
|
||||||
|
17480,
|
||||||
|
16462,
|
||||||
|
15211,
|
||||||
|
13770,
|
||||||
|
12184,
|
||||||
|
10499,
|
||||||
|
8767,
|
||||||
|
7034,
|
||||||
|
5346,
|
||||||
|
3744,
|
||||||
|
2263,
|
||||||
|
932,
|
||||||
|
-226,
|
||||||
|
-1198,
|
||||||
|
-1975,
|
||||||
|
-2557,
|
||||||
|
-2949,
|
||||||
|
-3162,
|
||||||
|
-3212,
|
||||||
|
-3119,
|
||||||
|
-2904,
|
||||||
|
-2593,
|
||||||
|
-2209,
|
||||||
|
-1777,
|
||||||
|
-1320,
|
||||||
|
-860,
|
||||||
|
-415,
|
||||||
|
-3,
|
||||||
|
364,
|
||||||
|
676,
|
||||||
|
927
|
||||||
|
};
|
||||||
|
/* *************************************************************
|
||||||
|
Filter type: Low Pass
|
||||||
|
Filter model: Butterworth
|
||||||
|
Filter order: 9
|
||||||
|
Sampling Frequency: 8 KHz
|
||||||
|
Cut Frequency: 0.215 KHz
|
||||||
|
Coefficents Quantization: 16-bit
|
||||||
|
***************************************************************/
|
||||||
|
static const int16_t taps_fir_lpf_215_9_88 = 88;
|
||||||
|
static const int32_t gain_fir_lpf_215_9_88 = 524288;
|
||||||
|
static const int16_t coef_fir_lpf_215_9_88[] = {
|
||||||
|
2038,
|
||||||
|
2049,
|
||||||
|
1991,
|
||||||
|
1859,
|
||||||
|
1650,
|
||||||
|
1363,
|
||||||
|
999,
|
||||||
|
562,
|
||||||
|
58,
|
||||||
|
-502,
|
||||||
|
-1106,
|
||||||
|
-1739,
|
||||||
|
-2382,
|
||||||
|
-3014,
|
||||||
|
-3612,
|
||||||
|
-4153,
|
||||||
|
-4610,
|
||||||
|
-4959,
|
||||||
|
-5172,
|
||||||
|
-5226,
|
||||||
|
-5098,
|
||||||
|
-4769,
|
||||||
|
-4222,
|
||||||
|
-3444,
|
||||||
|
-2430,
|
||||||
|
-1176,
|
||||||
|
310,
|
||||||
|
2021,
|
||||||
|
3937,
|
||||||
|
6035,
|
||||||
|
8284,
|
||||||
|
10648,
|
||||||
|
13086,
|
||||||
|
15550,
|
||||||
|
17993,
|
||||||
|
20363,
|
||||||
|
22608,
|
||||||
|
24677,
|
||||||
|
26522,
|
||||||
|
28099,
|
||||||
|
29369,
|
||||||
|
30299,
|
||||||
|
30867,
|
||||||
|
31058,
|
||||||
|
30867,
|
||||||
|
30299,
|
||||||
|
29369,
|
||||||
|
28099,
|
||||||
|
26522,
|
||||||
|
24677,
|
||||||
|
22608,
|
||||||
|
20363,
|
||||||
|
17993,
|
||||||
|
15550,
|
||||||
|
13086,
|
||||||
|
10648,
|
||||||
|
8284,
|
||||||
|
6035,
|
||||||
|
3937,
|
||||||
|
2021,
|
||||||
|
310,
|
||||||
|
-1176,
|
||||||
|
-2430,
|
||||||
|
-3444,
|
||||||
|
-4222,
|
||||||
|
-4769,
|
||||||
|
-5098,
|
||||||
|
-5226,
|
||||||
|
-5172,
|
||||||
|
-4959,
|
||||||
|
-4610,
|
||||||
|
-4153,
|
||||||
|
-3612,
|
||||||
|
-3014,
|
||||||
|
-2382,
|
||||||
|
-1739,
|
||||||
|
-1106,
|
||||||
|
-502,
|
||||||
|
58,
|
||||||
|
562,
|
||||||
|
999,
|
||||||
|
1363,
|
||||||
|
1650,
|
||||||
|
1859,
|
||||||
|
1991,
|
||||||
|
2049,
|
||||||
|
2038,
|
||||||
|
1966
|
||||||
|
};
|
||||||
|
// end coef fir_lpf_215_9_88
|
||||||
|
//
|
||||||
|
/**************************************************************
|
||||||
|
Filter type: High Pass
|
||||||
|
Filter model: Butterworth
|
||||||
|
Filter order: 9
|
||||||
|
Sampling Frequency: 8 KHz
|
||||||
|
Cut Frequency: 0.300000 KHz
|
||||||
|
Coefficents Quantization: 16-bit
|
||||||
|
***************************************************************/
|
||||||
|
static const int16_t taps_fir_hpf_300_9_66 = 66;
|
||||||
|
static const int32_t gain_fir_hpf_300_9_66 = 32768;
|
||||||
|
static const int16_t coef_fir_hpf_300_9_66[] =
|
||||||
|
{
|
||||||
|
-141,
|
||||||
|
-114,
|
||||||
|
-77,
|
||||||
|
-30,
|
||||||
|
23,
|
||||||
|
83,
|
||||||
|
147,
|
||||||
|
210,
|
||||||
|
271,
|
||||||
|
324,
|
||||||
|
367,
|
||||||
|
396,
|
||||||
|
407,
|
||||||
|
396,
|
||||||
|
362,
|
||||||
|
302,
|
||||||
|
216,
|
||||||
|
102,
|
||||||
|
-36,
|
||||||
|
-199,
|
||||||
|
-383,
|
||||||
|
-585,
|
||||||
|
-798,
|
||||||
|
-1017,
|
||||||
|
-1237,
|
||||||
|
-1452,
|
||||||
|
-1653,
|
||||||
|
-1836,
|
||||||
|
-1995,
|
||||||
|
-2124,
|
||||||
|
-2219,
|
||||||
|
-2278,
|
||||||
|
30463,
|
||||||
|
-2278,
|
||||||
|
-2219,
|
||||||
|
-2124,
|
||||||
|
-1995,
|
||||||
|
-1836,
|
||||||
|
-1653,
|
||||||
|
-1452,
|
||||||
|
-1237,
|
||||||
|
-1017,
|
||||||
|
-798,
|
||||||
|
-585,
|
||||||
|
-383,
|
||||||
|
-199,
|
||||||
|
-36,
|
||||||
|
102,
|
||||||
|
216,
|
||||||
|
302,
|
||||||
|
362,
|
||||||
|
396,
|
||||||
|
407,
|
||||||
|
396,
|
||||||
|
367,
|
||||||
|
324,
|
||||||
|
271,
|
||||||
|
210,
|
||||||
|
147,
|
||||||
|
83,
|
||||||
|
23,
|
||||||
|
-30,
|
||||||
|
-77,
|
||||||
|
-114,
|
||||||
|
-141,
|
||||||
|
-158
|
||||||
|
};
|
||||||
|
#endif /* !XPMR_COEF_H */
|
||||||
|
/* end of file */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user