上面那段M_P未定义哦
时间: 2023-06-23 07:54:38 浏览: 42
对不起,我的错误。`M_PI`是一个定义在`math.h`头文件中的常量,表示圆周率π的值。需要在代码开头添加`#include <math.h>`头文件声明。
所以,正确的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 计算语音信噪比(SNR)
float calculateSNR(float* signal, float* noise, int length) {
float signalPower = 0;
float noisePower = 0;
for (int i = 0; i < length; i++) {
signalPower += pow(signal[i], 2);
noisePower += pow(noise[i], 2);
}
noisePower /= length;
float snr = 10 * log10(signalPower / noisePower);
return snr;
}
int main() {
// 假设我们有一个长度为100的音频信号数组和一个相同长度的噪声信号数组
int length = 100;
float audio[length];
float noise[length];
// 填充信号和噪声数组
for (int i = 0; i < length; i++) {
audio[i] = sin(2 * M_PI * i / length); // 此处为示例,使用正弦波作为音频信号
noise[i] = rand() / (float)RAND_MAX; // 此处为示例,使用随机噪声作为噪声信号
}
// 计算信噪比
float snr = calculateSNR(audio, noise, length);
// 输出结果
printf("Signal power = %f\n", pow(audio[0], 2)); // 信号功率
printf("Noise power = %f\n", pow(noise[0], 2)); // 噪声功率
printf("SNR = %f dB\n", snr); // 信噪比
return 0;
}
```
这个代码使用了`sin()`函数来生成正弦波作为音频信号,使用了`rand()`函数来生成随机噪声作为噪声信号。然后,它使用`calculateSNR()`函数来计算它们的信噪比,并输出信号功率、噪声功率和信噪比的值。