| /* | |
| * Copyright (c) 2024 EdgeImpulse Inc. | |
| * | |
| * Generated by Edge Impulse and licensed under the applicable Edge Impulse | |
| * Terms of Service. Community and Professional Terms of Service | |
| * (https://edgeimpulse.com/legal/terms-of-service) or Enterprise Terms of | |
| * Service (https://edgeimpulse.com/legal/enterprise-terms-of-service), | |
| * according to your product plan subscription (the “License”). | |
| * | |
| * This software, documentation and other associated files (collectively referred | |
| * to as the “Software”) is a single SDK variation generated by the Edge Impulse | |
| * platform and requires an active paid Edge Impulse subscription to use this | |
| * Software for any purpose. | |
| * | |
| * You may NOT use this Software unless you have an active Edge Impulse subscription | |
| * that meets the eligibility requirements for the applicable License, subject to | |
| * your full and continued compliance with the terms and conditions of the License, | |
| * including without limitation any usage restrictions under the applicable License. | |
| * | |
| * If you do not have an active Edge Impulse product plan subscription, or if use | |
| * of this Software exceeds the usage limitations of your Edge Impulse product plan | |
| * subscription, you are not permitted to use this Software and must immediately | |
| * delete and erase all copies of this Software within your control or possession. | |
| * Edge Impulse reserves all rights and remedies available to enforce its rights. | |
| * | |
| * Unless required by applicable law or agreed to in writing, the Software 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, disclaimers and limitations under the License. | |
| */ | |
| namespace ei { | |
| namespace speechpy { | |
| class functions { | |
| public: | |
| /** | |
| * Converting from frequency to Mel scale | |
| * | |
| * @param f The frequency values(or a single frequency) in Hz. | |
| * @returns The mel scale values(or a single mel). | |
| */ | |
| static float frequency_to_mel(float f) { | |
| return 1127.0 * log(1.0 + f / 700.0f); | |
| return 1127.0 * numpy::log((1.0 + f / 700.0f)); | |
| } | |
| /** | |
| * Converting from Mel scale to frequency. | |
| * | |
| * @param mel The mel scale values(or a single mel). | |
| * @returns The frequency values(or a single frequency) in Hz. | |
| */ | |
| static float mel_to_frequency(float mel) { | |
| return 700.0f * (exp(mel / 1127.0f) - 1.0f); | |
| } | |
| /** | |
| * Triangle, linear scale from left up to middle, then down to right | |
| * @param x Linspace output, will be overwritten! | |
| * @param x_size Size of the linspace output | |
| * @param left Starting index (assigned 0) | |
| * @param middle Index where 1.0 will be placed | |
| * @param right Ending index (assigned 0) | |
| */ | |
| static int triangle(float *x, size_t x_size, int left, int middle, int right) { | |
| EI_DSP_MATRIX(out, 1, x_size); | |
| for (size_t ix = 0; ix < x_size; ix++) { | |
| if (x[ix] > left && x[ix] <= middle) { | |
| out.buffer[ix] = (x[ix] - left) / (middle - left); | |
| } | |
| if (x[ix] < right && middle <= x[ix]) { | |
| out.buffer[ix] = (right - x[ix]) / (right - middle); | |
| } | |
| } | |
| memcpy(x, out.buffer, x_size * sizeof(float)); | |
| return EIDSP_OK; | |
| } | |
| }; | |
| } // namespace speechpy | |
| } // namespace ei | |