生成两个相同长度的随机信号,分别计算两个信号间的均方误差MSE,相关系数及峰值信噪比PSNR。(提高部分:考虑两个随机信号的相关性,或通过加高斯白噪声的方式生成纯净信号和带噪信号,了解信号增强的评价准则)
实验提示:自己通过图书馆、网络等资源查找 MSE及PSNR的计算公式:自学利用MATLAB或C语言生成两个随机信号序列,并计算得到二者的 MSE和PSNR 取值。

C语言编程,随机信号
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 社区专家-Monster-XH 2023-04-15 19:09关注
基于Monster 组和GPT的调写:
用rand()函数生成随机数,并将其存储到两个数组中。程序使用了数学库中的sqrt()函数和pow()函数,分别用于计算平方根和幂。#include <stdio.h> #include <stdlib.h> #include <math.h> #define N 1000 // 信号长度 #define MAX_AMPLITUDE 1000 // 最大振幅 // 生成随机信号 void generate_signal(double *signal) { for (int i = 0; i < N; i++) { signal[i] = ((double)rand() / RAND_MAX) * MAX_AMPLITUDE; } } // 计算两个信号的均方误差MSE double calculate_mse(double *signal1, double *signal2) { double sum = 0; for (int i = 0; i < N; i++) { sum += pow(signal1[i] - signal2[i], 2); } return sum / N; } // 计算两个信号的相关系数 double calculate_correlation(double *signal1, double *signal2) { double sum1 = 0, sum2 = 0, sum3 = 0; for (int i = 0; i < N; i++) { sum1 += signal1[i]; sum2 += signal2[i]; sum3 += signal1[i] * signal2[i]; } double mean1 = sum1 / N; double mean2 = sum2 / N; double cov = sum3 / N - mean1 * mean2; double var1 = 0, var2 = 0; for (int i = 0; i < N; i++) { var1 += pow(signal1[i] - mean1, 2); var2 += pow(signal2[i] - mean2, 2); } var1 /= N; var2 /= N; double std1 = sqrt(var1); double std2 = sqrt(var2); return cov / (std1 * std2); } // 计算两个信号的峰值信噪比PSNR double calculate_psnr(double *signal1, double *signal2) { double mse = calculate_mse(signal1, signal2); double max_amplitude = 0; for (int i = 0; i < N; i++) { if (signal1[i] > max_amplitude) { max_amplitude = signal1[i]; } } return 10 * log10(pow(max_amplitude, 2) / mse); } int main() { double signal1[N], signal2[N]; srand(12345); // 设置随机数种子,保证每次运行结果一致 generate_signal(signal1); generate_signal(signal2); double mse = calculate_mse(signal1, signal2); double correlation = calculate_correlation(signal1, signal2); double psnr = calculate_psnr(signal1, signal2); printf("MSE: %.2f\n", mse); printf("Correlation: %.2f %%\n", correlation * 100); printf("PSNR: %.2f dB\n", psnr); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报