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); }
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; }