#include "stdafx.h" #include"J:\信号处理与工程实践\xhclgcyy\x_math.cpp" #include"J:\信号处理与工程实践\xhclgcyy\x_graph.cpp" double Y[40], Z[40];

void plotgri2(COLORREF gridcolor, COLORREF linecolor, double p[], int N) //用来画矩形框 { int i; HPEN pen1 = CreatePen(PS_SOLID, 1, gridcolor), oldpen = (HPEN)SelectObject(win3.hdc, pen1); HPEN pen2 = CreatePen(PS_SOLID, 1, linecolor); for (i = 0; i < N; i++)line2(i, 0, i, p[i]); SelectObject(win2.hdc, pen2); moveto2(0, p[0]); SelectObject(win2.hdc, oldpen); DeleteObject(pen1); for (i = 0; i < N; i++)lineto2(i, p[i]); DeleteObject(pen2); }

void f1(double a0, double b0, double b1, double X[], int N)//通用一阶数字滤波器函数工具 { int n; for (n = 0; n < N; n++) Y[n] = 0; for (n = 0; n < N; n++) Y[n] = b0 * X[n] + b1 * X[n - 1] + a0 * Y[n - 1]; }

void f2(double a0, double a1, double b0, double b1, double b2, double X[], int N)//通用二阶数字滤波器函数工具 { int n; for (n = 0; n < N; n++) Y[n] = 0; for (n = 0; n < N; n++) Y[n] = b0 * X[n] + b1 * X[n - 1] + b2 * X[n - 2] + a0 * Y[n - 1] + a1 * Y[n - 2]; }

int main(int argc, char* argv[]) { int i, n; double X1[40], X4[40];

////////矩形序列////////
X1[-1] = 0;
for (i = 0; i < 12; i++) { X1[i] = 1; }
for (i = 12; i < 38; i++) { X1[i] = 0; }
window2(L"X1", -10, -1, 30, 5, "x", "y");
xy2(BLUE);
plotgri2(GREEN, BLUE, X1, 30);
_getch();
f1(0.4, 1, 0.2, X1, 40);
plotgri2(GREEN, RED, Y, 30);
_getch();

////////级联滤波器////////
double a0 = 1.5, a1 = -0.5, b0 = 0.4, b1 = 0.2;
for (n = 0; n < 40; n++) {
    Z[n] = 0;
    Y[n] = 0;
}
for (n = 0; n < 40; n++) {
    Z[n] = b0 * X1[n] + b1 * X1[n - 1] + a0 * Z[n - 1];
    Y[n] = b0 * Z[n] + b1 * Z[n - 1] + a0 * Y[n - 1];
}
window2(L"级联滤波图像", -10, -1, 30, 5, "x", "y");
xy2(BLUE);
plotgri2(GREEN, BLUE, X1, 30);
_getch();
plotgri2(GREEN, RED, Y, 30);
_getch();

////////通用二阶滤波器////////
X4[0] = 1;
for (i = -19; i < 0; i++) { X4[i] = 0; }
for (i = 1; i < 40; i++) { X4[i] = 0; }
window2(L"X4", -1, -2, 20, 5, "x", "y");
xy2(BLUE);
plotgri2(GREEN, BLUE, X4, 30);
_getch();
f2(1.5, -0.5, 0, 1, 0, X4, 40);
plotgri2(RED, BLUE, Y, 30);
_getch();

return 0;

}

C++ 信号处理:通用一阶数字滤波器级联与通用二阶数字滤波器实现

原文地址: https://www.cveoy.top/t/topic/jPj9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录