Beispiel #1
0
        public void AddFilters(string path)
        {
            try
            {
                DirectoryInfo di    = new DirectoryInfo(path);
                FileInfo[]    files = di.GetFiles("*.f36");

                foreach (FileInfo fi in files)
                {
                    try
                    {
                        AD6636FilterFile filter = new AD6636FilterFile(fi.FullName);
                        if (filter.Valid && filter.InputFrequency == NCOFreq)
                        {
                            FilterFiles.Add(filter);
                        }
                    }
                    catch (Exception e)
                    {
                    }
                }
            }
            catch (Exception e)
            {
            }

            RebuildFilterFileButtons();
        }
Beispiel #2
0
        public bool SetFilter(AD6636FilterFile filter)
        {
            if (AD6636 == null)
            {
                return(false);
            }

            return(AD6636.SetFilter(filter));
        }
Beispiel #3
0
        public bool SetFilter(int channel, AD6636FilterFile filter)
        {
            bool success = true;

            CurrentFilter = filter;
            FilterRate    = filter.Rate;
            _FilterWidth  = filter.Width;

            lock (this)
            {
                /* set the MRCF channel to modify */
                success &= this.Device.AD6636WriteReg(AD6636_REG_IOAC, AD6636_REG_IOAC_L, (1 << channel));
                /* set the source FIR to read from */
                success &= this.Device.AD6636WriteReg(AD6636_REG_MRCFC, AD6636_REG_MRCFC_L, (channel << 10));

                success &= this.Device.AD6636WriteReg(104, 2, 0);
                success &= this.Device.AD6636WriteReg(108, 2, 5);
                success &= this.Device.AD6636WriteReg(110, 2, 5);

                success &= this.Device.AD6636WriteReg(116, 2, 0);

                int filterFlags = 0;
                if (filter.HB2)
                {
                    filterFlags |= 0x01;
                }
                if (filter.FIR2)
                {
                    filterFlags |= 0x02;
                }
                if (filter.HB1)
                {
                    filterFlags |= 0x04;
                }
                if (filter.FIR1)
                {
                    filterFlags |= 0x08;
                }

                success &= this.Device.AD6636WriteReg(120, 1, filterFlags);
                success &= this.Device.AD6636WriteReg(121, 1, filter.CIC5Scale);
                success &= this.Device.AD6636WriteReg(122, 1, filter.CIC5Decimation - 1);

                if (filter.CIC5)
                {
                    success &= this.Device.AD6636WriteReg(123, 1, 0);
                }
                else
                {
                    success &= this.Device.AD6636WriteReg(123, 1, 1);
                }

                success &= this.Device.AD6636WriteReg(136, 1, filter.DRCFNTaps - 1);
                success &= this.Device.AD6636WriteReg(137, 1, (long)(64 - filter.DRCFNTaps / 2));
                success &= this.Device.AD6636WriteReg(138, 2, 0x700 | ((filter.DRCFDecimation - 1) << 4));

                success &= this.Device.AD6636WriteReg(148, 1, filter.CRCFNTaps - 1);
                success &= this.Device.AD6636WriteReg(149, 1, (long)(64 - filter.CRCFNTaps / 2));
                success &= this.Device.AD6636WriteReg(150, 2, 0x700 | ((filter.CRCFDecimation - 1) << 4));

                success &= this.Device.AD6636WriteReg(184, 2, 0);

                int DRCFEntries = (int)((filter.DRCFNTaps + 1) / 2);
                success &= this.Device.AD6636WriteReg(140, 1, 0);
                success &= this.Device.AD6636WriteReg(141, 1, DRCFEntries - 1);
                for (int pos = 0; pos < DRCFEntries; pos++)
                {
                    success &= this.Device.AD6636WriteReg(144, 2, filter.DRCFTaps[DRCFEntries - 1 + pos]);
                }

                int CRCFEntries = (int)((filter.CRCFNTaps + 1) / 2);
                success &= this.Device.AD6636WriteReg(152, 1, 0);
                success &= this.Device.AD6636WriteReg(153, 1, CRCFEntries - 1);

                for (int pos = 0; pos < CRCFEntries; pos++)
                {
                    success &= this.Device.AD6636WriteReg(156, 3, filter.CRCFTaps[CRCFEntries - 1 + pos]);
                }

                success &= this.Device.AD6636WriteReg(184, 2, 0);

                if (FilterRate > NCOFreq / 4)
                {
                    success &= SetDivisor(1);
                }
                else if (FilterRate > NCOFreq / 8)
                {
                    success &= SetDivisor(2);
                }
                else if (FilterRate > NCOFreq / 16)
                {
                    success &= SetDivisor(4);
                }
                else
                {
                    success &= SetDivisor(8);
                }

                success &= SelectChannel(channel);
                success &= SoftSync();

                /* inform listeners */
                if (SamplingRateChanged != null)
                {
                    SamplingRateChanged(this, null);
                }
                if (FilterWidthChanged != null)
                {
                    FilterWidthChanged(this, null);
                }
            }
            return(success);
        }
Beispiel #4
0
 public bool SetFilter(AD6636FilterFile filter)
 {
     return(SetFilter(CurrentChannel, filter));
 }