示例#1
0
        public bool Update(double signalAmplitudeDb, double noiseDbParam, int quantizationBitParam,
                           double signalStepAngle, int sampleCount)
        {
            OriginalSignal          = null;
            Noise                   = null;
            OriginalSignalPlusNoise = null;
            Quantized               = null;
            QuantizationNoise       = null;

            mSignalAmplitude = Math.Pow(10, signalAmplitudeDb / 20.0);
            mNoiseDb         = noiseDbParam;
            mQuantizationBit = quantizationBitParam;
            mSampleCount     = sampleCount;

            OriginalSignal = new double[sampleCount];
            for (int i = 0; i < sampleCount; ++i)
            {
                double rad = signalStepAngle * i;
                while (2.0 * Math.PI <= rad)
                {
                    rad -= 2.0 * Math.PI;
                }
                OriginalSignal[i] = mSignalAmplitude * Math.Sin(rad);
            }

            {
                Noise = new double[sampleCount];
                var gng        = new WWAudioFilter.GaussianNoiseGenerator();
                var noiseScale = Math.Pow(10, mNoiseDb / 20.0);
                for (int i = 0; i < sampleCount; ++i)
                {
                    Noise[i] = gng.NextFloat() * noiseScale;
                }
            }

            OriginalSignalPlusNoise = new double[sampleCount];
            for (int i = 0; i < sampleCount; ++i)
            {
                OriginalSignalPlusNoise[i] = OriginalSignal[i] + Noise[i];
            }

            Quantized         = new double[sampleCount];
            QuantizationNoise = new double[sampleCount];
            for (int i = 0; i < sampleCount; ++i)
            {
                Quantized[i]         = Quantize(OriginalSignalPlusNoise[i], mQuantizationBit);
                QuantizationNoise[i] = OriginalSignalPlusNoise[i] - Quantized[i];
            }

#if true
            WriteWav(OriginalSignal, "Output_Original.wav");
            WriteWav(Noise, "Output_Noise.wav");
            WriteWav(OriginalSignalPlusNoise, "Output_OriginalPlusNoise.wav");
            WriteWav(QuantizationNoise, "Output_QuantizationNoise.wav");
            WriteWav(Quantized, "Output_QuantizerOutput.wav");
#endif

            return(true);
        }
示例#2
0
        public bool Update(double signalAmplitudeDb, double noiseDbParam, int quantizationBitParam,
                double signalStepAngle, int sampleCount)
        {
            OriginalSignal = null;
            Noise = null;
            OriginalSignalPlusNoise = null;
            Quantized = null;
            QuantizationNoise = null;

            mSignalAmplitude = Math.Pow(10, signalAmplitudeDb / 20.0);
            mNoiseDb = noiseDbParam;
            mQuantizationBit = quantizationBitParam;
            mSampleCount = sampleCount;

            OriginalSignal = new double[sampleCount];
            for (int i = 0; i < sampleCount; ++i) {
                double rad = signalStepAngle * i;
                while (2.0 * Math.PI <= rad) {
                    rad -= 2.0 * Math.PI;
                }
                OriginalSignal[i] = mSignalAmplitude * Math.Sin(rad);
            }

            {
                Noise = new double[sampleCount];
                var gng = new WWAudioFilter.GaussianNoiseGenerator();
                var noiseScale = Math.Pow(10, mNoiseDb / 20.0);
                for (int i = 0; i < sampleCount; ++i) {
                    Noise[i] = gng.NextFloat() * noiseScale;
                }
            }

            OriginalSignalPlusNoise = new double[sampleCount];
            for (int i = 0; i < sampleCount; ++i) {
                OriginalSignalPlusNoise[i] = OriginalSignal[i] + Noise[i];
            }

            Quantized = new double[sampleCount];
            QuantizationNoise = new double[sampleCount];
            for (int i = 0; i < sampleCount; ++i) {
                Quantized[i] = Quantize(OriginalSignalPlusNoise[i], mQuantizationBit);
                QuantizationNoise[i] = OriginalSignalPlusNoise[i] - Quantized[i];
            }

            #if true
            WriteWav(OriginalSignal,          "Output_Original.wav");
            WriteWav(Noise,                   "Output_Noise.wav");
            WriteWav(OriginalSignalPlusNoise, "Output_OriginalPlusNoise.wav");
            WriteWav(QuantizationNoise,       "Output_QuantizationNoise.wav");
            WriteWav(Quantized,               "Output_QuantizerOutput.wav");
            #endif

            return true;
        }