模拟滤波器的基础知识和设计

信号处理工作中滤波器的应用是非常广泛的,可以分成模拟滤波器和数字滤波器两种,数字滤波器主要包括两种,IIR和FIR,这两种滤波器后面统一说,今天先来说一说模拟滤波器(主要是我先用Python实现了Matlab书里面模拟滤波器的一些内容)。

首先,什么是滤波器,什么又是模拟滤波器?

滤波器:具有频率选择作用的电路或者运算处理系统,具有滤除噪声、分离不同信号的功能,今天主要写的是,1、巴特沃斯滤波器、2、切比雪夫滤波器,3、椭圆滤波器,4、低通到低通的频带转换

模拟滤波器:更具一组设计规范来设计模拟系统函数H_a(s),使其逼近某个理想滤波器的特性。

各种模拟滤波器的设计过程都是先设计出低通滤波器,再通过频率变换将低通滤波器转换成其他类型模拟滤波器。

我们考虑因果系统:

H_a(j\Omega)=\int_{0}^{\inf}h_a(t)e^{-j\omega t}dt

其中,h_a(s)是系统的单位脉冲响应,是实函数,那么就有:

H_a(j\Omega)=\int_{0}^{\inf}h_a(t)(\cos \Omega t-j\sin\Omega t)dt

实际上有:H_a(-j\Omega)=H_a^*(j\Omega)

定义模拟滤波器的振幅平方函数为:

A(\Omega^2)=|H_a(j\Omega)|^2=H_a(j\Omega)H_a^*(j\Omega)

令:s=j\Omega

如果要系统稳定,那么A(\Omega^2)=A(-s^2)

如果我们要让系统函数稳定,就应该选用A(-s^2)在s剖面的左半平面的极点作为H_a(s)的极点。

来看看今天的内容:

目录

1、巴特沃斯滤波器

 2、切比雪夫I型滤波器

 3、切比雪夫II型滤波器

 4、椭圆滤波器(考尔滤波器)

 5、低通到低通的频带变换

首先,和Jupyter笔记本一样,先导入我们需要的包:

import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as signal

1、巴特沃斯滤波器

其振幅平方函数为:

A(\Omega)=|H_a(j\Omega)|^2=\frac{1}{1+(\frac{j\Omega}{j\Omega_c})^{2N}}=\frac{1}{1+(\Omega/\Omega_c)^{2N}}

其中,N是滤波器的阶数,N越大,带通和傣族的近似性越好,过渡带也就越陡。

tips:之前一大段时间没有更新,一个是野外没条件,另一个原因就是懒得没有好好去读Scipy.signal的文档,所以说博客有一大段时间空下来了,其实这两天再去读文档,同时对照着Matlab书里面的函数讲解,发现很多都是一样的。

MATLAB中,buttap函数用来计算N阶巴特沃斯归一化,模拟低通原型滤波器系统函数的零点、极点、增益因子的,Python也一样,返回的都是z,p,k,分别是G(p)的极点、零点、增益

我们来看一个最简单的例子:产生一个20阶低通模拟滤波器原型,表示为零极点增益形式:

[z,p,k]=signal.buttap(20)
[n,den]=signal.zpk2tf(z,p,k)
[h,w]=signal.freqs(n,den)
plt.subplot(211)
plt.plot(np.abs(h))
plt.grid(True)
plt.subplot(212)
plt.plot(w)
plt.grid(True)

来看看结果:chule

 说实话,除了这张图以外,其他的我都能和Matlab的对的上。

那就来看一看不同阶数下的巴特沃斯滤波器的幅频响应曲线:

n=np.linspace(0,2,200,dtype='float')
[z1,p1,k1]=signal.buttap(1)
[num1,den1]=signal.zpk2tf(z1,p1,k1)
[w1,h1]=signal.freqs(num1,den1)
magh1=abs(h1)
[z2,p2,k2]=signal.buttap(3)
[num2,den2]=signal.zpk2tf(z2,p2,k2)
[w2,h2]=signal.freqs(num2,den2)
magh2=abs(h2)
[z3,p3,k3]=signal.buttap(8)
[num3,den3]=signal.zpk2tf(z3,p3,k3)
[w3,h3]=signal.freqs(num3,den3)
magh3=abs(h3)
[z,p,k]=signal.buttap(12)
[num,den]=signal.zpk2tf(z,p,k)
[w,h]=signal.freqs(num,den)
magh=abs(h)
plt.subplot(2,2,1)
plt.plot(magh1)
plt.grid(True)
plt.subplot(2,2,2)
plt.plot(magh2)
plt.grid(True)
plt.subplot(2,2,3)
plt.plot(magh3)
plt.grid(True)
plt.subplot(2,2,4)
plt.plot(magh)
plt.grid(True)

 在已知设计参数\omega_p,\omega_s,R_p,R_s之后,利用buttord函数可以求出所需要的滤波器的阶数和3dB截止频率:

[n,Wn]=signal.buttord(Wp,Ws,Rp,Rs)

其中:

Wp:带通截止频率

Ws:带阻起始频率

Rp:通带内波动

Rs:阻带内最小衰减

1、低通滤波器:

# 采样速率为10000H在,设计一个低通滤波器,fp=2000Hz,fs=3000H在,Rp=4dB,Rs=30dB
fn=10000
fp=900
fs=600
Rp=3
Rs=20
Wp=(fp/(fn/2))
Ws=fs/(fn/2)
[n,Wn]=signal.buttord(Wp,Ws,Rp,Rs)
[b,a]=signal.butter(n,Wn)
[H,F]=signal.freqz(b,a,1000,8000)
plt.subplot(211)
plt.plot(H,20*np.log10(abs(F)))
plt.xlabel("frequency")
plt.ylabel('altitude')
plt.title("LowPass")
plt.grid(True)
pha=np.angle(F)*180/np.pi
plt.subplot(212)
plt.plot(H,pha)
plt.xlabel("frequency")
plt.ylabel('angle')
plt.grid(True)

这里有个地方注意一下:Matlab和Python的signal.freqs/z两个函数的输出顺序是不同的,Matlab的输出的H和W和Python输出的H的W两者刚好调换了位置。sheshe

2、高通滤波器:

# 采样速率为10000H在,设计一高通滤波器,fp=900Hz,fs=600Hz,Rp=3dB,Rs=20dB
fn=10000
fp=900
fs=600
Rp=3
Rs=20
Wp=fp/(fn/2)
Ws=fs/(fn/2)
[n,wn]=signal.buttord(Ws,Wp,Rp,Rs)
[b,a]=signal.butter(n,wn,'high')
[H,F]=signal.freqz(b,a,900,10000)
plt.subplot(211)
plt.plot(H,20*np.log10(abs(F)))
plt.xlabel("frequency")
plt.ylabel('altitude')
plt.title("HighPass")
plt.grid(True)
pha=np.angle(F)*180/np.pi
plt.subplot(212)
plt.plot(H,pha)
plt.xlabel("frequency")
plt.ylabel('angle')
plt.grid(True)

3、带通滤波器:

fn=10000
fp=np.array([600,1700])
fs=np.array([900,1200])
Rp=4
Rs=30
Wp=fp/(fn/2)
Ws=fs/(fn/2)
[n,wn]=signal.buttord(Wp,Ws,Rp,Rs)
[b,a]=signal.butter(n,wn,'bandpass')
[H,F]=signal.freqz(b,a,1000,10000)
plt.subplot(211)
plt.plot(20*np.log10(abs(F)))
plt.xlabel("frequency")
plt.ylabel('altitude')
plt.title("BandPass")
plt.grid(True)
pha=np.angle(F)*180/np.pi
plt.subplot(212)
plt.plot(pha)
plt.xlabel("frequency")
plt.ylabel('angle')
plt.grid(True)

 4、带阻滤波器:

fn=10000
fp=np.array([600,1700])
fs=np.array([900,1200])
Rp=4
Rs=30
Wp=fp/(fn/2)
Ws=fs/(fn/2)
[n,wn]=signal.buttord(Wp,Ws,Rp,Rs)
[b,a]=signal.butter(n,wn,'bandstop')#看到了吗,低通、高通、带通、带阻的选择方式就是这样
[H,F]=signal.freqz(b,a,1000,10000)
plt.subplot(211)
plt.plot(20*np.log10(abs(F)))
plt.xlabel("frequency")
plt.ylabel('altitude')
plt.title("BandPass")
plt.grid(True)
pha=np.angle(F)*180/np.pi
plt.subplot(212)
plt.plot(pha)
plt.xlabel("frequency")
plt.ylabel('angle')
plt.grid(True)

 2、切比雪夫I型滤波器

A(\Omega)=|H_a(j\Omega)|^2=\frac{1}{1+\varepsilon ^2 V_N(\Omega/\Omega_c)}

式中:\Omega_c是有效通带截止频率,\varepsilon是与通带波纹有关的参量,\varepsilon越大,波纹越大,但其范围在(0,1),V_N是N阶切比雪夫多项式:

V_N=\left\{\begin{matrix} & cos(Narccosx),|x|\leqslant 1\\ & cosh(Narcoshx),|x|>1 \end{matrix}\right.

这里就不写Matlab的了,直接写Python的:

[z,p,k]=signal.cheb1ap(N,rs)

n是阶数,rs是通带的幅度误差,返回值分别是滤波器的零点、极点、增益:

Wp=3*np.pi*4*np.power(12,3)
Ws=3*np.pi*12*np.power(10,3)
rp=1
rs=30
wp=1
ws=Ws/Wp
[N,wc]=signal.cheb1ord(Wp,Ws,rp,rs,'lowpass')
[z,p,k]=signal.cheb1ap(N,rs)
[b,a]=signal.zpk2tf(z,p,k)
w=np.linspace(0,np.pi,50,dtype='float')
[h,w1]=signal.freqs(b,a,w)
plt.plot(h*wc/wp,20*np.log10(abs(w1)))
plt.grid(True)

n=np.linspace(0,4,200,dtype='float')
Rp=1
N1=1
N2=3
N3=5
N4=7
[z1,p1,k1]=signal.cheb1ap(N1,Rp)
[b1,a1]=signal.zpk2tf(z1,p1,k1)
[H1,w1]=signal.freqs(b1,a1,n)
magh1=np.power(np.abs(w1),2)
plt.subplot(2,2,1)
plt.plot(H1,magh1)
plt.grid(True)
[z2,p2,k2]=signal.cheb1ap(N2,Rp)
[b2,a2]=signal.zpk2tf(z2,p2,k2)
[H2,w2]=signal.freqs(b2,a2,n)
magh2=np.power(np.abs(w2),2)
plt.subplot(2,2,2)
plt.plot(H2,magh2)
plt.grid(True)
[z3,p3,k3]=signal.cheb1ap(N3,Rp)
[b3,a3]=signal.zpk2tf(z3,p3,k3)
[H3,w3]=signal.freqs(b3,a3,n)
magh3=np.power(np.abs(w3),2)
plt.subplot(2,2,3)
plt.plot(H3,magh3)
plt.grid(True)
[z4,p4,k4]=signal.cheb1ap(N4,Rp)
[b4,a4]=signal.zpk2tf(z4,p4,k4)
[H4,w4]=signal.freqs(b4,a4,n)
magh4=np.power(np.abs(w4),2)
plt.subplot(2,2,4)
plt.plot(H4,magh4)
plt.grid(True)

 3、切比雪夫II型滤波器

A(\Omega)=|H_a(j\Omega)|^2=\frac{1}{1+\varepsilon ^2 T^2_N(\Omega/\Omega_c)^{-1}}

[z,p,k]=signal.cheb2ap(N,rs)

n是阶数,rs是通带的波动,返回值分别是滤波器的零点、极点、增益。

Wp=3*np.pi*4*np.power(12,3)
Ws=3*np.pi*12*np.power(10,3)
rp=1
rs=30
wp=1
ws=Ws/Wp
[N,wc]=signal.cheb2ord(wp,ws,rp,rs,'s')
[z,p,k]=signal.cheb2ap(N,rs)
[b,a]=signal.zpk2tf(z,p,k)
w=np.linspace(0,np.pi,50,dtype='float')
[h,w]=signal.freqs(b,a,w)
plt.plot(h*wc/wp,20*np.log10(np.abs(w)))
plt.grid(True)

n=np.linspace(0,4,200,dtype='float')
Rp=1
N1=1
N2=3
N3=5
N4=7
Rp=20
[z1,p1,k1]=signal.cheb2ap(N1,Rp)
[b1,a1]=signal.zpk2tf(z1,p1,k1)
[H1,w1]=signal.freqs(b1,a1,n)
magh1=np.power(np.abs(w1),2)
plt.subplot(2,2,1)
plt.plot(H1,magh1)
plt.grid(True)
[z2,p2,k2]=signal.cheb2ap(N2,Rp)
[b2,a2]=signal.zpk2tf(z2,p2,k2)
[H2,w2]=signal.freqs(b2,a2,n)
magh2=np.power(np.abs(w2),2)
plt.subplot(2,2,2)
plt.plot(H2,magh2)
plt.grid(True)
[z3,p3,k3]=signal.cheb2ap(N3,Rp)
[b3,a3]=signal.zpk2tf(z3,p3,k3)
[H3,w3]=signal.freqs(b3,a3,n)
magh3=np.power(np.abs(w3),2)
plt.subplot(2,2,3)
plt.plot(H3,magh3)
plt.grid(True)
[z4,p4,k4]=signal.cheb2ap(N4,Rp)
[b4,a4]=signal.zpk2tf(z4,p4,k4)
[H4,w4]=signal.freqs(b4,a4,n)
magh4=np.power(np.abs(w4),2)
plt.subplot(2,2,4)
plt.plot(H4,magh4)
plt.grid(True)

 4、椭圆滤波器(考尔滤波器)

这是一种带通和带阻等波纹的滤波器,在阶数相同的的条件下,有着最小的通和带阻波动,其在带通和带阻的波动相同,特点:

1、是一种零极点型滤波器,在有限频率范围内存在传输零点和极点

2、其通带和阻带都有着等波纹特性,所以通带、阻带逼近特性良好

3、在同样的性能要求下,比前两种滤波器所需要的阶数都低,而且其过渡带比较窄。

A(\Omega)=|H_a(j\Omega)|^2=\frac{1}{1+\varepsilon^2R^2_N(\Omega,L)}

其中,R_N(\Omega,L)是雅各比椭圆函数,L是一个表示波纹性质的参量。

[N,wc]=signal.ellipord(wp,ws,rp,rs)

其功能是求解滤波器的最小阶数,Wp代表通带介质角频率,W是代表阻带起始角频率,Rp表示通带波纹(dB),Rs表示阻带最小衰减(dB)

[z,p,k]=signal.ellipap(N,rp,rs)

同样,求解零点、极点、增益。

Wp=3*np.pi*4*np.power(12,3)
Ws=3*np.pi*12*np.power(10,3)
rp=2
rs=25
wp=1
ws=Ws/Wp
[N,wc]=signal.ellipord(wp,ws,rp,rs,'s')
[z,p,k]=signal.ellipap(N,rp,rs)
[b,a]=signal.zpk2tf(z,p,k)
w=np.linspace(0,2*np.pi,67,dtype='float')
[h,w]=signal.freqs(b,a,w)
plt.plot(h,20*np.log10(np.abs(w)))
plt.grid(True)
plt.axis([0,6.5,-50,0])
plt.show()

n=np.linspace(0,2,200,dtype='float')
Rp=1
Rs=15
N1=2
N2=3
N3=5
N4=7
[z,p,k]=signal.ellipap(N1,Rp,Rs)
[b,a]=signal.zpk2tf(z,p,k)
[H,w]=signal.freqs(b,a,n)
magh=np.power(np.abs(w),2)
plt.subplot(221)
plt.plot(H,magh)
plt.axis([0,4,0,1])
plt.grid(True)
[z1,p1,k1]=signal.ellipap(N2,Rp,Rs)
[b1,a1]=signal.zpk2tf(z1,p1,k1)
[H1,w1]=signal.freqs(b1,a1,n)
magh1=np.power(np.abs(w1),2)
plt.subplot(222)
plt.plot(H1,magh1)
plt.axis([0,4,0,1])
plt.grid(True)
[z2,p2,k2]=signal.ellipap(N3,Rp,Rs)
[b2,a2]=signal.zpk2tf(z2,p2,k2)
[H2,w2]=signal.freqs(b2,a2,n)
magh2=np.power(np.abs(w2),2)
plt.subplot(223)
plt.plot(H2,magh2)
plt.axis([0,4,0,1])
plt.grid(True)
[z3,p3,k3]=signal.ellipap(N4,Rp,Rs)
[b3,a3]=signal.zpk2tf(z3,p3,k3)
[H3,w3]=signal.freqs(b3,a3,n)
magh3=np.power(np.abs(w3),2)
plt.subplot(224)
plt.plot(H3,magh3)
plt.axis([0,4,0,1])
plt.grid(True)

 5、低通到低通的频带变换

[b,a]=signal.lp2lp(bp,ap,Wp)

wp:模拟低通滤波器的通带截止频率

ap:归一化模拟低通滤波器的分子

bp:归一化模拟低通滤波器的分母

a:频带变换后系统函数的分子

b:频带变换后系统函数的分母

来看一个合适的切比雪夫I型滤波器,以实现低通到低通的频带变换

Wp=3*np.pi*5000
Ws=3*np.pi*13000
rp=2
rs=25
wp=1
ws=Ws/Wp
[n,wc]=signal.cheb1ord(wp,ws,rp,rs,'s')
[z,p,k]=signal.cheb1ap(n,wc)
[bp,ap]=signal.zpk2tf(z,p,k)
[b,a]=signal.lp2lp(bp,ap,Wp)
w=np.linspace(0,3*np.pi*30000,250,dtype='float')
[h,w]=signal.freqs(b,a,w)
plt.plot(h/(2*np.pi),20*np.log10(np.abs(w)))
plt.grid(True)

 好了,今天大概就看了这么多,后面的还多着呢,明天再说。

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

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

相关文章

【UE5 Cesium】15-Cesium for Unreal 加载本地地形

目录 一、加载全球无高度地形 二、加载区域DEM 效果 一、加载全球无高度地形 1. 先去如下网址下载全球无高度地形:Using a global terrain layer without height detail - #9 by RidhwanAziz - Cesium for Unreal - Cesium Community 下载后如下: 解…

MATLAB算法实战应用案例精讲-【优化算法】霸王龙优化算法(TROA)(附MATLAB代码实现)

前言 霸王龙优化算法(Tyrannosaurus optimization,TROA)由Venkata Satya Durga Manohar Sahu等人于2023年提出,该算法模拟霸王龙的狩猎行为,具有搜索速度快等优势。 霸王龙属于暴龙超科的暴龙属,是该属的唯一一种。1905年,美国古生物学家、美国艺术与科学院院士亨利奥…

【计算机视觉|人脸建模】学习从图像中回归3D面部形状和表情而无需3D监督

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Learning to Regress 3D Face Shape and Expression from an Image without 3D Supervision 链接:[1905.06817] Learning to Regress 3D Face Shape and Expression from an I…

2023年上半年软考网工选择题易错总结

1.固态硬盘的存储介质是( )。 A.光盘 B.闪存 C.软盘 D.磁盘 答案:B 解析: 光盘CD-ROM和软盘是塑料的,磁盘的介质是磁性金属圆盘(附着铝合金),固态硬盘采用的存储介质是flash(闪存…

文件上传笔记

一、上传的简单绕过: 1、若是上传的文件只在前端的代码中进行了过滤: (1)可以直接在开发者工具中删除相关代码: (2)也可以通过 burpsuite 绕过: 上传时,先提前修改 php 文件的后缀…

8.2 JUC - 5.CountdownLatch

目录 一、是什么?二、demo演示三、应用之同步等待多线程准备完毕四、 应用之同步等待多个远程调用结束五、CountDownLatch 原理 一、是什么? CountdownLatch 用来进行线程同步协作,等待所有线程完成倒计时。 其中构造参数用来初始化等待计数…

vue3+vite+uniapp 封装一个省市区组件

一、预览图 二、使用前的一些注意事项 只支持在 uniapp vue3 项目中使用支持微信小程序和h5 (app端没有测试过)ui库用的 uview-plus省市区数据用的是 vant-ui 提供的一个赖库 vant/area-data 三、组件代码 <template><u-popup :show"show" type"botto…

iOS——仿写计算器

四则运算&#xff1a;中缀表达式转后缀表达式后缀表达式求值 实现四则运算的算法思路是&#xff1a;首先输入的是中缀表达式的字符串&#xff0c;然后将其转为计算机可以理解的后缀表达式&#xff0c;然后将后缀表达式求值&#xff1a; 中缀转后缀表达式思路参考&#xff1a;《…

现货白银图表分析的依据

现货白银的行情图表分析其实与股票的差不多&#xff0c;投资者可以结合均线、k线的变化&#xff0c;来分析实时的行情走势。当走势图的均线呈多头排列&#xff0c;即短期、中期、长期均线依次从上到下排列并向右上方运行&#xff0c;且白银价格沿各均线向右上方拉升&#xff0c…

数据产品读书笔记——认识数据产品经理

&#x1f33b;大家可能听说的更多是产品经理这个角色&#xff0c;对数据产品经理可能或多或少了解一些&#xff0c;但又不能准确的描述数据产品经理的主要职能和与其他产品的不同&#xff0c;因此通过读一些书来对数据产品经理有一个准确且全面的认知。 目录 1. 数据的产品分类…

基于生物地理学优化的BP神经网络(分类应用) - 附代码

基于生物地理学优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于生物地理学优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.生物地理学优化BP神经网络3.1 BP神经网络参数设置3.2 生物地理学算法应用 4…

Vue中如何进行图像识别与人脸对比(如百度AI、腾讯AI)

Vue中的图像识别与人脸对比 在现代Web应用程序中&#xff0c;图像识别和人脸对比技术越来越受欢迎。它们可以用于各种用途&#xff0c;如人脸识别门禁系统、图像分类和验证等。百度AI和腾讯AI是两个流行的人工智能平台&#xff0c;它们提供了强大的图像识别和人脸对比API。本文…

Sketch for mac v98.3(ui设计矢量绘图)

Sketch是一款为用户提供设计和创建数字界面的矢量编辑工具。它主要用于UI/UX设计师、产品经理和开发人员&#xff0c;帮助他们快速设计和原型各种应用程序和网站。 Sketch具有简洁直观的界面&#xff0c;以及丰富的功能集&#xff0c;使得用户可以轻松地创建、编辑和共享精美的…

【华为OD机考】统计监控、需要打开多少监控器(JAVA题解——也许是全网最优)

前言 本人是算法小白&#xff0c;甚至也没有做过Leetcode。所以&#xff0c;我相信【同为菜鸡的我更能理解作为菜鸡的你们的痛点】。 题干 OD&#xff0c;B 卷 100 分题目【OD 统一考试&#xff08;B 卷&#xff09;】 1. 题目描述 某长方形停车场每个车位上方都有一个监控…

Kafka快速实战以及基本原理详解

这一部分主要是接触 Kafka &#xff0c;并熟悉 Kafka 的使用方式。快速熟练的搭建 kafka 服务&#xff0c;对于快速验证一些基于Kafka 的解决方案&#xff0c;也是非常有用的。 一、 Kafka 介绍 ChatGPT 对于 Apache Kafka 的介绍&#xff1a; 1 、 MQ 的作用 MQ &#xff1a;…

网络原理 - 详解

一&#xff0c;网络通信基础 1.1 IP地址 描述一个设备在网络上的地址&#xff0c;一般使用4个0~255之间的数字&#xff0c;并且使用三给 . 进行分割&#xff0c;如&#xff1a;127.0.0.0 1.2 端口号 端口号是一个2个字节的整数&#xff0c;用来区分一个主机上的不同应用程序…

No168.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Docker linux 安装

sudo yum update sudo yum clean all sudo yum makecache#安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 #添加官方存储库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#安装-跳过一些异常依赖…

阿里云轻量应用服务器有月流量限制吗?

阿里云轻量应用服务器限制流量吗&#xff1f;部分限制&#xff0c;2核2G3M和2核4G4M这两款轻量应用服务器不限制月流量&#xff0c;其他的轻量服务器套餐有月流量限制。 腾讯云轻量应用服务器价格便宜&#xff0c;活动页面&#xff1a;aliyunbaike.com/go/tencent 细心的同学看…

HTML5+CSS3+移动web 前端开发入门笔记(二)HTML标签详解

HTML标签&#xff1a;排版标签 排版标签用于对网页内容进行布局和样式的调整。下面是对常见排版标签的详细介绍&#xff1a; <h1>: 定义一级标题&#xff0c;通常用于标题栏或页面主要内容的标题。<p>: 定义段落&#xff0c;用于将文字分段展示&#xff0c;段落之…