cts_audio work: initial code
- volume calibration and THD test case work tuned.
- 59 unit tests pass
- local audio playback / recording works : uses tinyalsa
- host to device ptorocol in host side implemented / tested (with loopback)
- device side recording / playback works for test cases / test_io.xml
- python processing baseline added.
- spectrum algorithm implementated: calculate Transfer Function of device
over host and check if amplitudes are within margain. Needs parameter tuning
- spectrum test needs some improvements due to the non-flat response from
ref microphone.
Change-Id: I5288dec42f272260f30f1ace1374d365e31d1664
diff --git a/suite/audio_quality/test_description/processing/gen_random.py b/suite/audio_quality/test_description/processing/gen_random.py
new file mode 100644
index 0000000..541c60a
--- /dev/null
+++ b/suite/audio_quality/test_description/processing/gen_random.py
@@ -0,0 +1,110 @@
+#!/usr/bin/python
+
+# Copyright (C) 2012 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from consts import *
+import numpy as np
+import scipy as sp
+import scipy.fftpack as fft
+import matplotlib.pyplot as plt
+
+# generate random signal
+# Input: peak amplitude,
+# duration in msec,
+# sampling rate HZ
+# low frequency,
+# high frequency,
+# Output: generated sound (stereo)
+
+def do_gen_random(peakAmpl, durationInMSec, samplingRate, fLow, fHigh, stereo=True):
+ samples = durationInMSec * samplingRate / 1000
+ result = np.zeros(samples * 2 if stereo else samples, dtype=np.int16)
+ #randomSignal = np.random.random_integers(-peakAmpl, peakAmpl, samples)
+ randomSignal = np.random.normal(scale=peakAmpl *2 / 3, size=samples)
+ fftData = fft.rfft(randomSignal)
+ freqSamples = samples/2
+ iLow = 0 #freqSamples * fLow * 2/ samplingRate + 1
+ #if iLow > freqSamples - 1:
+ # iLow = freqSamples - 1
+ iHigh = freqSamples * fHigh * 2 / samplingRate + 1
+ #print len(randomSignal), len(fftData), fLow, iLow, fHigh, iHigh
+ if iHigh > freqSamples - 1:
+ iHigh = freqSamples - 1
+ fftData[0] = 0 # DC
+ #for i in range(iLow - 1):
+ # fftData[2 * i + 1 ] = 0 # Re
+ # fftData[2 * i + 2 ] = 0 # Imag
+ for i in range(iHigh, freqSamples - 1):
+ fftData[ 2 * i + 1 ] = 0
+ fftData[ 2 * i + 2 ] = 0
+ if (samples - 2 *freqSamples) != 0:
+ fftData[samples - 1] = 0
+
+ filteredData = fft.irfft(fftData)
+ #freq = np.linspace(0.0, samplingRate, num=len(fftData), endpoint=False)
+ #plt.plot(freq, abs(fft.fft(filteredData)))
+ #plt.plot(filteredData)
+ #plt.show()
+ if stereo:
+ for i in range(len(filteredData)):
+ result[2 * i] = filteredData[i]
+ result[2 * i + 1] = filteredData[i]
+ else:
+ for i in range(len(filteredData)):
+ result[i] = filteredData[i]
+ return result
+
+
+def gen_random(inputData, inputTypes):
+ output = []
+ outputData = []
+ outputTypes = []
+ # basic sanity check
+ inputError = False
+ if (inputTypes[0] != TYPE_I64):
+ inputError = True
+ if (inputTypes[1] != TYPE_I64):
+ inputError = True
+ if (inputTypes[2] != TYPE_I64):
+ inputError = True
+ if (inputTypes[3] != TYPE_I64):
+ inputError = True
+ if (inputTypes[4] != TYPE_I64):
+ inputError = True
+ if inputError:
+ output.append(RESULT_ERROR)
+ output.append(outputData)
+ output.append(outputTypes)
+ return output
+
+ result = do_gen_random(inputData[0], inputData[1], inputData[2], inputData[3], inputData[4])
+
+ output.append(RESULT_OK)
+ outputData.append(result)
+ outputTypes.append(TYPE_STEREO)
+ output.append(outputData)
+ output.append(outputTypes)
+ return output
+
+# test code
+if __name__=="__main__":
+ peakAmplitude = 10000
+ samplingRate = 44100
+ durationInMSec = 10000
+ fLow = 500
+ fHigh = 15000
+ result = do_gen_random(peakAmplitude, durationInMSec, samplingRate, fLow, fHigh)
+ plt.plot(result)
+ plt.show()