C++ 数字滤波器图形绘制:使用 plotgri2 函数

这篇博客文章将介绍如何使用 C++ 实现数字滤波器,并使用 plotgri2 函数将滤波前后的信号绘制成图形。

plotgri2 函数

plotgri2 函数用于在窗口上绘制一个矩形框,并在其中绘制数据点的连线。

函数原型:

void plotgri2(COLORREF gridcolor, COLORREF linecolor, double p[], int N);

参数说明:

  • gridcolor: 矩形框的颜色。
  • linecolor: 数据点连线的颜色。
  • p[]: 数据序列。
  • N: 数据序列的长度。

代码示例

以下代码演示了如何使用 plotgri2 函数绘制矩形序列,并应用一阶和二阶数字滤波器:

#include 'stdafx.h'
#include'J:\信号处理与工程实践\xhclgcyy\x_math.cpp'
#include'J:\信号处理与工程实践\xhclgcyy\x_graph.cpp'

double Y[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();
	////////二阶////////
	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;
}

代码说明

  • 代码首先定义了两个函数 f1f2,分别用于实现一阶和二阶数字滤波器。
  • main 函数中,首先创建了一个矩形序列 X1,并使用 plotgri2 函数将其绘制出来。
  • 然后,调用 f1 函数对 X1 进行一阶滤波,并将滤波后的结果存储在数组 Y 中。
  • 接着,再次使用 plotgri2 函数将 Y 绘制出来,这次使用不同的颜色以区分原始信号和滤波后的信号。
  • 同样的步骤也应用于二阶滤波器 f2

通过这种方式,我们可以直观地看到数字滤波器对信号的影响。

C++ 数字滤波器图形绘制:使用 plotgri2 函数

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

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