m0_63590850 2021-10-28 19:09 采纳率: 100%
浏览 271
已结题

入门:C语言完成算平均数

信号滤波器。请完成平滑滤波和中值滤波后分别输出结果数据。

有一组数据(1.8,1.5,1.1,0.5,0.9,1.1,1.4,1.8,2.3,2.8,2.4,2.1,1.6,1.4,1.1)
请对该数据进行如下的滤波操作。(滤波后的结果要放在新数组里,想想为什么?)

  • 窗口宽度为3的均值平滑滤波:
    Xi’={X(i-1)+X(i)+X(i+1)}/3
    两端的数据可以保持不变。

*窗口宽度为3的中值滤波:
Xi’= median {X(i-1),X(i),X(i+1)}
median 表示三个值的中间值(不是最大、也不是最小值)。两端的数据可以保持不变。

  • 写回答

2条回答 默认 最新

  • Kappuccinno 2021-10-28 20:15
    关注
    
    double medium(double num1,double num2,double num3) //中位数
    {
        double array1[3]={num1,num2,num3},a,med;
        int i,j;
        for (i=0;i<2;i++){
            for (j=0;j<2-i;j++){
                if (array1[j]>array1[j+1]){
                    a=array1[j];
                    array1[j]=array1[j+1];
                    array1[j+1]=a;
                }
            }
        }
        med=array1[1];
        return med;
    }
    int main()
    {
        double init[]={1.8,1.5,1.1,0.5,0.9,1.1,1.4,1.8,2.3,2.8,2.4,2.1,1.6,1.4,1.1};
        int length=sizeof(init)/sizeof(init[0]),i;
        double process1[length],process2[length];
        for (i=0;i<length;i++){
            if (i==0 || i==length-1){
                process1[i]=init[i];
                process2[i]=init[i];
            }
            else{
                process1[i]=(init[i-1]+init[i]+init[i+1])/3;
                process2[i]=medium(init[i-1],init[i],init[i+1]);
            }
        }
        printf("均值平滑滤波为:");
        for (i=0;i<length;i++){
            printf("%.2f",process1[i]);
            if (i!=length-1){
                printf(",");
            }
            else{
                printf("\n");
            }
        }
        printf("中值滤波为:");
        for (i=0;i<length;i++){
            printf("%.2f",process2[i]);
            if (i!=length-1){
                printf(",");
            }
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月29日
  • 已采纳回答 10月29日
  • 修改了问题 10月28日
  • 修改了问题 10月28日
  • 展开全部