⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filter_struct.cpp

📁 这个我写的一个计算LC滤波器的程序
💻 CPP
字号:
// Filter_Struct.cpp: implementation of the CFilter_Struct class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Fileter.h"
#include "Filter_Struct.h"

#include "math.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

const double PI=3.1415926;

CFilter_Struct::CFilter_Struct()
{
  C1=C2=C3=C4=C5=0;
  L2=R2=L4=R4=0;
  RL=0;

}

CFilter_Struct::~CFilter_Struct()
{

}

CFilter_Struct::CFilter_Struct(double c1,double c2,double c3,
                               double l2,double r2,double rl)
{
    C1=c1/(1e12);
    C2=c2/(1e12);
    C3=c3/(1e12);
    L2=l2/(1e6);
    R2=r2;
    RL=rl;
    
    C4=C5=L4=R4=0;
}

CFilter_Struct::CFilter_Struct(double c1,double c2,double c3,double c4,double c5,
                               double l2,double r2,double l4,double r4,double rl)
{
    C1=c1/(1e12);
    C2=c2/(1e12);
    C3=c3/(1e12);
    C4=c4/(1e12);
    C5=c5/(1e12);
    L2=l2/(1e6);
    R2=r2;
    L4=l4/(1e6);
    R4=r4;
    RL=rl;
}

void CFilter_Struct::SetVal(double c1,double c2,double c3,double c4,double c5,
		                    double l2,double r2,double l4,double r4,double rl)
{
    C1=c1/(1e12);
    C2=c2/(1e12);
    C3=c3/(1e12);
    C4=c4/(1e12);
    C5=c5/(1e12);
    L2=l2/(1e6);
    R2=r2;
    L4=l4/(1e6);
    R4=r4;
    RL=rl;
}

void CFilter_Struct::GetVal(double &c1,double &c2,double &c3,double &c4,double &c5,
		        double &l2,double &r2,double &l4,double &r4,double &rl)
{
    c1=C1*(1e12);
    c2=C2*(1e12);
    c3=C3*(1e12);
    c4=C4*(1e12);
    c5=C5*(1e12);
    l2=L2*(1e6);
    r2=R2;
    l4=L4*(1e6);
    r4=R4;
    rl=RL;
}

double CFilter_Struct::GetOut2(CComplex_num Is, double f)
{
    double Omg=2*PI*f;
	C2=1000/(1e12);
	L2=2.817/(1e6);
	R2=2;
	RL=50;
    CComplex_num CC2(0,-1/(Omg*C2));
    CComplex_num LC2(0,Omg*L2);
    CComplex_num RC2(R2,0);
    CComplex_num RLC(RL,0);

    CComplex_num V1,V2,IL,UL;
	V2=LC2+RC2;
    V1=CC2%V2;
    UL=(RLC/(V1+RLC)) * Is;

    return (UL.GetAmp());
}


double CFilter_Struct::GetOut3(CComplex_num Is, double f)
{
    double Omg=2*PI*f;
    CComplex_num CC1(0,-1/(Omg*C1));
    CComplex_num CC2(0,-1/(Omg*C2));
    CComplex_num CC3(0,-1/(Omg*C3));
    CComplex_num LC2(0,Omg*L2);
    CComplex_num RC2(R2,0);
    CComplex_num RLC(RL,0);

    CComplex_num V1,I2,IL,UL;
    V1=(CC2%(LC2+RC2))+(CC3%RLC);
    I2=(CC1/(CC1+V1)) * Is;
    IL=(CC3/(CC3+RLC)) * I2;
    UL=RLC * IL;

    return (IL.GetAmp());
}

double CFilter_Struct::GetOut5(CComplex_num Is, double f)
{
	if (f==0) f=1e-10;
    double Omg=2*PI*f;
    CComplex_num CC1(0,-1/(Omg*C1));
    CComplex_num CC2(0,-1/(Omg*C2));
    CComplex_num CC3(0,-1/(Omg*C3));
    CComplex_num CC4(0,-1/(Omg*C4));
    CComplex_num CC5(0,-1/(Omg*C5));
    CComplex_num LC2(0,Omg*L2);
    CComplex_num RC2(R2,0);
    CComplex_num LC4(0,Omg*L4);
    CComplex_num RC4(R4,0);
    CComplex_num RLC(RL,0);

    CComplex_num V1,V2,I2,I4,IL,U4,UL,PL;
    V1=(CC4%(LC4+RC4))+(CC5%RLC);
    V2=(CC2%(LC2+RC2))+(CC3%V1);
    
	I2=( CC1/(CC1+V2) ) ;//* Is;
    I4=( CC3/(CC3+V1) ) * I2;
    IL=( CC5/(CC5+RLC)) * I4;
    
	U4=(V1%CC3)/V2;//*Us;
	UL=(RLC%CC5)/V1*U4;

    PL=UL * IL;

	double Amp=PL.GetAmp();
	double dB=10*log10(Amp);

    return (dB);
}
double  CFilter_Struct::GetF_L2C2()
{
	return (1/(2*PI*sqrt(L2*C2)));
}
double  CFilter_Struct::GetF_L4C4()
{
	return (1/(2*PI*sqrt(L4*C4)));
}
double  CFilter_Struct::GetF_L2C3()
{
	return (1/(2*PI*sqrt(L2*C3)));
}
double CFilter_Struct::GetF_L4C5()
{
	return (1/(2*PI*sqrt(L2*C5)));
}

/*	CComplex_num num1(3,4);
	CComplex_num num2(6,2);
	CComplex_num num3,num4,num5,num6,num7;
	num3=num1+num2;
	num4=num1-num2;
	num5=num1*num2;
	num6=num1/num2;
	num7=num1%num2;
	CString str1,str2,str3,str4,str5,str6,str7;
	str1.Format("%10.2f  +  j  %10.2f",num1.real_part,num1.virt_part);
	str2.Format("%10.2f  +  j  %10.2f",num2.real_part,num2.virt_part);
	str3.Format("%10.2f  +  j  %10.2f",num3.real_part,num3.virt_part);
	str4.Format("%10.2f  +  j  %10.2f",num4.real_part,num4.virt_part);
	str5.Format("%10.2f  +  j  %10.2f",num5.real_part,num5.virt_part);
	str6.Format("%10.2f  +  j  %10.2f",num6.real_part,num6.virt_part);
	str7.Format("%10.2f  +  j  %10.2f",num7.real_part,num7.virt_part);
	pDC->TextOut(100,100,str1);
	pDC->TextOut(100,130,str2);
	pDC->TextOut(100,160,str3);
	pDC->TextOut(100,190,str4);
	pDC->TextOut(100,210,str5);
	pDC->TextOut(100,240,str6);
	pDC->TextOut(100,270,str7);
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -