北邮22级信通院DSP:用C++程序实现给定参数下四种滤波器的Butterworth模拟滤波器设计:给定上下截频和衰减系数求H(p)和H(s)

北邮22信通一枚~

跟随课程进度更新北邮信通院DSP的笔记、代码和文章,欢迎关注~

获取更多文章,请访问专栏:

北邮22级信通院DSP_青山入墨雨如画的博客-CSDN博客

目录

一、 核心算法

1.1判断滤波器类型

1.2 带通滤波器BP

1.3带阻滤波器BS

1.4综合四种滤波器算法

1.5展示函数show()

1.6H(s)的显示(double_to_string)

1.6.1to_string方法

1.6.2 ostringstream方法

1.7自主输入函数input()

二、代码部分

2.1总体代码

2.2 测试1

2.3测试2


一、 核心算法

1.1判断滤波器类型

        拿到通带和阻带的上下截频之后,我们首先应该判断滤波器的类型。

        对带通带阻滤波器来说,如果s1<p1<p2<s2,则为带通滤波器;如果p1<s1<s2<p2,则为带阻滤波器。低通滤波器相当于通带下截频和阻带下截频都趋于负无穷,故对低通滤波器有p2<s2;同理对高通滤波器来说,相当于通带和阻带上截频趋于正无穷,故对高通滤波器有s1<p1。

        同时需要考虑检测掉所有不合理的情况。

#define ERROR 0
#define IS_LP 1
#define IS_HP 2
#define IS_BP 3
#define IS_BS 4typedef long double  ld;//判断选通滤波器类型
int check_types(ld p1, ld p2, ld s1, ld s2)
{if (p1 > p2 || s1 > s2 || s1 == p2 ||s2 == p1 || s1 == s2 || p1 == p2)return ERROR;if (s1 * p1 != 0)return (p2 > p1 && s2 > s1 && p1 != s1 && p2 != s2) ?((p1 > s1) ? IS_BP : IS_BS) : (ERROR);elsereturn (s2 != p2) ? (s2 < p2 ? IS_HP : IS_LP) : (ERROR);
}

1.2 带通滤波器BP

        首先检测对称情况,更新通阻带上下截频信息。之后计算butterworth滤波器的阶数N,之后展示H(p)的表达式。表达式的展示算法放在1.5展示函数show()和1.6H(s)的显示(double_to_string)讲解。

#define ERROR 0
#define IS_LP 1
#define IS_HP 2
#define IS_BP 3
#define IS_BS 4typedef long double  ld;void BP(ld& p1, ld& p2, ld& Ap, ld& s1, ld& s2, ld& As)
{ld center = p1*p2;//保持通带cout << "通带中心频率为:" << sqrt(center) << "Hz;" << endl;//非中心对称改为中心对称if (p1 * p2 != s1 * s2)((center / s2) > s1) ? (s1 = (center / s2)) : (s2 = (center / s1));//计算N的值ld lambda_p = 1;ld lambda_s = (s2 - s1) / (p2 - p1);cout << "lambda_s的计算结果为:lambda_s = " << lambda_s << ";" << endl;double temp_1 = log10((pow(10, 0.1 * As) - 1) / (pow(10, 0.1 * Ap) - 1));double temp_2 = log10(lambda_s / lambda_p);int N = ceil(temp_1 / (2 * temp_2));//根据N的值查表得到低通滤波器归一化传输函数Hlp(p)分母表达式cout << "butterworth滤波器的阶数为:" << N << ";" << endl;show(N, "p");
}

1.3带阻滤波器BS

        如上同理。需要注意参数修正位置,因为是带阻滤波器的设计,所以为了保证阻带,修正的是p1和p2的值。同时λs的计算公式也应该修改。

