• 大小: 38KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: 其他
  • 标签: 滤波  

资源简介

界面显示各个滤波算法的滤波效果,手动拖动“滑块”来模拟波形输入,程序给出波形的滤波输出

资源截图

代码片段和文件信息

#pragma comment(linker “/subsystem:Windows“)

#include 

const long c_width = 700 c_height = 500;

const int max_len = 512;
bool g_mouseDown = false;
int g_value = 0;
int g_buffer[max_len] = { 0 };
double g_filter[max_len] = { 0.0 };

typedef double FILTER_FUNC();
int g_pick_count = 0;
int g_func_index = -1;
FILTER_FUNC *g_filter_func = NULL;

void sort(int buffer[] int count)
{
for (int j = count - 1; j > 0; j--)
{
for (int i = 0; i < j; i++)
{
if (buffer[i] > buffer[i + 1])
{
int temp = buffer[i];
buffer[i] = buffer[i + 1]; 
buffer[i + 1] = temp;
}
}
}
}

double filter_amplitude_limit() // 1. 限幅滤波法
{
const char A = 13;

if (g_value - g_filter[1] > A || g_filter[1] - g_value > A)
{
return g_filter[1];
}

return g_value;
}

double filter_median_value() // 2. 中位值滤波法
{
const char N = 5;

++g_pick_count;
if (g_pick_count < N)
{
return g_filter[1];
}

g_pick_count = 0;

int buffer[N];
for (int i = 0; i < N; i++)
{
buffer[i] = g_buffer[i];
}

sort (buffer N);

return buffer[N / 2];
}

double filter_arithmetic_average() // 3. 算术平均滤波法
{
const char N = 5;

++g_pick_count;
if (g_pick_count < N)
{
return g_filter[1];
}

g_pick_count = 0;

double sum = 0.0;
for (int i = 0; i < N; i++)
{
sum += g_buffer[i];
}

return sum / N;
}

double filter_recurrence_average() // 4. 递推平均滤波法
{
const char N = 5;

double sum = 0.0;
for (int i = 0; i < N; i++)
{
sum += g_buffer[i];
}

return sum / N;
}

double filter_median_average() // 5. 中位值平均滤波法
{
const char N = 5;

++g_pick_count;
if (g_pick_count < N)
{
return g_filter[1];
}

g_pick_count = 0;

int buffer[N];
for (int i = 0; i < N; i++)
{
buffer[i] = g_buffer[i];
}

sort (buffer N);

double sum = 0.0;
for (int j = 1; j < N - 1; j++)
{
sum += buffer[j];
}

return sum / (N - 2);
}

double filter_limiting_mean() // 6. 限幅平均滤波法
{
const char A = 13;
const char N = 5;

if (g_value - g_filter[1] > A || g_filter[1] - g_value > A)
{
return g_filter[1];
}

static int s_buffer[N];
for (int i = N - 1; i > 0; i--)
{
s_buffer[i] = s_buffer[i - 1];
}
s_buffer[0] = g_value;

++g_pick_count;
if (g_pick_count < N)
{
return g_filter[1];
}

double sum = 0.0;
for (int j = 0; j < N; j++)
{
sum += s_buffer[j];
}

return sum / N;
}

double filter_first_order_lag() // 7. 一阶滞后滤波法
{
const char a = 1 b = 9;
return (g_value * a + g_filter[1] * b) / (a + b);
}

double filter_weighted_average_recursive() // 8. 加权递推平均滤波法
{
    const char N = 13;
    
    char coe[N] = {12345678910111213};
    char sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12+13;
    
    char i;
    double sum=0;
    for (i=0;i    {
        sum += g_buffer[i] * coe[i];
    }

return sum / sum_coe;
}

double filter_elimination_buffeting() 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      53248  2011-12-01 09:50  Release\Filter.exe

     文件       6804  2011-11-25 16:02  Filter.aps

     文件       8855  2011-12-01 09:50  Filter.cpp

     文件        207  2011-11-25 09:27  Filter.dep

     文件       3530  2011-11-29 17:32  Filter.dsp

     文件        518  2011-11-07 17:37  Filter.dsw

     文件       6054  2002-02-09 12:17  Filter.ico

     文件       4577  2011-11-25 09:27  Filter.mak

     文件      58368  2011-12-01 09:50  Filter.ncb

     文件      53760  2011-12-01 09:50  Filter.opt

     文件       1129  2011-11-10 16:05  Filter.plg

     文件         98  2011-11-09 20:27  Filter.rc

     目录          0  2011-12-01 09:51  Release

----------- ---------  ---------- -----  ----

               197148                    13


评论

共有 条评论