Math Problem Statement

write in c language

write in c language

Solution

Here is a C program that calculates and displays the average power, average magnitude, and zero crossings from an array of speech data, similar to what you provided in the image.

c
#include <stdio.h> #include <math.h> #define ROWS 6 #define COLS 5 // Sample speech data double speechData[ROWS][COLS] = { {0.000000, -0.023438, 0.046875, 0.023438, -0.070313}, {-0.023438, 0.000000, 0.101563, 0.000000, -0.070313}, {-0.031250, 0.023438, 0.117188, -0.031250, -0.062500}, {-0.031250, 0.070313, 0.101563, -0.039063, -0.046875}, {-0.039063, -0.039063, 0.070313, -0.070313, -0.039063}, {-0.039063, -0.039063, 0.054688, -0.070313, -0.031250} }; // Function to calculate average power double calculateAveragePower() { double sumPower = 0.0; int count = 0; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { sumPower += speechData[i][j] * speechData[i][j]; count++; } } return sumPower / count; } // Function to calculate average magnitude double calculateAverageMagnitude() { double sumMagnitude = 0.0; int count = 0; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { sumMagnitude += fabs(speechData[i][j]); count++; } } return sumMagnitude / count; } // Function to calculate zero crossings int calculateZeroCrossings() { int zeroCrossings = 0; for (int i = 0; i < ROWS; i++) { for (int j = 1; j < COLS; j++) { if ((speechData[i][j - 1] < 0 && speechData[i][j] > 0) || (speechData[i][j - 1] > 0 && speechData[i][j] < 0)) { zeroCrossings++; } } } return zeroCrossings; } int main() { double avgPower = calculateAveragePower(); double avgMagnitude = calculateAverageMagnitude(); int zeroCrossings = calculateZeroCrossings(); printf("SPEECH STATISTICS:\n"); printf("Average Power: %f\n", avgPower); printf("Average Magnitude: %f\n", avgMagnitude); printf("Zero Crossings: %d\n", zeroCrossings); return 0; }

Explanation of Key Parts:

  1. Speech Data Array: The speechData array stores the values from the image. It is a 2D array of double values.
  2. Average Power Calculation: The calculateAveragePower function computes the average power by squaring each value in speechData, summing these squares, and dividing by the total count of values.
  3. Average Magnitude Calculation: The calculateAverageMagnitude function computes the average magnitude by taking the absolute value of each element, summing them, and dividing by the total count.
  4. Zero Crossings Calculation: The calculateZeroCrossings function counts the zero crossings, which occur when consecutive values change sign.

Running the Code

To run this code, compile it with gcc:

bash
gcc -o speech_analysis speech_analysis.c -lm ./speech_analysis

Would you like further details on any part of this code?

Related Questions:

  1. How would this code handle different data sizes or arrays?
  2. Can we add a feature to identify the maximum amplitude in the speech data?
  3. How can this code be modified to calculate root mean square (RMS) instead of average power?
  4. How can we dynamically input data from a file instead of using a hardcoded array?
  5. What are the implications of using floating-point precision in C for such calculations?

Tip:

Use the fabs function from the math library for absolute values to ensure accuracy in magnitude calculations.

Ask a new question for Free

By Image

Drop file here or Click Here to upload

Math Problem Analysis

Mathematical Concepts

Signal Processing
Statistics
Zero Crossing Detection

Formulas

Average Power = (1/N) * Σ(signal[i]^2)
Average Magnitude = (1/N) * Σ(|signal[i]|)

Theorems

-

Suitable Grade Level

Undergraduate