用Matlab和SIMULINK实现DPCM仿真和双边带调幅系统仿真
1、使用SIMULINK或Matlab实现DPCM仿真
1.1 DPCM原理
差分脉冲编码调制,简称DPCM,主要用于将模拟信号转换为数字信号,同时减少数据的冗余度以实现数据压缩。在DPCM中,信号的每个抽样值不是独立编码的,而是通过预测前一个抽样值来计算出一个预测值,然后取当前抽样值和预测值之差进行编码。由于抽样值和预测值非常接近,预测误差的可能取值范围比抽样值变化范围小,因此可以用较少的比特数来对预测误差进行编码,从而降低数据的比特率。DPCM是利用信号的时间相关性来减少所需的编码比特数。需要对模拟信号进行周期性扫描,将时间上连续的信号变成时间上离散的信号,根据前一个抽样值计算出一个预测值,计算当前抽样值和预测值之差,即预测误差,并对其进行量化。然后对量化后的预测误差进行编码。在接收端,根据已知的预测值和预测误差进行解码,恢复原始信号。
DPCM可以有效利用信号的时间相关性来减少数据量,这对于具有强相关性的数据特别有效。
在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。在一个DPCM系统中,有两个因素需要设计:预测器和量化器。预测器和量化器应进行联合优化。分别进行线性预测器和量化器的优化设计。
1.2 使用Maltab进行DPCM仿真
代码及注释:
1. 生成输入信号
Fs = 1000; % 采样率 (Hz)
t = 0:1/Fs:0.1; % 时间向量(0.1秒)
x = sin(2pi50*t); % 50 Hz的正弦信号
Fs(采样率):每秒1000个采样点,确保信号足够平滑。
t(时间向量):从0秒到0.1秒的时间步长为1/Fs秒。
x(信号):50 Hz的正弦信号,模拟一个周期性简单的输入信号。
解释:
正弦信号是经典的测试信号,便于观测DPCM的效果。如果希望使用其他信号(如语音数据),可以替换这部分代码。
2. 初始化DPCM变量
N = length(x); % 信号长度
x_pred = zeros(1, N); % 预测信号初始化
e = zeros(1, N); % 预测误差初始化
x_rec = zeros(1, N); % 重建信号初始化
quant_step = 0.1; % 量化步长(控制量化误差)
N:计算信号的长度。
x_pred、e、x_rec:初始化预测信号、预测误差和重建信号,这些变量用于存储逐个采样点的计算结果。
quant_step:量化步长,控制预测误差的量化精度,数值越大意味着压缩越强、但重建误差越大。
解释:
这里假设量化器的步长为0.1,意味着预测误差会被四舍五入到0.1的倍数。步长越大,重建信号的精度越低,失真越明显。
3. DPCM编码与解码过程
for n = 2:N
% 使用上一重建值作为预测值
x_pred(n) = x_rec(n-1);
% 计算预测误差
e(n) = x(n) - x_pred(n);% 量化误差并传输
e_quant = round(e(n) / quant_step) * quant_step;% 重建信号:累加量化后的误差
x_rec(n) = x_pred(n) + e_quant;
解释:
DPCM的核心思想是预测当前样本,并只传输预测误差。重建信号在解码端通过累加预测误差实现。这个简单的一阶预测器适合平滑信号,但对于复杂信号可能不够精确。
4. 绘制原始信号、预测误差和重建信号
figure;
% 子图1:原始信号
subplot(3,1,1);
plot(t, x, ‘b’, ‘LineWidth’, 1.5);
title(‘原始信号’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
grid on;
% 子图2:预测误差
subplot(3,1,2);
stem(t, e, ‘filled’, ‘MarkerSize’, 4, ‘MarkerFaceColor’, ‘r’);
title(‘预测误差 (e[n])’);
xlabel(‘时间 (s)’); ylabel(‘误差幅度’);
grid on;
% 子图3:重建信号
subplot(3,1,3);
plot(t, x_rec, ‘g–’, ‘LineWidth’, 1.2);
title(‘重建信号’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
grid on;
子图1:绘制原始信号,显示它的基本周期性变化。
子图2:绘制预测误差,使用离散点(stem)展示误差的大小和分布。
子图3:绘制重建信号,与原始信号进行对比。
解释:
将三个重要信号分开绘制,便于观察各自的特征:
原始信号 vs 重建信号:重建信号与原始信号应尽量吻合,若量化步长过大则会出现较明显偏差。
预测误差:误差越小,表示预测器越准确,DPCM压缩效果越好。
5. 计算并显示均方误差 (MSE)
MSE = mean((x - x_rec).^2);
disp(['重建信号的均方误差 (MSE): ', num2str(MSE)]);
MSE(均方误差):衡量原始信号和重建信号之间的平均误差,数值越小表示重建效果越好。
运行结果:
原始信号与解码后的DPCM信号在整体趋势上较为相似,这表明DPCM编码和解码过程在一定程度上能够较好地还原原始信号的特征。两者的波形形状大致相同,说明DPCM算法在保留信号主要信息方面具有较好的效果。此外,误差信号的幅度相对较小,说明DPCM编码和解码过程产生的误差在可接受范围内,并且误差信号没有明显的规律性,表明误差不是由系统性因素引起的,而是随机分布的。自适应量化因子随着样本索引的变化而动态调整,这种自适应调整能够根据信号的变化实时优化量化过程,从而提高编码效率和信号质量。DPCM算法在一定程度上能够有效地对信号进行编码和解码,并且具有自适应量化的优势。
1.3 使用SIMULINK进行DPCM仿真
在Simulink中搭建DPCM(差分脉冲编码调制)仿真电路时,要使用Simulink中的“Random Integer Generator”模块生成信号源数据,它是一个连续或离散的输入信号,用于提供系统的初始数据。信号源向下连接到一个“加法器”(+、-符号)。这个加法器用于计算输入信号与反馈信号之间的差值,起到误差信号生成的作用。从加法器的左下方有一个反馈回路,包含一个“延迟单元”(标记为 ),这意味着系统中使用的是离散时间处理。延迟单元的输出信号被反馈到加法器,生成一个反馈回路,用于差分调制的计算。从加法器的右上角,误差信号输出连接到一个存储模块(类似一个方框)。这个模块可能用于存储或观察差分编码后的误差信号。从加法器右侧输出的信号同时传递到一个新的加法器,该加法器用于累加当前误差信号与前一时刻的信号,在接收端对差分编码信号进行累加,以恢复原始信号。累加器输出通过另一个延迟单元进行反馈,作为下一次累加的输入。这种结构保证了在每次计算时包含上一个累加值,以构建累积反馈。最右端的存储模块用于显示或存储最终的输出信号,以便于对恢复后的信号进行观察和分析。
信号源的Amplitude正弦波的振幅设置为1,Frequency (rad/sec) 正弦波的频率也设置为1,这意味着生成的正弦波将具有1的振幅,0的偏置,1 rad/sec的频率,0的相位,且没有指定采样时间:
设置一个加法器,使其符号为±:
再设置一个加法器,使其符号为++:
分别接上两个延迟单元,使得系统中使用的是离散时间处理,从而生成反馈回路。
以上三个示波器分别观察原始信号,编码信号,解码信号。
观察原始信号波形:
观察编码信号波形:
观察解码信号:
通过以上SIMULINK的仿真,可以看到原始信号经过编码,然后解码以恢复信号。
2、使用SIMULINK或Matlab实现双边带调幅系统仿真
2.1 双边带调幅原理
双边带调制(DSB)通过将基带信号的频谱完整地搬移到载波频率的上下两侧,但这种调制方式的信号包络不恒定,导致发射端的平均功率和峰值功率差异较大。此外,为了避免失真,发射机需要在高功率下保持良好的线性输出,但会增加设备的成本和功耗。
虽然双边带调制在小信号传输时具有良好的线性特性,能够较好地保留基带信号的幅度和波形信息,但其抗噪声性能相对较差。在噪声或干扰严重的环境中,信号的完整性易受影响,导致接收端解调出的信号质量下降。双边带调制常需要采用较高信噪比的信道,或依赖其他抗干扰手段以确保通信质量。此外,DSB 的接收端需要实现同步解调,即载波相位必须与发射端保持一致,这对接收机的设计带来了额外的复杂性。同步解调器不仅需要精确的载波恢复电路,还可能增加额外的信号处理延迟,影响系统的实时性能。
2.2 使用Maltab进行双边带调幅系统仿真
代码及注释:
1. 初始化与参数设置
fs = 1e4; % 采样频率 (Hz)
t = 0:1/fs:3-1/fs; % 时间向量 (3秒,方便观察)
fc = 1000; % 载波频率 (Hz)
fm = 5; % 基带信号频率 (Hz)
fs:采样频率设置为10 kHz,保证信号处理精度和避免混叠。
t:时间向量定义为3秒,步长为1/fs,用于生成离散信号。
fc 和 fm:分别定义载波和基带信号频率。载波频率为1 kHz,而基带频率降低为5 Hz,便于在图上清楚地观察调制后的包络。
2. 基带信号生成
m_t = cos(2pifm*t);
subplot(3, 2, 1);
plot(t, m_t); grid on;
title(‘基带信号 m(t)’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
基带信号m(t):一个频率为5 Hz的正弦波,代表待传输的低频信息。
绘图:在第一子图显示基带信号,可以看到3秒内基带信号缓慢变化的正弦波形。
3. 载波信号生成
c_t = cos(2pifc*t);
subplot(3, 2, 2);
plot(t(1:500), c_t(1:500)); grid on; % 截取部分数据以方便观察
title(‘载波信号 c(t)’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
载波信号c(t):一个频率为1 kHz的正弦波,用于调制基带信号。
绘图:由于载波频率较高,绘制了前500个采样点(0.05秒),以方便观察其波形。
4. 双边带调制 (DSB-AM)
s_t = m_t .* c_t;
subplot(3, 2, 3);
plot(t, s_t); grid on;
title(‘调制信号 s(t)’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
调制信号:s(t) = m(t) * c(t),基带信号与载波相乘,实现双边带调制。
结果:调制信号的包络跟随基带信号的变化(形成包络波形),频率主要集中在载波附近。
5. 调制信号的频谱分析
N = length(t);
S_f = abs(fftshift(fft(s_t)))/N;
f = linspace(-fs/2, fs/2, N);
subplot(3, 2, 4);
plot(f, S_f); grid on;
title(‘调制信号的频谱’);
xlabel(‘频率 (Hz)’); ylabel(‘幅度’);
fft:计算调制信号的快速傅里叶变换 (FFT)。
fftshift:将频谱中心移到零频率处,以对称显示频谱。
频谱内容:可以看到基带信号被完整地搬移到正负载波频率(±1 kHz)两侧。
6. 加入高斯白噪声
snr = 10; % 信噪比 (dB)
s_t_noisy = awgn(s_t, snr, ‘measured’);
subplot(3, 2, 5);
plot(t, s_t_noisy); grid on;
title(‘含噪声的调制信号’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
噪声生成:
使用awgn函数为调制信号添加高斯白噪声。
snr:信噪比设置为10 dB,模拟噪声环境。
绘图:观察含噪信号的波形,可以看到信号波形有噪声干扰。
7. 同步解调与低通滤波
r_t = s_t_noisy .* c_t; % 乘以相同载波
[b, a] = butter(5, 2*fm/fs); % 设计低通滤波器
m_t_recovered = filter(b, a, r_t); % 滤波提取基带信号
subplot(3, 2, 6);
plot(t, m_t_recovered); grid on;
title(‘解调后的信号’);
xlabel(‘时间 (s)’); ylabel(‘幅度’);
同步解调:
含噪信号r(t)与同频载波相乘,相当于将调制信号搬回基带频率。
低通滤波:
使用巴特沃斯滤波器 (Butterworth) 滤除高频成分,仅保留解调后的基带信号。
滤波器设计:butter(5, 2*fm/fs),5阶滤波器,截止频率为基带信号的两倍。
绘图:在第六子图展示解调后的信号。可通过观察包络波形,验证解调的有效性。
运行结果:
图中第一幅图代表的是基带信号是一个频率为 5 Hz 的正弦波。表示待传输的原始信息,在调制过程中会映射到更高频段。基带信号为低频,直接传输可能不现实,原因包括易受干扰和不易通过无线电传播。需要将其调制到高频载波上。
第二幅图载波信号是频率为 1000 Hz 的高频正弦波。在图中只显示了前500个采样点的载波信号(约0.05秒),因为频率较高,完整展示会显得非常密集。载波的作用是将基带信号搬移到高频段,以适应无线电传播和频分复用需求。
第三幅图调制信号的包络(外轮廓)与基带信号 m(t) 一致,但频率为载波频率的 1000 Hz。DSB-AM调制将基带信号乘以载波信号,包络反映了基带信号的信息。双边带调制同时在载波频率两侧产生对称的频谱。从这张图可以看出调制信号中的包络变化,信号的幅度随基带信号的变化而波动。
第四幅图频谱中显示了两侧的频率成分,分别位于±1000 Hz(载波频率)附近。每侧包含基带信号的频谱信息,形成双边带结构。频谱中显示了两侧的频率成分,分别位于±1000 Hz(载波频率)附近。每侧包含基带信号的频谱信息,形成双边带结构。
第五幅图在添加10dB 信噪比(SNR) 的高斯白噪声后,信号的波形开始变得不规则,受到噪声干扰。虽然波形包络仍然存在,但受到了一些随机噪声的扰动。这部分模拟了真实传输环境中的噪声干扰。信噪比(SNR)越低,噪声干扰越大,传输效果越差。观察这部分的结果可以了解噪声对调制信号的破坏程度。
第六幅图解调后的信号与原始基带信号m(t)非常相似,但可能包含了一些噪声成分和微小失真。这是通过与载波相乘后,经过低通滤波处理的结果。同步解调依赖于载波的精确同步,成功恢复基带信号。如果解调信号失真严重,说明可能存在载波不同步或噪声过大问题。
双边带调幅系统在调制阶段原始低频信号被调制到高频载波上,使其适合无线传播。频谱上体现了双边带特性,两侧频率对称,包络信息与基带信号一致。噪声干扰可以观察模拟传输过程中的噪声影响,观察不同信噪比(SNR)对信号的干扰程度。在理想同步条件下,解调后的信号与原始基带信号接近,说明系统可以成功提取原始信息。
2.3 使用SIMULINK进行双边带调幅系统仿真
在SIMULINK上使用两个正弦波输入信号源,这两个信号源是不同频率的正弦波,用于进行信号的组合处理。两个信号源输入连接到一个乘法器(“×”符号),用于对两个信号进行相乘操作。这个用于信号调制或相位相关操作。在调制系统中,乘法器可以用于实现振幅调制(AM),将载波信号和基带信号相乘生成调制信号。乘法器的输出连接到一个绝对值模块(“|u|”符号),对相乘后的信号取绝对值。绝对值操作用于去掉信号的负值成分,使信号波形保持正向。比如在包络检测中,取绝对值可以得到信号的包络信息。绝对值模块的输出连接到一个传递函数模块。该传递函数相当于一个一阶低通滤波器,可以滤除高频成分,仅保留信号的低频部分。低通滤波器再用于平滑信号或提取信号的包络信息。最右端的模块用于观测和输出最终的信号。将其连接到示波器模块,用于观察经过滤波器处理后的信号波形。在信号的乘法器和绝对值模块的分支位置,有两个存储模块。它们可能用于记录信号在特定节点的输出,以便分析和对比各处理步骤的信号变化。
也就是通过输入的两个正弦信号相乘得到调制信号,再将调制信号取绝对值,用于包络提取或调制信号的整形。绝对值后的信号通过低通滤波器进行平滑,得到低频成分。最终的输出信号是调制信号的包络,经过滤波后可以进行进一步观察。
两个信号源的频率分别如下:
将信号源的振幅(Amplitude)设置为1。这表示正弦波信号的最大值和最小值分别是 1和 -1。再将频率设置为 50 弧度/秒。这表示正弦波每秒完成 50 个周期。
另外一个信号源的振幅(Amplitude)设置为0.5。再将频率设置为 5 弧度/秒。将这两个信号源不同频率的正弦波,用于进行信号的组合处理。
以下是传递函数模块的参数配置窗口,Numerator Coefficients(分子系数)设置为 [1],表示传递函数的分子部分是一个常数,即1。这表明着传递函数的分子是一个常数1的多项式。没有更高次项,用于一阶或简单系统的传递函数。Denominator Coefficients(分母系数)设置为 [1 5] , 该形式对应一个一阶低通滤波器,能够平滑高频成分。Absolute Tolerance(绝对容差)设置为 auto,即Simulink自动选择容差。
最后通过三个示波器进行观察双边带调幅系统的信号:
观察调制信号:
观察条幅信号:
观察解调信号:
其中调幅信号的振幅范围比调制信号小,这是由于调制过程中的放大或衰减。解调信号的振幅进一步减小,这是由于信道噪声或解调器的不完美。总体是原始信号经过调幅处理,然后通过信道传输,最后进行解调以恢复原始信息。
相关文章:
用Matlab和SIMULINK实现DPCM仿真和双边带调幅系统仿真
1、使用SIMULINK或Matlab实现DPCM仿真 1.1 DPCM原理 差分脉冲编码调制,简称DPCM,主要用于将模拟信号转换为数字信号,同时减少数据的冗余度以实现数据压缩。在DPCM中,信号的每个抽样值不是独立编码的,而是通过预测前一…...
真实网络安全面试场景题
1.公司内部搭建了2台DNS服务器做主辅同步,公司的业务官网地址为 www.chinaddic.com。小明作为网络管理员把域名添加至DNS服务器进行测试。 问题1:使用自己电脑可以正常访问刚添加的域名,但处于同样网络环境同事电脑却访问不了。 出现此问题原因…...
速盾:ddos防御手段哪种比较好?高防cdn怎么样?
DDoS(分布式拒绝服务)攻击是一种威胁网络安全的常见攻击手段。为了保护网站和服务器免受DDoS攻击的影响,许多安全专家和公司开发了各种防御手段。在这篇文章中,我们将重点讨论一种常见的DDoS防御手段——高防CDN(内容分…...
【ArcGISPro】Sentinel-2数据处理
错误 默认拉进去只组织了4个波段,但是实际有12个波段 解决方案 数据下载 Sentinel-2 数据下载-CSDN博客 数据处理 数据查看 创建镶嵌数据集 在数据管理工具箱中找到创建镶嵌数据集...
【适配】屏幕拖拽-滑动手感在不同分辨率下的机型适配
接到一个需求是类似下图的3D多房间视角,需要拖拽屏幕 问题 在做这种屏幕拖拽的时候发现,需要拖拽起来有跟手的感觉,会存在不同分辨率机型的适配问题。 即:美术调整好了机型1的手感,能做到手指按下顶层地板上下挪动&…...
谷粒商城-消息队列Rabbitmq
RabbitMq参考文档 在谷粒商城项目中使用消息队列主要有以下几个重要原因: 异步处理提高性能 场景示例:在订单系统中,当用户提交订单后,系统需要完成多个操作,如更新库存、生成订单记录、发送订单通知等。如果这些操作…...
python-爬虫入门指南
前言:由于个人负责的运维组,其中有个同事每回在某个项目发版更新后,需手动在k8s容器平台web界面上复制出几百个微服务的名称以及镜像版本等信息,用来更新微服务清单,个人决定抽时间写个爬虫脚本自动完成手动执行的任务…...
力扣—53. 最大子数组和
53. 最大子数组和 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4…...
STM32H7开发笔记(2)——H7外设之多路定时器中断
STM32H7开发笔记(2)——H7外设之多路定时器中断 文章目录 STM32H7开发笔记(2)——H7外设之多路定时器中断0.引言1.CubeMX配置2.软件编写 0.引言 本文PC端采用Win11STM32CubeMX4.1.0.0Keil5.24.2的配置,硬件使用STM32H…...
kafka如何知道哪个消费者消费哪个分区?
在Kafka中,消费者和分区之间的分配是通过一个称为“消费者组协调器”(Consumer Group Coordinator)的组件来管理的。 以下是Kafka如何确定哪个消费者消费哪个分区的步骤: 消费者加入消费者组: 当消费者启动时…...
Dockerfile构建报错【ERROR: failed to solve: process】的解决办法
报错信息如下 ERROR: failed to solve: process “/bin/sh -c yarn install” did not complete successfully: exit code: 1 解决 从阿里云等镜像站点下载CentOS-7.repo文件 下载CentOS-7.repo文件:可以从阿里云等镜像站点下载CentOS-7.repo文件,…...
html渲染优先级
在前端开发中,优先布局是指在设计和构建页面时,将页面的各个部分按照其重要性和优先级进行排序,并依次进行布局和开发。这种方法可以帮助开发团队在项目初期就确定页面结构的核心部分,从而更好地掌控项目的整体进度和优先级。且确…...
AIX下crs-5005 ip address is aready in use in the network的解决办法
某业务生产系统中,三节点的rac数据库中3号节点因故障停机后,进行crs的重启。重启完成后,发现数据库的监听未起来,启动的过程中并提示crs-5005错误。 一、问题过程 查看监听,发现监听no service ywdb03/oracle/grid/c…...
Docker--通过Docker容器创建一个Web服务器
Web服务器 Web服务器,一般指网站服务器,是驻留于因特网上某种类型计算机的程序。 Web服务器可以向浏览器等Web客户端提供文档,也可以放置网站文件以供全世界浏览,或放置数据文件以供全世界下载。 Web服务器的主要功能是提供网上…...
C#里怎么样自己实现10进制转换为二进制?
C#里怎么样自己实现10进制转换为二进制? 很多情况下,我们都是采用C#里类库来格式化输出二进制数。 如果有人要你自己手写一个10进制数转换为二进制数,并格式化输出, 就可以采用本文里的方法。 这里采用求模和除法来实现的。 下…...
sql 查询语句:将终端数据形式转换成insert语句
文本转换:sql 查询语句:将终端数据形式转换成insert语句 如上,写过后端的都知道,从生产或其他地方拿到的数据,有可能会是图一;但实际上,我们需要图二的数据; 不废话,直接…...
Spring Boot 应用开发:构建高效、可扩展的 Java 微服务
以下是一个简单的 Spring Boot 小项目示例,该项目是一个基于 Spring Boot 的博客系统后端部分。这个项目将展示如何使用 Spring Boot 框架来创建一个基本的 RESTful API 服务,以管理博客文章。 项目结构 spring-boot-blog ├── src │ ├── main…...
【Linux】安装 openssh-server 并打开 ssh 服务(Ubuntu 22.04)
引言 openssh-server是OpenSSH套件的一部分,它是SSH协议的开源实现。SSH,全称为Secure Shell,是一种网络协议,用于安全地在不安全的网络环境中执行远程命令和传输数据。 配置步骤 在Ubuntu系统中安装openssh-server。 sudo apt…...
开源IM,为你的项目增加聊天功能
现在大多数APP,或多或少都会涉及到聊天功能,而大部分APP的选择则是接入TIM等三方IM服务,但是,这种方式对于大多数刚刚起步的APP来说,费用是非常昂贵的,基本上每月都有好几百的支出,并且…...
跨平台应用开发框架(1)----Qt(组件篇)
目录 1.Qt 1.Qt 的主要特点 2.Qt的使用场景 3.Qt的版本 2.QtSDK 1.Qt SDK 的组成部分 2.安装 Qt SDK 3.Qt SDK 的优势 3.Qt初识 1.快速上手 widget.cpp mian.cpp widget.h Helloworld.pro 2.对象树 3.坐标系 4.信号和槽 1. 信号和槽的基本概念 2. 信号和槽的…...
Java基础 设计模式——针对实习面试
目录 Java基础 设计模式单例模式工厂模式观察者模式策略模式装饰器模式其他设计模式 Java基础 设计模式 单例模式 单例模式(Singleton Pattern) 定义:确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。适用场景&…...
C++ —— 以真我之名 如飞花般绚丽 - 智能指针
目录 1. RAII和智能指针的设计思路 2. C标准库智能指针的使用 2.1 auto_ptr 2.2 unique_ptr 2.3 简单模拟实现auto_ptr和unique_ptr的核心功能 2.4 shared_ptr 2.4.1 make_shared 2.5 weak_ptr 2.6 shared_ptr的缺陷:循环引用问题 3. shared_ptr 和 unique_…...
k8s中部署filebeat进行日志监听并发送到es中
注意事项 1. 需要将namespace修改为自己项目中的命名空间 2. es换成对应的地址 3. filebeat-inputs中的两个配置(根据需要用任意一个就可以) 3.1 第一个配置是监听docker日志,由于系统日志太多所以这里只监听项目部署命名空间下的内容 -…...
HTTP Accept用法介绍
一、HTTP Accept是什么 HTTP协议是一个客户端和服务器之间进行通信的标准协议,它定义了发送请求和响应的格式。而HTTP Accept是HTTP协议中的一个HTTP头部,用于告诉服务器请求方所期望的响应格式。这些格式可以是媒体类型、字符集、语言等信息。 HTTP A…...
软件工程设计模式--结构型设计模式
设计模式的核心思想 : 广义——软件设计模式是可解决一类软件问题并能重 复使用的软件设计方案 狭义——设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述,是在类和对象的层次描述的可重复使用的软件设计问题的解决方…...
HTML5好看的音乐播放器多种风格(附源码)
文章目录 1.设计来源1.1 音乐播放器风格1效果1.2 音乐播放器风格2效果1.3 音乐播放器风格3效果1.4 音乐播放器风格4效果1.5 音乐播放器风格5效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者&…...
【FPGA】Verilog:利用 4 个串行输入- 串行输出的 D 触发器实现 Shift_register
0x00 什么是寄存器 寄存器(Register)是顺序逻辑电路中使用的基本组成部分之一。寄存器用于在数字系统中存储和处理数据。寄存器通常由位(bit)构成,每个位可以存储一个0或1的值。通过寄存器,可以设计出计数器、加法器等各种数据处理电路。 0x01 寄存器的种类 基于 D 触发…...
快速排序算法-C语言
第一步:实现分区函数 根据题目中的“快速排序”,我们需要实现一个分区函数,这个功能的实现: 设定基准值 pivot。使用两个指针 low 和 high,分别从数组的两端向中间移动,进行元素交换。 int part(int A[]…...
SuperMap Objects组件式GIS开发技术浅析
引言 随着GIS应用领域的扩展,GIS开发工作日显重要。一般地,从平台和模式上划分,GIS二次开发主要有三种实现方式:独立开发、单纯二次开发和集成二次开发。上述的GIS应用开发方式各有利弊,其中集成二次开发既可以充分利…...
极简开源Windows桌面定时提醒休息python程序
当我们长期在电脑面前坐太久后,会产生一系列健康风险,包括干眼症,颈椎,腰椎,肌肉僵硬等等。解决方案是在一定的时间间隔内我们需要have a break, 远眺可以缓解干眼症等眼部症状,站起来走动两步,…...
SpringBoot源码解析(五):准备应用环境
SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…...
JAVA笔记 | 策略模式+枚举Enum简单实现策略模式(可直接套用)
本篇为更为简单的策略模式应用,使用枚举来进行策略分配 上一篇(链接如下)更像是策略工厂模式来分配策略 JAVA笔记 | 实际上用到的策略模式(可直接套用)-CSDN博客 先创建策略相关类 //策略类 public interface PetStrategy {/*** 执行动作 - 跑RUN*/String run(Str…...
SpringBoot集成 Jasypt 实现数据源连接信息进行加密
SpringBoot集成 Jasypt 实现数据源连接信息进行加密 在实际项目中,敏感信息(如数据库连接的 URL、用户名、密码等)直接暴露在配置文件中可能导致安全隐患。为了解决这一问题,可以使用 Jasypt 来加密敏感信息,并在运行…...
大数据新视界 -- Hive 数据桶原理:均匀分布数据的智慧(上)(9/ 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
优化Docker镜像:提升部署效率与降低资源消耗
目录 1. 最小化镜像层 2. 使用轻量级基础镜像 3. 多阶段构建 4. 清理不必要的文件和依赖 5. 使用.dockerignore文件 6. 压缩和优化文件系统 7. 外部化配置和数据 8. 限制容器资源 9. 定期清理未使用的镜像和容器 结论 在云计算和微服务架构的浪潮中,Docke…...
strupr(arr);模拟实现(c基础)
hi , I am 36 适合对象c语言初学者 strupr(arr);函数是把arr数组变为大写字母,并返回arr 介绍一下strupr(arr);(c基础)-CSDN博客 现在进行My__strupr(arr);模拟实现 #include<stdio.h>//My__strupr(arr); //返回值为arr(地址),于是…...
skywalking es查询整理
索引介绍 sw_records-all 这个索引用于存储所有的采样记录,包括但不限于慢SQL查询、Agent分析得到的数据等。这些记录数据包括Traces、Logs、TopN采样语句和告警信息。它们被用于性能分析和故障排查,帮助开发者和运维团队理解服务的行为和性能特点。 …...
AI时代的软件工程:迎接LLM-DevOps的新纪元
在科技日新月异的今天,GPT的问世无疑为各行各业带来了一场深刻的变革,而软件工程领域更是首当其冲,正式迈入了软件工程3.0的新纪元。2024年,作为软件工程3.0的元年,伴随着软件工程3.0宣言的震撼发布,一个全…...
【机器学习】——卷积与循环的交响曲:神经网络模型在现代科技中的协奏
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...
详解Servlet的使用
目录 Servlet 定义 动态页面 vs 静态页面 主要功能 Servlet的使用 创建Maven项目 引入依赖 创建目录 编写代码 打war包 部署程序 验证程序 Smart Tomcat 安装Smart Tomcat 配置Smart Tomcat插件 启动Tomcat 访问页面 路径对应关系 Servlet运行原理 Tomcat的…...
使用Java代码操作Kafka(五):Kafka消费 offset API,包含指定 Offset 消费以及指定时间消费
文章目录 1、指定 Offset 消费2、指定时间消费 1、指定 Offset 消费 auto.offset.reset earliest | latest | none 默认是 latest (1)earliest:自动将偏移量重置为最早的偏移量,–from-beginning (2)lates…...
MAC 怎么终端怎么退出和进入Anaconda环境
mac安装完anaconda 后,命令行窗口默认使用conda的,取消默认,用以下一行代码在命令行运行即可,重启终端: conda config --set auto_activate_base false # 将false改为true设置默认环境为conda进入conda环境ÿ…...
如何在 .gitignore 中仅保留特定文件:以忽略文件夹中的所有文件为例
在日常的开发工作中,使用 Git 来管理项目是不可或缺的一部分。项目中的某些文件夹可能包含大量的临时文件、生成文件或不需要版本控制的文件。在这种情况下,我们通常会使用 .gitignore 文件来忽略这些文件夹。然而,有时我们可能希望在忽略整个…...
USRP:B205mini-i
USRP B205mini-i B205mini-i都是采用工业级的FPGA芯片(-I表示industrial-grade),所以价格贵。 这个工业级会让工作温度从原来 0 – 45 C 变为 -40 – 75 C. 温度的扩宽,会让工作的稳定性变好。但是前提是你需要配合NI的外壳才行,你如果只买一…...
Oracle SQL优化②——访问路径
前言 访问路径指的就是通过哪种扫描方式获取数据,比如全表扫描、索引扫描或者直接通过ROWID获取数据。想要完成SQL优化,就必须深入理解各种访问路径。本文章详细介绍常见的访问路径。 一.常见访问路径 1.TABLE ACCESS FULL 表示全表扫描,…...
k8s1.30.0高可用集群部署
负载均衡 nginx负载均衡 两台nginx负载均衡 vim /etc/nginx/nginx.conf stream {upstream kube-apiserver {server 192.168.0.11:6443 max_fails3 fail_timeout30s;#server 192.168.0.12:6443 max_fails3 fail_timeout30s;#server 192.168.0.13:6443 max_fails3…...
Jenkins的环境部署
day22 回顾 Jenkins 简介 官网Jenkins Jenkins Build great things at any scale The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project. 用来构建一切 其实就是用Java写的一个项目…...
Android开发教程案例源码分享-匹配动画多个头像飘动效果
Android开发教程案例源码分享-匹配动画多个头像飘动效果 匹配往往出现多个头像飘动,吸引人点击,有时出现的位置还不固定 一、思路: 用MotionLayout 二、效果图: 看视频更直观点: Android开发教程案例源码分享-匹配…...
微信分账系统供应链分润微信支付 (亲测源码)
搭建环境:nginxphp7.2mysql5.7 1.上传源码到网站根目录并解压 2.导入数据库文件到数据库 3.修改数据库链接文件/.env 4.设置运行目录为/public 5.伪静态设置成tp 6.后台地址:域名/zh9025.php 源码下载:https://download.csdn.net/down…...
C#里怎么样使用BinaryReader和BinaryWriter类?
C#里怎么样使用BinaryReader和BinaryWriter类? 二进制读取,有时候就比较有用。 比如在数据序列化到文件里,再从文件里读取出来。因为写入文件的类型有很多种,比如int/bool/long/byte/bytes等等。 又比如在串口通讯,或者网络通讯里,也需要把数据类型序列化到缓冲区,然后…...