#define ERROR 0
#define IS_LP 1
#define IS_HP 2
#define IS_BP 3
#define IS_BS 4typedef long double  ld;void BS(ld& p1, ld& p2, ld& Ap, ld& s1, ld& s2, ld& As)
{ld center = s1 * s2;//保持通带cout << "通带中心频率为:" << sqrt(center) << "Hz;" << endl;//非中心对称改为中心对称if (p1 * p2 != s1 * s2)((center / p2) > p1) ? (p1 = (center / p2)) : (p2 = (center / p1));//计算N的值ld lambda_p = 1;ld lambda_s =  (p2 - p1)/ (s2 - s1);cout << "lambda_s的计算结果为:lambda_s=" << lambda_s << ";" << endl;double temp_1 = log10((pow(10, 0.1 * As) - 1) / (pow(10, 0.1 * Ap) - 1));double temp_2 = log10(lambda_s / lambda_p);int N = ceil(temp_1 / (2 * temp_2));//根据N的值查表得到低通滤波器归一化传输函数Hlp(p)分母表达式cout << "butterworth滤波器的阶数为:" << N << ";" << endl;show(N, "p");
}

1.4综合四种滤波器算法

        如上同理。

        首先根据1.1判断滤波器类型判断是何种滤波器,并计算中心频率center^2。对选通滤波器(高通滤波器和低通滤波器的合称)来说,由于侧重点不同,对中心频率的计算是不同的。带通滤波器(BP)center^2 = p1 * p2,而带阻滤波器(BS)应为center^2 = s1 * s2。

        第二步:如果给定的通带阻带的上下截频不是自然几何对称的话,根据滤波器类型和中心频率修正相应的参数。

        第三步,计算λs的值。由于带通滤波器λs的计算方式为λs = ((s2 - s1) / (p2 - p1)),而低通滤波器的为s/p,相当于低通滤波器是s1=p1=0的情况,λs的值可以用同一个式子处理;同理带阻滤波器和高通滤波器(s2=p2=0)的λs的值也可以共用带阻滤波器的式子处理λs = ((p2 - p1) / (s2 - s1))。

        调用cmath头文件中的向上取整函数ceil,求得N值。

        第四步,展示H(p)和H(s),详见1.5展示函数show()和1.6H(s)的显示(double_to_string)

#define ERROR 0
#define IS_LP 1
#define IS_HP 2
#define IS_BP 3
#define IS_BS 4typedef long double  ld;
void compilation(ld& p1, ld& p2, ld& Ap, ld& s1, ld& s2, ld& As)
{ld center = 0;//判断滤波器类型if (check_types(p1, p2, s1, s2)){cout << endl << "该滤波器的类型为";switch (check_types(p1, p2, s1, s2)){case IS_LP:cout << "低通滤波器;" << endl; break;case IS_HP:cout << "高通滤波器;" << endl; break;case IS_BP:cout << "带通滤波器;" << endl; break;case IS_BS:cout << "带阻滤波器;" << endl; break;default:cout << "error" << endl; break;}center = (check_types(p1, p2, s1, s2) == IS_BP) ? p1 * p2 : s1 * s2;}if(sqrt(center))cout << endl << "通带中心频率为:" << sqrt(center) << "Hz;" << endl;//非几何对称改为几何对称if (p1 * p2 != s1 * s2)(check_types(p1, p2, s1, s2) == IS_BP) ?(((center / s2) > s1) ? (s1 = (center / s2)) : (s2 = (center / s1))) :(((center / p2) > p1) ? (p1 = (center / p2)) : (p2 = (center / p1)));//计算N的值ld lambda_p = 1;ld lambda_s = (check_types(p1, p2, s1, s2) == (IS_BP||IS_LP)) ?((s2 - s1) / (p2 - p1)) : ((p2 - p1) / (s2 - s1));	cout << endl << "归一化截频lambda_s的计算结果为:lambda_s = " << lambda_s << ";" << endl;double temp_1 = log10((pow(10, 0.1 * As) - 1) / (pow(10, 0.1 * Ap) - 1));double temp_2 = log10(lambda_s / lambda_p);int N = ceil(temp_1 / (2 * temp_2));//根据N的值查表得到低通滤波器归一化传输函数Hlp(p)分母表达式cout << endl << "butterworth滤波器的阶数为N = " << N << ";" << endl;cout << endl << "归一化传输函数为:H(p) = ";show(N, "p");string show_next_level = is_p(check_types(p1, p2, s1, s2), p2-p1, center);cout << endl << "传输函数H(s) = ";show(N, show_next_level);
}

