Re: MMDVM & UDRC

Jonathan Naylor
 

Hi Annaliese

There are a set of filter coefficients for 48 kHz sample rate in a branch of the MMDVM firmware. I’ll look into slotting those in and altering the other variables.

Ideally I’d recalculate them in MATLAB as floating point but my license for it ran out. Octave can probably do it though. Even rescaling from Q15 format will probably give enough precision.

It’s bizarre seeing Linux kernel AX25 being mentioned. I wrote that stuff 23 years ago and last looked at it 20 years ago. I’m not sure I could add anything to that discussion these days.

Jonathan G4KLX 




On Friday, December 7, 2018, 06:01, Annaliese McDermond <nh6z@...> wrote:

Dan --

Because I’m trying to get my repeater up and running again, and would like to use MMDVM-UDRC to do so, I’ve been doing some work on getting MMDVM-UDRC to work.  My code is in the nwdigitalradio github account at:

https://github.com/nwdigitalradio/MMDVM-UDRC

You’re welcome to play with it with the understanding that it’s development code, may not work at all.  I’m getting close to having things possibly working acceptably.


An issue you’ll have to deal with is that mmdvm-udrc expects a 24000 sample rate.  The UDRC hardware doesn’t support this and if you try to use hw:CARD=udrc,DEV=0 it will fail complaining on not being able to send sample rate.  You might try using plughw:CARD=udrc,DEV=0 instead.  I’m using a custom asound.conf to support it.

More as I get things worked out.

--
Annaliese McDermond (NH6Z)
nh6z@...



> On Dec 6, 2018, at 4:51 AM, Dan Porter (AI2M) <groups@...> wrote:
>
> Hi Rich,
>
> Did you eventually manage to get it working?
> I was thinking of trying again with my UDRC.
>
> 73, Dan - AI2M
>
>> On Jul 6, 2018, at 3:05 PM, Rich KR4PI <rich.schnieders@...> wrote:
>>
>> Thanks John, that helped but there were still a few errors along the way:
>>
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o Biquad.o Biquad.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalDMR.o CalDMR.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalDStarRX.o CalDStarRX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalDStarTX.o CalDStarTX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalNXDN.o CalNXDN.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o CalP25.o CalP25.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o CWIdTX.o CWIdTX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRDMORX.o DMRDMORX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRDMOTX.o DMRDMOTX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o DMRSlotType.o DMRSlotType.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o DStarRX.o DStarRX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o DStarTX.o DStarTX.cpp
>> DStarTX.cpp: In member function ‘void CDStarTX::txHeader(const uint8_t*, uint8_t*) const’:
>> DStarTX.cpp:382:7: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
>>        if (d & 0x08U)
>>        ^~
>> DStarTX.cpp:384:9: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the ‘if’
>>          i++;
>>          ^
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o FIR.o FIR.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o FIRInterpolator.o FIRInterpolator.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o IO.o IO.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o IOUDRC.o IOUDRC.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o MMDVM.o MMDVM.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o NXDNRX.o NXDNRX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o NXDNTX.o NXDNTX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o P25RX.o P25RX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o P25TX.o P25TX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o POCSAGTX.o POCSAGTX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o SampleRB.o SampleRB.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o SerialController.o SerialController.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o SerialPort.o SerialPort.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o SerialRB.o SerialRB.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o SoundCardReaderWriter.o SoundCardReaderWriter.cpp
>> SoundCardReaderWriter.cpp: In member function ‘virtual void CSoundCardWriter::entry()’:
>> SoundCardReaderWriter.cpp:479:85: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
>>  le ((ret = ::snd_pcm_writei(m_handle, m_samples + offset, nSamples - offset)) != (nSamples - offset)) {
>>      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o Thread.o Thread.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o Utils.o Utils.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o YSFRX.o YSFRX.cpp
>> g++ -g -O3 -Wall -std=c++0x -pthread -c -o YSFTX.o YSFTX.cpp
>> g++ Biquad.o CalDMR.o CalDStarRX.o CalDStarTX.o CalNXDN.o CalP25.o CWIdTX.o DMRDMORX.o DMRDMOTX.o DMRSlotType.o DStarRX.o DStarTX.o FIR.o FIRInterpolator.o IO.o IOUDRC.o MMDVM.o NXDNRX.o NXDNTX.o P25RX.o P25TX.o POCSAGTX.o SampleRB.o SerialController.o SerialPort.o SerialRB.o SoundCardReaderWriter.o Thread.o Utils.o YSFRX.o YSFTX.o -g -lpthread -lasound -lwiringPi -o MMDVM
>>
>> it did complete the compile. When I attempt ./MMDVM is receive the following:
>>
>> Link does not exist: /dev/pts/1 <> ttyMMDVM0
>> Error creating symlink from /dev/pts/1 to ttyMMDVM0
>> Unable to open serial port on vpty: ttyMMDVM0
>>
>> I am assuming this indicates that it is not properly configured for the UDRC.  That is what I will be exploring next.
>>
>> Thanks for the help
>> Rich, KR4PI
>>
>>
>
>






Join main@nw-digital-radio.groups.io to automatically receive all group messages.