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

信号处理工作中滤波器的应用是非常广泛的,可以分成模拟滤波器和数字滤波器两种,数字滤波器主要包括两种,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.mzph.cn/news/96885.shtml

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

相关文章

【iOS】——仿写计算器

文章目录 一、实现思路二、实现方法三、判错处理 一、实现思路 先搭建好MVC框架,接着在各个模块中实现各自的任务。首先要创建好UI界面,接着根据UI界面的元素来与数据进行互动,其中创建UI界面需要用到Masonry布局。 二、实现方法 在calcu…

八、互联网技术——物联网

文章目录 一、智慧物联案例分析二、M2M技术三、数据保护综合案例分析一、智慧物联案例分析 智能物流是一种典型的物联网应用。一个物流仓储管理系统架构如下图所示: [问题1] 图中的三层功能:仓库物品识别、网络接入、物流管理中心,分别可对应到物联网基本架构中的哪一层? …

分页查询(关键词: limit)

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 比如现在有一张表emp有15条数据 我想每页只显示5条数据,分3页,这样看起来简捷一些,我该怎么实现呢 语法格式: select */列名 from 表名 limit 初…

Dubbo3应用开发—Dubbo3注册中心(zookeeper、nacos、consul)的使用

Dubbo3注册中心的使用 zookeeper注册中心的使用 依赖引入 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper-curator5</artifactId><version>${dubbo.version}</version><type>p…

三十一、【进阶】B+树的演变过程

1、B树简单介绍 &#xff08;1&#xff09;介绍&#xff1a;B树也属于B树&#xff0c;是B树的变种 &#xff08;2&#xff09;特点&#xff1a;所有的数据都位于叶子节点上&#xff0c;叶子节点上的所有元素形成了一个单项链表 &#xff08;3&#xff09;图示&#xff1a; 2…

「网络安全」SQL注入攻击的真相

前言 点击此处即可获得282G网络安全学习资料 我们生活在数据的黄金时代。有些公司将其分析为更好的自己&#xff0c;有些公司为了获利而进行交易&#xff0c;没有一家公司因其价值而自由放弃 - 对于他们的业务和犯罪分子。 SQL&#xff08;结构化查询语言&#xff09;是一种…

【技术干货】如何通过 DP 实现支持经典蓝牙的联网单品设备与 App 配对

经典蓝牙模块&#xff08;Classic Bluetooth&#xff09;主要用于呼叫和音频传输&#xff0c;所以经典蓝牙最主要的特点就是功耗大&#xff0c;传输数据量大。蓝牙耳机、蓝牙音箱等场景大多采用经典蓝牙&#xff0c;因为蓝牙是为传输声音而设计的&#xff0c;是短距离音频传输的…

钡铼DLT645和IEC104转Modbus协议网关BL120DT:构建智能电力网的关键角色

在电力行业中&#xff0c;DLT645和IEC104转Modbus协议网关已成为重要的通信工具&#xff0c;用于将电力设备的数据和状态信息转换为Modbus协议&#xff0c;以便于远程监控和管理。以下是关于钡铼DLT645和IEC104转Modbus协议网关BL120DT在电力行业应用的案例介绍。 某电力公司需…

自动化项目实战->测试博客系统

1.熟悉项目-->哪些场景容易出现问题 2.针对核心流程设计测试用例(手工测试用例) 3.将手工测试用例转换为自动化测试用例 4.部署到服务器 一、针对核心流程设计测试用例 二、将手工测试用例转换为自动化测试用例 2.1设计自动化测试用例的代码结构 初始化动作:BeforeAll--…

[图论]哈尔滨工业大学(哈工大 HIT)学习笔记23-31

视频来源&#xff1a;4.1.1 背景_哔哩哔哩_bilibili 目录 1. 哈密顿图 1.1. 背景 1.2. 哈氏图 2. 邻接矩阵/邻接表 3. 关联矩阵 3.1. 定义 4. 带权图 1. 哈密顿图 1.1. 背景 &#xff08;1&#xff09;以地球为建模&#xff0c;从一个大城市开始遍历其他大城市并且返回…

SSM - Springboot - MyBatis-Plus 全栈体系(二十一)

第四章 SpringMVC 四、RESTFUL 风格设计和实战 1. RESTFul 风格概述 1.1 RESTFul 风格简介 RESTful&#xff08;Representational State Transfer&#xff09;是一种软件架构风格&#xff0c;用于设计网络应用程序和服务之间的通信。它是一种基于标准 HTTP 方法的简单和轻量…

[架构之路-232]:目标系统 - 纵向分层 - 操作系统 - 数据存储:文件系统存储方法汇总

目录 前言&#xff1a; 一、文件系统存储方法基本原理和常见应用案例&#xff1a; 二、Windows FAT文件系统 2.1 概述 三、Linux EXT文件系统 3.1 基本原理 3.2 索引节点表&#xff08;Inode Table&#xff09; 3.2.1 索引节点表层次结构 3.2.2 间接索引表的大小和表项…

Netty全面了解, 使用,有这一篇就够了

目录 引言&#xff1a; 什么是Netty&#xff1f; Netty和Tomcat有什么区别&#xff1f; 为什么Netty受欢迎&#xff1f; Netty为什么并发高 Netty为什么传输快 为什么说Netty封装好&#xff1f; 使用示例&#xff1a; 步骤1: 添加Netty依赖 步骤2: 创建服务器启动类 步…

OpenResty安装-(基于Nginx的高性能Web平台,可在Nginx端编码业务)

文章目录 安装OpenResty1.安装1&#xff09;安装开发库2&#xff09;安装OpenResty仓库3&#xff09;安装OpenResty4&#xff09;安装opm工具5&#xff09;目录结构6&#xff09;配置nginx的环境变量 2.启动和运行3.备注 安装OpenResty 1.安装 首先你的Linux虚拟机必须联网 …

风储VSG-基于虚拟同步发电机的风储并网系统Simulink仿真

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

小程序中如何核销订单和优惠券

小程序已成为许多商家线上线下开展业务的重要渠道。客户在小程序中下单/领券后&#xff0c;可能需要商家现场扫码核销&#xff0c;例如超市购物、卖票、游乐园等线下场景。下面就介绍小程序中如何核销订单和优惠券。 一、订单核销 订单核销是指商家在小程序中确认顾客已经支付…

开环模块化多电平换流器仿真(MMC)N=6(Simulink仿真)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Vue面试题六】为什么Vue中的 v-if 和 v-for 不建议一起用?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;v-if和v-for的优先级是什…

socket简介

套接字&#xff08;Socket&#xff09;实质上就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;为应用层进程利网络协议交换数据提供了相应机制。套接字出于承上启下的作用&#xff0c;向上连接应用进程&#xf…

Linux:TCP三握四挥简析

文章目录 1. 前言2. 背景3. TCP连接的建立和断开3.1 TCP协议状态机3.2 TCP的三握四挥3.2.1 TCP 连接建立的三次握手过程分析3.2.1.1 服务端和客户端套接字的创建3.2.1.2 服务端进入 LISTEN 状态3.2.1.3 服务端在 LISTEN 状态等待客户端的 SYN 请求3.2.1.4 客户端向服务端发送 S…