| #!/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 |
| from calc_thd import * |
| import calc_delay |
| |
| # calculate THD for dut_recording_thd case |
| # Input: host recording (mono), device recording (mono), |
| # frequency of sine in Hz (i64) |
| # THD pass level in percentile (double) |
| # Output:THD host (double), THD device (double) in percentile |
| # host recording will be longer than device recording |
| # the function works in following steps: |
| # 1. match the start of device recording with host recording |
| # As the host recording starts eariler and longer than device recording, |
| # matching process is required. |
| # 2. calculate THD of host recording and client recording |
| # 3. check pass/fail |
| |
| def recording_thd(inputData, inputTypes): |
| output = [] |
| outputData = [] |
| outputTypes = [] |
| # basic sanity check |
| inputError = False |
| if (inputTypes[0] != TYPE_MONO): |
| inputError = True |
| if (inputTypes[1] != TYPE_MONO): |
| inputError = True |
| if (inputTypes[2] != TYPE_I64): |
| inputError = True |
| if (inputTypes[3] != TYPE_DOUBLE): |
| inputError = True |
| if inputError: |
| output.append(RESULT_ERROR) |
| output.append(outputData) |
| output.append(outputTypes) |
| return output |
| |
| hostRecording = inputData[0] |
| deviceRecording = inputData[1] |
| signalFrequency = inputData[2] |
| thdPassPercentile = inputData[3] |
| samplingRate = 44100 |
| |
| delay = calc_delay.calc_delay(hostRecording, deviceRecording) |
| N = len(deviceRecording) |
| print "delay ", delay, "deviceRecording samples ", N |
| thdHost = calc_thd(hostRecording[delay:delay+N], signalFrequency, samplingRate, 0.02) * 100 |
| thdDevice = calc_thd(deviceRecording, signalFrequency, samplingRate, 0.02) * 100 |
| print "THD Host %", thdHost, "THD device %", thdDevice, "Margain % ", thdPassPercentile |
| if (thdDevice < (thdHost + thdPassPercentile)) and (thdHost < thdPassPercentile): |
| output.append(RESULT_PASS) |
| else: |
| output.append(RESULT_OK) |
| outputData.append(thdHost) |
| outputTypes.append(TYPE_DOUBLE) |
| outputData.append(thdDevice) |
| outputTypes.append(TYPE_DOUBLE) |
| output.append(outputData) |
| output.append(outputTypes) |
| return output |