1.5展示函数show()

        事先导入H(p)分母多项式系数的表。可以用二维数组存储。

        输出表达式。

#define ERROR 0
#define IS_LP 1
#define IS_HP 2
#define IS_BP 3
#define IS_BS 4typedef long double  ld;
double box[7][8] =
{{1.0000,1.0000,0.00000,0.00000,0.00000,0.00000,0.0000,0.0000},{1.0000,1.4140,1.00000,0.00000,0.00000,0.00000,0.0000,0.0000},{1.0000,2.0000,2.00000,1.00000,0.00000,0.00000,0.0000,0.0000},{1.0000,2.6131,3.41420,2.61310,1.00000,0.00000,0.0000,0.0000},{1.0000,3.2361,5.23610,5.23610,6.23610,1.00000,0.0000,0.0000},{1.0000,3.8637,7.46410,9.14160,7.46410,3.86370,1.0000,0.0000},{1.0000,4.4940,10.0978,14.5918,14.5918,10.0978,4.4940,1.0000}
};void  show(int N, string p)
{cout << "1 / ( ";for (int i = 7; i >= 0; i--){if(box[N - 1][i])//系数不为0时有输出{if (box[N - 1][i] != 1)cout << box[N - 1][i] << "*";switch (i){case 0:cout << 1; break;case 1:cout << p << " + "; break;default:cout << p << "^" << i << " + "; break;}}}cout << " );" << endl;
}

1.6H(s)的显示(double_to_string)

用p=q(s)替代上述show函数中的“p”。带入中心频率。关键问题是浮点数如何转化为字符串。

给出两种解决方法:

1.6.1to_string方法

需要cstring头文件。

#include<cstring>
string is_p_1(int type, ld B, ld& center)
{string output;if (type == IS_LP)output = "(s/" + to_string(B) + ")";else if (type == IS_HP)output = "(" + to_string(B) + "/s";else if (type == IS_BP)output = "((s^2+" + to_string(pow(center, 2)) + ")/" +"(" + to_string(B) + "*s" + "))";else if (type == IS_BS)output = "((" + to_string(B) + "*s" + ")/" +"(s^2+" + to_string(pow(center, 2)) + "))";elseoutput = "error";return output;
}

1.6.2 ostringstream方法

需要sstream头文件。

#include <sstream>
#include<iomanip>
using namespace std;
auto format_doble_value(double val, int fixed) {std::ostringstream oss;oss << std::setprecision(fixed) << val;return oss.str();
}string is_p(int type, ld B, ld& center)
{string output;if (type == IS_LP)output = "(s/" + format_doble_value(B, define_setpercision) + ")";else if (type == IS_HP)output = "(" + format_doble_value(B, define_setpercision) + "/s";else if (type == IS_BP)output = "((s^2+" + format_doble_value(pow(center, 2), define_setpercision) + ")/" +"(" + format_doble_value(B, define_setpercision) + "*s" + "))";else if (type == IS_BS)output = "((" + format_doble_value(B, define_setpercision) + "*s" + ")/" +"(s^2+" + format_doble_value(pow(center, 2), define_setpercision) + "))";elseoutput = "error";return output;
}

1.7自主输入函数input()

void input()
{cout << endl << "通带起始频率p1:"; cin >> p1;cout << endl << "通带截止频率p2:"; cin >> p2;cout << endl << "通带衰减系数(dB):"; cin >> Ap;cout << endl << "阻带起始频率s1:"; cin >> s1;cout << endl << "阻带截止频率s2:"; cin >> s2;cout << endl << "阻带衰减系数(dB):"; cin >> As;cout << endl;cout << "运算结果为:" << endl;
}

二、代码部分

2.1总体代码

#include<iostream>
#include<cmath>
#include<cstring>
#include <sstream>
#include<iomanip>
using namespace std;#define ERROR 0
#define IS_LP 1
#define IS_HP 2
#define IS_BP 3
#define IS_BS 4typedef long double  ld;
const double PI = acos(-1.0);
const int define_setpercision = 5;
double box[7][8] =
{{1.0000,1.0000,0.00000,0.00000,0.00000,0.00000,0.0000,0.0000},{1.0000,1.4140,1.00000,0.00000,0.00000,0.00000,0.0000,0.0000},{1.0000,2.0000,2.00000,1.00000,0.00000,0.00000,0.0000,0.0000},{1.0000,2.6131,3.41420,2.61310,1.00000,0.00000,0.0000,0.0000},{1.0000,3.2361,5.23610,5.23610,6.23610,1.00000,0.0000,0.0000},{1.0000,3.8637,7.46410,9.14160,7.46410,3.86370,1.0000,0.0000},{1.0000,4.4940,10.0978,14.5918,14.5918,10.0978,4.4940,1.0000}
};ld p1, p2, s1, s2, Ap, As;//判断选通滤波器类型
int check_types(ld p1, ld p2, ld s1, ld s2)
{if (p1 > p2 || s1 > s2 || s1 == p2 ||s2 == p1 || s1 == s2 || p1 == p2)return ERROR;if (s1 * p1 != 0)return (p2 > p1 && s2 > s1 && p1 != s1 && p2 != s2) ?((p1 > s1) ? IS_BP : IS_BS) : (ERROR);elsereturn (s2 != p2) ? (s2 < p2 ? IS_HP : IS_LP) : (ERROR);
}auto format_doble_value(double val, int fixed) {std::ostringstream oss;oss << std::setprecision(fixed) << val;return oss.str();
}string is_p(int type, ld B, ld& center)
{string output;if (type == IS_LP)output = "(s/" + format_doble_value(B, define_setpercision) + ")";else if (type == IS_HP)output = "(" + format_doble_value(B, define_setpercision) + "/s";else if (type == IS_BP)output = "((s^2+" + format_doble_value(pow(center, 2), define_setpercision) + ")/" +"(" + format_doble_value(B, define_setpercision) + "*s" + "))";else if (type == IS_BS)output = "((" + format_doble_value(B, define_setpercision) + "*s" + ")/" +"(s^2+" + format_doble_value(pow(center, 2), define_setpercision) + "))";elseoutput = "error";return output;
}string is_p_1(int type, ld B, ld& center)
{string output;if (type == IS_LP)output = "(s/" + to_string(B) + ")";else if (type == IS_HP)output = "(" + to_string(B) + "/s";else if (type == IS_BP)output = "((s^2+" + to_string(pow(center, 2)) + ")/" +"(" + to_string(B) + "*s" + "))";else if (type == IS_BS)output = "((" + to_string(B) + "*s" + ")/" +"(s^2+" + to_string(pow(center, 2)) + "))";elseoutput = "error";return output;
}//标准输出
void  show(int N, string p)
{cout << "1 / ( ";for (int i = 7; i >= 0; i--){if(box[N - 1][i])//系数不为0时有输出{if (box[N - 1][i] != 1)cout << box[N - 1][i] << "*";switch (i){case 0:cout << 1; break;case 1:cout << p << " + "; break;default:cout << p << "^" << i << " + "; break;}}}cout << " );" << endl;
}//带通滤波器算法
void BP(ld& p1, ld& p2, ld& Ap, ld& s1, ld& s2, ld& As)
{ld center = p1*p2;//保持通带cout << "通带中心频率为:" << sqrt(center) << "Hz;" << endl;//非中心对称改为中心对称if (p1 * p2 != s1 * s2)((center / s2) > s1) ? (s1 = (center / s2)) : (s2 = (center / s1));//计算N的值ld lambda_p = 1;ld lambda_s = (s2 - s1) / (p2 - p1);cout << "lambda_s的计算结果为:lambda_s = " << lambda_s << ";" << endl;double temp_1 = log10((pow(10, 0.1 * As) - 1) / (pow(10, 0.1 * Ap) - 1));double temp_2 = log10(lambda_s / lambda_p);int N = ceil(temp_1 / (2 * temp_2));//根据N的值查表得到低通滤波器归一化传输函数Hlp(p)分母表达式cout << "butterworth滤波器的阶数为:" << N << ";" << endl;show(N, "p");
}void BS(ld& p1, ld& p2, ld& Ap, ld& s1, ld& s2, ld& As)
{ld center = s1 * s2;//保持通带cout << "通带中心频率为:" << sqrt(center) << "Hz;" << endl;//非中心对称改为中心对称if (p1 * p2 != s1 * s2)((center / p2) > p1) ? (p1 = (center / p2)) : (p2 = (center / p1));//计算N的值ld lambda_p = 1;ld lambda_s =  (p2 - p1)/ (s2 - s1);cout << "lambda_s的计算结果为:lambda_s=" << lambda_s << ";" << endl;double temp_1 = log10((pow(10, 0.1 * As) - 1) / (pow(10, 0.1 * Ap) - 1));double temp_2 = log10(lambda_s / lambda_p);int N = ceil(temp_1 / (2 * temp_2));//根据N的值查表得到低通滤波器归一化传输函数Hlp(p)分母表达式cout << "butterworth滤波器的阶数为:" << N << ";" << endl;show(N, "p");
}void compilation(ld& p1, ld& p2, ld& Ap, ld& s1, ld& s2, ld& As)
{ld center = 0;//判断滤波器类型if (check_types(p1, p2, s1, s2)){cout << endl << "该滤波器的类型为";switch (check_types(p1, p2, s1, s2)){case IS_LP:cout << "低通滤波器;" << endl; break;case IS_HP:cout << "高通滤波器;" << endl; break;case IS_BP:cout << "带通滤波器;" << endl; break;case IS_BS:cout << "带阻滤波器;" << endl; break;default:cout << "error" << endl; break;}center = (check_types(p1, p2, s1, s2) == IS_BP) ? p1 * p2 : s1 * s2;}if(sqrt(center))cout << endl << "通带中心频率为:" << sqrt(center) << "Hz;" << endl;//非几何对称改为几何对称if (p1 * p2 != s1 * s2)(check_types(p1, p2, s1, s2) == IS_BP) ?(((center / s2) > s1) ? (s1 = (center / s2)) : (s2 = (center / s1))) :(((center / p2) > p1) ? (p1 = (center / p2)) : (p2 = (center / p1)));//计算N的值ld lambda_p = 1;ld lambda_s = (check_types(p1, p2, s1, s2) == (IS_BP||IS_LP)) ?((s2 - s1) / (p2 - p1)) : ((p2 - p1) / (s2 - s1));	cout << endl << "归一化截频lambda_s的计算结果为:lambda_s = " << lambda_s << ";" << endl;double temp_1 = log10((pow(10, 0.1 * As) - 1) / (pow(10, 0.1 * Ap) - 1));double temp_2 = log10(lambda_s / lambda_p);int N = ceil(temp_1 / (2 * temp_2));//根据N的值查表得到低通滤波器归一化传输函数Hlp(p)分母表达式cout << endl << "butterworth滤波器的阶数为N = " << N << ";" << endl;cout << endl << "归一化传输函数为:H(p) = ";show(N, "p");string show_next_level = is_p(check_types(p1, p2, s1, s2), p2-p1, center);cout << endl << "传输函数H(s) = ";show(N, show_next_level);
}void input()
{cout << endl << "通带起始频率p1:"; cin >> p1;cout << endl << "通带截止频率p2:"; cin >> p2;cout << endl << "通带衰减系数(dB):"; cin >> Ap;cout << endl << "阻带起始频率s1:"; cin >> s1;cout << endl << "阻带截止频率s2:"; cin >> s2;cout << endl << "阻带衰减系数(dB):"; cin >> As;cout << endl;cout << "运算结果为:" << endl;
}int main()
{system("color 0A");//输入六个参量input();//例子//p1 = 3.1e6; p2 = 5.5e6; Ap = 3; s1 = 3.8e6; s2 = 4.8e6; As = 20;//p1 = 0; p2 = 750; Ap = 3; s1 = 0; s2 = 1600; As = 7;p1 *= 2 * PI; p2 *= 2 * PI; s1 *= 2 * PI; s2 *= 2 * PI;compilation(p1, p2, Ap, s1, s2, As);return 0;
}

2.2 测试1

带阻滤波器:p1 = 3.1e6; p2 = 5.5e6; Ap = 3; s1 = 3.8e6; s2 = 4.8e6; As = 20;

2.3测试2

 低通滤波器:p1 = 0; p2 = 750; Ap = 3; s1 = 0; s2 = 1600; As = 7;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享:大数据风险检测报告,哪里查询比较好?

随着大数据技术的发展&#xff0c;逐渐被运用到各个领域&#xff0c;基于大数据技术的个人风险检测也就是我们常说的大数据报告在金融环境中运用的十分普遍&#xff0c;那大数据风险检测报告哪里查询比较好呢?本文就为大家简单介绍一下。 大数据风险检测报告查询能查到什么? …

Ubuntu coredump文件的生成并利用gdb查看报错位置

1.开启core文件生成 相关链接&#xff1a;gdb调试core dump使用 - 知乎 (zhihu.com) 相关链接&#xff1a;ubuntu | linux下程序崩溃生成coredump的方法_linux崩溃dump-CSDN博客 &#xff08;1&#xff09;ulimit -c unlimited &#xff08;2&#xff09;echo "/tmp/cor…

在ubuntu中关于驱动得问题:如何将nouveau驱动程序加入黑名单和安装NVIDIA显卡驱动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、nouveau驱动程序加入黑名单二、安装NVIDIA显卡驱动 一、nouveau驱动程序加入黑名单 (1) 打开黑名单列表文件 终端输入&#xff1a; sudo gedit /etc/modprobe…

HarmonyOS开发之DevEco Studio安装

HUAWEI DevEco Studio是基于IntelliJ IDEA Community开源版本打造&#xff0c;为运行在HarmonyOS和OpenHarmony系统上的应用和服务&#xff08;以下简称应用/服务&#xff09;提供一站式的开发平台。 作为一款开发工具&#xff0c;除了具有基本的代码开发、编译构建及调测等功能…

Linux程序开发(十二):线程与多线程同步互斥实现抢票系统

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

自己手写一个栈【C风格】

#include <iostream> //栈 #define MAX_SIZE 20 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0typedef int Status;//状态类型 typedef int ElemType;//元素类型typedef struct SqStack {ElemType data[MAX_SIZE];int top; };//初始化&#xff0c;方法1 …

CSAPP(datalab)解析

howManyBits /* howManyBits - 返回用二进制补码表示x所需的最小位数* 示例: howManyBits(12) 5* howManyBits(298) 10* howManyBits(-5) 4* howManyBits(0) 1* howManyBits(-1) 1* howManyBits(0x80000000) …

计算机毕业设计 | SpringBoot社区物业管理系统 小区管理(附源码)

1&#xff0c; 概述 1.1 课题背景 近几年来&#xff0c;随着物业相关的各种信息越来越多&#xff0c;比如报修维修、缴费、车位、访客等信息&#xff0c;对物业管理方面的需求越来越高&#xff0c;我们在工作中越来越多方面需要利用网页端管理系统来进行管理&#xff0c;我们…

WordPress安装插件失败No working transports found

1. 背景&#xff08;Situation&#xff09; WordPress 社区有非常多的主题和插件&#xff0c;大部分人用 WordPress 都是为了这些免费好用的主题和插件。但是今天安装完 WordPress 后安装插件时出现了错误提示&#xff1a;“ 安装失败&#xff1a;下载失败。 No working trans…

Vulhub——CAS 4.1、AppWeb、apisix

文章目录 一、Apereo CAS 4.1&#xff08;反序列化命令执行漏洞&#xff09;二、CVE-2018-8715&#xff08;AppWeb认证绕过漏洞&#xff09;三、apisix3.1 CVE-2020-13945(默认密钥漏洞&#xff09;3.2 CVE-2021-45232&#xff08;Dashboard API权限绕过导致RCE&#xff09; 一…

只需一行代码提高3DGS重建质量!随机初始化新SOTA

论文标题&#xff1a; Relaxing Accurate Initialization Constraint for 3D Gaussian Splatting 论文作者&#xff1a; Jaewoo Jung, Jisang Han, Honggyu An, Jiwon Kang, Seonghoon Park and Seungryong Kim 导读&#xff1a; 3DGS在新视角合成和三维重建方面展现了令人印…

2022年CSP-J入门级第一轮初赛真题

一、单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1b;每题有且仅有一个正确选项&#xff09; 第 1 题 以下哪种功能没有涉及C语言的面向对象特性支持&#xff1a;&#xff08; &#xff09;。 A. C中调用printf函数 B. C中调用用户定义的类成…

使用cockpit管理服务器

安装cockpit yum install cockpit启用cockpit systemctl start cockpit浏览器中访问cockpit cockpit监听的端口是9090在浏览器中访问https://ip:9090/效果图 系统 日志 网络 账号

Git常用命令的使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

从cuda到cudnn到pytorch

一、预配版本信息 1、cuda12.1.1 2、cudnn8.9.7 3、pytorch2.2.0 二、引用 深度学习之环境配置&#xff1a;【CUDA 12.1.1cuDNN 8.9.1】最新安装教程记录 -- 20240429_torch 1.12.0对应torchvision-CSDN博客 补充&#xff1a; cuda历史版本索引&#xff1a; NVIDIA Dev…

零基础HTML教程(33)--HTML5表单新功能

文章目录 1. 背景2. HTML5新增表单元素2.1 number (数字输入框)2.2 email (邮箱输入框)2.3 url (链接输入框)2.4 tel (电话输入框)2.5 range (范围选择框)2.6 color (颜色选择框)2.7 datetime (日期时间选择框)2.8 search (搜索框) 3. placeholder &#xff08;占位属性&#x…

站在ESG“20+”新起点上,看中国ESG先锋探索力量

全链减碳、建设绿色工厂、打造零碳产品、守护生物多样性、向受灾群众捐助……不知你是否察觉&#xff0c;自“双碳”目标提出以来&#xff0c;一股“可持续发展热潮”正覆盖各行各业&#xff0c;并且渗透到我们衣食住行的方方面面。在资本市场&#xff0c;ESG投资热潮更是席卷全…

1-3RT-Thread内核基础-笔记

RT-Thread内核相关的概念与基础知识 其中内核库是为了保证内核能够独立运行的一套小型的类似C库的函数实现子集。这部分根据编译器的不同&#xff0c;自带C库的情况也会有些不同。 内核最小的资源占用情况是3K的ROM和1.2K的RAM。 RT thread系统启动流程 启动文件&#xff0c;此…

智慧仓储新动力:EasyCVR+AI视频智能监管系统方案助力仓储安全高效管理

一、背景 随着物流行业的快速发展和智能化水平的提升&#xff0c;智慧仓储视频智能监管系统已成为现代仓储管理的重要组成部分。本系统通过综合运用物联网、视频分析、边缘计算等技术手段&#xff0c;实现对仓储环境的全面监控、智能分析和高效管理。 TSINGSEE青犀视频汇聚Ea…

【启明智显技术分享】SOM2D02-2GW核心板适配ALSA(适用Sigmastar ssd201/202D)

提示&#xff1a;作为Espressif&#xff08;乐鑫科技&#xff09;大中华区合作伙伴及sigmastar&#xff08;厦门星宸&#xff09;VAD合作伙伴&#xff0c;我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸…