利用MATLAB设计一个(2,1,7)卷积码编译码器

1、条件:

输入数字信号,可以随机产生,也可手动输入

2、要求:    

(1)能显示编码树、网格图或状态转移图三者之一;

(2)根据输入数字信号编码生成卷积码并显示;

(3)在信号传输加引入误码;

(4)在纠错范围内能进行纠错译码并显示比较。

 

编码原理

将卷积码记作(n,k,N)。一般来说,卷积码的k和n是比较小的整数。

  • 码率仍定义为k/n。
  • 卷积码是一种非分组码(分组码经过编码生成的码组可以分为信息位和校验位,卷积码编码生成的码整体看作校验码或者说监督码)。另外,分组码的k和n均代表码元个数,每个码元可能有m个比特的信息;而卷积码的n和k均指比特(分组码可以看作帧/矢量编码,卷积码可以看作数据流编码)。
  • 卷积码是将k个比特的信息段编成n个比特的码组,其编码生成的监督码元不止和k个比特的信息段有关,还和前面的m=(N-1)个信息段有关。可知,一个监督码元同时和前m个比特以及当前输入的一个比特信息有关,即监督着N=m+1个比特,我们将N成为约束度,所有监督码元的长度nN称为约束长度。

综上,k即为卷积码的输入路数(多路输入要进行串并转换),n为输出比特个数,m为移位寄存器的位数(用于保存所需的前几个比特),N=m+1。

 

译码原理

将卷积码记作(n,k,N)。一般来说,卷积码的k和n是比较小的整数。u

  • 码率仍定义为k/n。
  • 卷积码是一种非分组码(分组码经过编码生成的码组可以分为信息位和校验位,卷积码编码生成的码整体看作校验码或者说监督码)。另外,分组码的k和n均代表码元个数,每个码元可能有m个比特的信息;而卷积码的n和k均指比特(分组码可以看作帧/矢量编码,卷积码可以看作数据流编码)。
  • 卷积码是将k个比特的信息段编成n个比特的码组,其编码生成的监督码元不止和k个比特的信息段有关,还和前面的m=(N-1)个信息段有关。可知,一个监督码元同时和前m个比特以及当前输入的一个比特信息有关,即监督着N=m+1个比特,我们将N成为约束度,所有监督码元的长度nN称为约束长度。

综上,k即为卷积码的输入路数(多路输入要进行串并转换),n为输出比特个数,m为移位寄存器的位数(用于保存所需的前几个比特),N=m+1。

设计方案 

PPT图源:刘银杰

 

运行结果

图源:刘银杰

 

图源:刘银杰
转移图
误码纠错

完整代码 

%王科文/姚双/刘银杰/杨昊  重庆工商大学
function main3
% LabName:             卷积编解码实验
% Task:                生成数据长度为10的比特数据源
%                       约束长度为7,生成多项式进行1/2卷积编码
%                       解码可用Matlab自带函数vitdec进行译码
%                       统计译码比特和数据源的误码数
close all
% 创建主窗口
fig = figure('Name', '卷积编解码实验', 'NumberTitle', 'off', 'Position', [50, 380, 700, 400]);
% 设置采样率和码元速率
fs = 30720000; % 采样率
Rb = 153600;   % 码元速率% 生成数据源
dataBit = [];
code_data_s = [];
decode_data_s = [];
errorNum = [];
zhuangtai=[];
% 创建按钮和文本框
uicontrol("Style",'text','Position',[10,350,330,30],'String','①(指定错误)输入引入错误的位置','FontSize',14)
uicontrol("Style",'text','Position',[340,350,330,30],'String','②(随机错误)输入随机错误的个数','FontSize',14)
uicontrol("Style",'text','Position',[230,260,200,30],'String','随机10位数据源显示:','FontSize',14)
uicontrol("Style",'text','Position',[230,200,200,30],'String','手动10位数据源输入:','FontSize',14)
uicontrol("Style",'text','Position',[230,140,200,30],'String','10位卷积码译码显示:','FontSize',14)
uicontrol("Style",'text','Position',[20,50,180,30],'String','对应32位编码显示:','FontSize',14)
uicontrol("Style",'text','Position',[230,90,200,30],'String','纠错位置显示:','FontSize',14)
%dataBit11=uicontrol('Style', 'edit', 'String', '', 'Position', [400, 160, 200, 30]);%随机显示文本框
d=uicontrol('Style', 'edit', 'String', '', 'Position', [450, 140, 200, 30]);
e=uicontrol('Style', 'edit', 'String', '', 'Position', [450, 90, 200, 30]);
a=uicontrol('Style', 'edit', 'String', '', 'Position', [450, 200, 200, 90], 'Callback', @(src, event) updateManualInput(src, event));%手动输入文本框
b=uicontrol('Style', 'edit', 'String', '2(输入格式)', 'Position', [400, 320, 200, 30],'Callback', @(src, event) updateManualInput2(src, event));%输入错误个数文本框
c=uicontrol('Style', 'edit', 'String', '1 2 5(输入格式·)', 'Position', [60, 320, 200, 30],'Callback',@(src, event) updateManualInput1(src, event));%输入错误位置文本框
code=uicontrol('Style', 'edit', 'String', '', 'Position', [200, 50, 450, 30]);%编码显示文本框
uicontrol('Style', 'pushbutton', 'String', '随机生成数据源', 'Position', [60, 260, 150, 30], 'Callback', @(src, event) generateRandomData(src, event,a,d,e, code,fs, Rb));
uicontrol('Style', 'pushbutton', 'String', '手动输入数据源', 'Position', [60, 200, 150, 30], 'Callback', @(src, event) manualInputData(src, event,d,e,code, fs, Rb));
uicontrol('Style', 'pushbutton', 'String', '本(2,1,7)卷积码状态转移显示', 'Position', [400, 10, 200, 30], 'Callback', @(src, event) bianma());
set(fig,'UserData',struct('a',a,'b',b,'c',c));function bianma()figure('Name', '卷积编码规则', 'NumberTitle', 'off', 'Position', [750, 100, 800, 580]);A1=[0.05,0.7];B1=[0.95,0.7];annotation("arrow",[A1(1),B1(1)],[A1(2),B1(2)]);zhuangtai1=uicontrol('Style', 'edit', 'String', '', 'Position', [180, 515, 200, 35],'Callback', @(src, event) updateManualInput3(src, event));uicontrol("Style",'text','Position',[25,350,700,30],'String','输入位A             M1               M2              M3               M4                M5               M6','FontSize',14)uicontrol("Style",'text','Position',[20,220,550,30],'String','(2,1,7)卷积码第一位输出编码(A+M1+M2+M3+M6)(模2加)','FontSize',14)uicontrol("Style",'text','Position',[20,160,550,30],'String','(2,1,7)卷积码第二位输出编码(A+M2+M3+M5+M6)(模2加)','FontSize',14)uicontrol("Style",'text','Position',[10,100,500,30],'String','寄存器(M1 M2 M3 M4 M5 M6)目前状态为:','FontSize',14)uicontrol("Style",'text','Position',[10,40,500,30],'String','寄存器(M1 M2 M3 M4 M5 M6)下一状态为:','FontSize',14)shuru=uicontrol('Style', 'edit', 'String', '0', 'Position', [60, 300, 50, 30]);M1=uicontrol('Style', 'edit', 'String', '0', 'Position', [160, 300, 50, 30]);M2=uicontrol('Style', 'edit', 'String', '0', 'Position', [260, 300, 50, 30]);M3=uicontrol('Style', 'edit', 'String', '0', 'Position', [360, 300, 50, 30]);M4=uicontrol('Style', 'edit', 'String', '0', 'Position', [460, 300, 50, 30]);M5=uicontrol('Style', 'edit', 'String', '0', 'Position', [560, 300, 50, 30]);M6=uicontrol('Style', 'edit', 'String', '0', 'Position', [660, 300, 50, 30]);now1=uicontrol('Style', 'edit', 'String', '0', 'Position', [450, 100, 200, 30]);next1=uicontrol('Style', 'edit', 'String', '0', 'Position', [450, 40, 200, 30]);bianma1=uicontrol('Style', 'edit', 'String', '', 'Position', [600, 220, 50, 40]);bianma2=uicontrol('Style', 'edit', 'String', '', 'Position', [600, 160, 50, 40]);uicontrol('Style', 'pushbutton', 'String', '填入状态', 'Position', [50, 515, 100, 35], 'Callback', {@subButtonCallback, zhuangtai1,shuru, ...M1,M2,M3,M4,M5,M6,now1,bianma1,bianma2,next1});uicontrol('Style', 'pushbutton', 'String', '输入1', 'Position', [50, 450, 100, 30], 'Callback', {@shu1, shuru,M1,M2,M3,M4,M5,M6,now1,bianma1,bianma2,next1})uicontrol('Style', 'pushbutton', 'String', '输入0', 'Position', [210, 450, 100, 30], 'Callback', {@shu0, shuru,M1,M2,M3,M4,M5,M6,now1,bianma1,bianma2,next1})
end
function shu1(~,~,shuru,M1,M2,M3,M4,M5,M6,now1,bianma1,bianma2,next1)M61=get(M5,'String');M51=get(M4,'String');M41=get(M3,'String');M31=get(M2,'String');M21=get(M1,'String');M11=get(shuru,'String');now=[M11,M21,M31 ,M41,M51,M61];set(now1,'String',now)set(shuru,'String',num2str(1))set(M1,'String',num2str(M11))set(M2,'String',num2str(M21))set(M3,'String',num2str(M31))set(M4,'String',num2str(M41))set(M5,'String',num2str(M51))set(M6,'String',num2str(M61))f1=xor(1,xor(str2num(M11),xor(str2num(M21),xor(str2num(M31),str2num(M61)))));f2=xor(1,xor(str2num(M21),xor(str2num(M31),xor(str2num(M51),str2num(M61)))));set(bianma1,'String',num2str(f1))set(bianma2,'String',num2str(f2))M611=get(M5,'String');M511=get(M4,'String');M411=get(M3,'String');M311=get(M2,'String');M211=get(M1,'String');M111=get(shuru,'String');next=[M111,M211,M311 ,M411,M511,M611];set(next1,'String',next)
end
function shu0(~,~,shuru,M1,M2,M3,M4,M5,M6,now1,bianma1,bianma2,next1)M61=get(M5,'String');M51=get(M4,'String');M41=get(M3,'String');M31=get(M2,'String');M21=get(M1,'String');M11=get(shuru,'String');now=[M11,M21,M31 ,M41,M51,M61];set(now1,'String',now)set(shuru,'String',num2str(0))set(M1,'String',num2str(M11))set(M2,'String',num2str(M21))set(M3,'String',num2str(M31))set(M4,'String',num2str(M41))set(M5,'String',num2str(M51))set(M6,'String',num2str(M61))f1=xor(0,xor(str2num(M11),xor(str2num(M21),xor(str2num(M31),str2num(M61)))));f2=xor(0,xor(str2num(M21),xor(str2num(M31),xor(str2num(M51),str2num(M61)))));set(bianma1,'String',num2str(f1))set(bianma2,'String',num2str(f2))M611=get(M5,'String');M511=get(M4,'String');M411=get(M3,'String');M311=get(M2,'String');M211=get(M1,'String');M111=get(shuru,'String');next=[M111,M211,M311,M411,M511,M611];set(next1,'String',next)
end
function subButtonCallback(~, ~, zhuangtai1,shuru,M1,M2,M3,M4,M5,M6,now1,bianma1,bianma2,next1)% 读取子窗口文本框的内容zhuangtai=get(zhuangtai1,'String');f1=xor(str2num(zhuangtai(1)),xor(str2num(zhuangtai(3)),xor(str2num(zhuangtai(5)),xor(str2num(zhuangtai(7)),str2num(zhuangtai(13))))));f2=xor(str2num(zhuangtai(1)),xor(str2num(zhuangtai(5)),xor(str2num(zhuangtai(7)),xor(str2num(zhuangtai(11)),str2num(zhuangtai(13))))));set(bianma1,'String',num2str(f1))set(bianma2,'String',num2str(f2))% 将内容填充到另一个文本框中set(shuru,'String',num2str(zhuangtai(1)))set(M1,'String',num2str(zhuangtai(3)))set(M2,'String',num2str(zhuangtai(5)))set(M3,'String',num2str(zhuangtai(7)))set(M4,'String',num2str(zhuangtai(9)))set(M5,'String',num2str(zhuangtai(11)))set(M6,'String',num2str(zhuangtai(13)))now=[zhuangtai(3),zhuangtai(5),zhuangtai(7),zhuangtai(9),zhuangtai(11),zhuangtai(13)];set(now1,'String',now)next=[zhuangtai(1),zhuangtai(3),zhuangtai(5),zhuangtai(7),zhuangtai(9),zhuangtai(11)];set(next1,'String',next)
end
% 回调函数:随机生成数据源、编码和解码
function generateRandomData(~, ~,a,d,e,code,fs, Rb)data=get(gcf,'UserData');inputString1 = get(data.b, 'String');errors=str2num(inputString1);inputString2 = get(data.c, 'String');errors11=str2num(inputString2);len_in = 10; % 数据源长度dataBit = randi([0,1], 1, len_in);set(a,'String',num2str(dataBit))processData(dataBit,code,d,e,errors,errors11,fs, Rb);
end
% 回调函数:手动输入数据源
function manualInputData(~, ~,d,e, code,fs, Rb)data=get(gcf,'UserData');inputString = get(data.a, 'String');dataBit = str2num(inputString);if isempty(dataBit) || ~all(ismember(dataBit, [0, 1]))||length(inputString)~=19% 非法输入,清空文本框msgbox('请输入有效的10位二进制数据(0和1),每个数据用一个空格隔开', '错误', 'error');endinputString1 = get(data.b, 'String');errors=str2num(inputString1); %#ok<*ST2NM> inputString2 = get(data.c, 'String');errors11=str2num(inputString2);processData(dataBit, code,d,e,errors,errors11,fs, Rb);
end
% 更新手动输入文本框数据源
function updateManualInput(src, ~)inputString = get(src, 'String');inputArray = str2num(inputString);if isempty(inputArray) || ~all(ismember(inputArray, [0, 1]))||length(inputString)~=19% 非法输入,清空文本框set(src, 'String', '');end
end
%引入错误位置
function updateManualInput1(src, ~)inputString = get(src, 'String');inputArray = str2num(inputString);shun=0:32;if ~all(ismember(inputArray, shun))% 非法输入,清空文本框msgbox('请输入元素为0到32的数组,每个数据用一个空格隔开', '错误', 'error');set(src, 'String', '');end
end
%输入错误个数
function updateManualInput2(src, ~)inputString = get(src, 'String');inputArray = str2num(inputString);shun=0:32;if ~all(ismember(inputArray, shun))||length(inputArray)~=1% 非法输入,清空文本框msgbox('请输入一个0到32的数', '错误', 'error');set(src, 'String', '');end
end
% 处理数据
function updateManualInput3(src, ~)inputString = get(src, 'String');inputArray = str2num(inputString);if isempty(inputArray) || ~all(ismember(inputArray, [0, 1]))||length(inputString)~=13% 非法输入,清空文本框msgbox('请输入有效的7位二进制数据(0和1),每个数据用一个空格隔开', '错误', 'error');set(src, 'String', '');end
end
function processData(dataBit, code,d,e,errors,errors11,fs, Rb)K = 7; % 约束度CodeGenerator = [171, 133]; % 171 为8进制,对应为1 1 1 1 0 0 1 ,133为1 0 1 1 0 1 1len_in = length(dataBit);len_out = (len_in + K - 1) * 2;sample_num = fs / Rb; % 1个码元采样点数N = len_in * sample_num; % 总样点数dt = 1 / fs;t = 0:dt:(N - 1) * dt;N1 = len_out * sample_num;t1 = 0:dt:(N1 - 1) * dt;% 数据源进行卷积编码reg = zeros(1, 6);sourceBit = [dataBit, zeros(1, 6)];% 加6个尾比特len = length(sourceBit);first = zeros(1, len);second = zeros(1, len);code_data = zeros(1, 2 * len); %#ok<*PREALL> for n = 1:lenfirst(n) = xor(xor(xor(xor(sourceBit(n), reg(1)), reg(2)), reg(3)), reg(6));second(n) = xor(xor(xor(xor(sourceBit(n), reg(2)), reg(3)), reg(5)), reg(6));reg(6) = reg(5);reg(5) = reg(4);reg(4) = reg(3);reg(3) = reg(2);reg(2) = reg(1);reg(1) = sourceBit(n);code_data1(1, (n - 1) * 2 + 1 : 2 * n) = [first(n), second(n)];endcode_data1(1,(n-1)*2+1:2*n)=[first(n),second(n)];set(code,'String',num2str(code_data1))code_data=code_data1;if errors~=0errors1=randperm(32);worrys=[];for n=1:errorsworry=errors1(n);worrys(n)=worry;code_data1(1,worry)=~code_data1(1,worry);endelseworrys=[];for n=1:length(errors11)worry=errors11(n);worrys(n)=worry;code_data1(1,worry)=~code_data1(1,worry);endendTch_co_data=code_data1;%% 卷积解码len1=length(Tch_co_data);trellis = poly2trellis(K, CodeGenerator);decode_data = vitdec(Tch_co_data, trellis, len1/2,'trunc','hard');%维特比译码decodeBit=decode_data(1,1:length(decode_data)-6);set(d,'String',num2str(decodeBit))%% 统计误码数errorNum=sum(xor(dataBit,decodeBit));i=1;box=[];if errorNum==0for n=1:32different=xor(code_data(1,n),code_data1(1,n));if different==1box(i)=n;i=i+1;endendif length(box)~=0msgbox(['检查出第',num2str(box),'位出现错误,并成功纠错']);set(e,'String',num2str(box))elseset(e,'String','未引入错误')endelsemsgbox('纠错失败,可能是错误位数过多或出错位置过于密集,请重试','警告')set(e,'String','纠错失败')end%% 过采样source_data_s=zeros(1,len_in*sample_num);code_data_s=zeros(1,len_out*sample_num);code_data_s1=zeros(1,len_out*sample_num);decode_data_s=zeros(1,len_in*sample_num);for n=1:len_insource_data_s(1,(n-1)*sample_num+1:n*sample_num)=dataBit(1,n);decode_data_s(1,(n-1)*sample_num+1:n*sample_num)=decodeBit(1,n);endfor n=1:len_outcode_data_s(1,(n-1)*sample_num+1:n*sample_num)=code_data(1,n);%正常编码code_data_s1(1,(n-1)*sample_num+1:n*sample_num)=code_data1(1,n);%错误编码end%% 打印波形figure("Name",'2','NumberTitle', 'off', 'Position', [50, 40, 700, 350])subplot(411)plot(t,source_data_s);xlabel('时间(s)');ylabel('幅值(v)');ylim([-1,2]);title('数据源')subplot(412)plot(t1,code_data_s);xlabel('时间(s)');ylabel('幅值(v)');ylim([-0.2,1.2]);title('卷积码编码后数据')subplot(413)plot(t1,code_data_s1);xlabel('时间(s)');ylabel('幅值(v)');ylim([-0.2,1.2]);title('卷积码编码出错数据')subplot(414)plot(t,decode_data_s);xlabel('时间(s)');ylabel('幅值(v)');ylim([-1,2]);title('卷积码解码数据')
end
end

 

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

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

相关文章

堡垒机的演变过程

堡垒机的概念源自跳板机&#xff08;前置机&#xff09;。早在20世纪90年代末21世纪初期&#xff0c;部分中大型企业为了能对运维人员的远程登录进行集中管理&#xff0c;会在机房部署一台跳板机。跳板机其实就是一台unix/windows操作系统的服务器。并且所有运维人员都需要先远…

疯狂刷屏的“小作文”事件,看到Agent智能体成释放生产力与创新力必然

最近&#xff0c;东方甄选“连续剧”迎来了“圆满”结局。“流量密码”董宇辉新身份连跳三级&#xff0c;被任命为新东方教育科技集团董事长文化助理、兼任新东方文旅集团副总裁&#xff0c;此前&#xff0c;发布18日俞敏洪和董宇辉直播预告海报&#xff0c;董已升为东方甄选高…

Floyd(弗洛伊德)算法总结

知识概览 Floyd算法适合解决多源汇最短路问题&#xff0c;其中源点是起点&#xff0c;汇点是终点。时间复杂度是。 例题展示 题目链接 活动 - AcWing 系统讲解常用算法与数据结构&#xff0c;给出相应代码模板&#xff0c;并会布置、讲解相应的基础算法题目。https://www.acw…

Spring高手之路-Spring初了解

目录 什么是Spring Spring 框架的主要功能 Spring体系结构 核心容器&#xff08;Core Container&#xff09; 数据访问与集成&#xff08;Data Access/Integration&#xff09; Web 层&#xff08;Web Layer&#xff09; AOP 与功能扩展&#xff08;AOP and Instrumenta…

pake协议传输文件magic-wormhole

pake协议传输文件magic-wormhole 1 magic-wormhole简介其他介绍 2 安装magic-wormhole3 使用示范发送文件指定虫洞码长度 接收文件 1 magic-wormhole简介 16.7k star 强推&#xff0c;丝滑、简洁、安全的开源工具——magic-wormhole 项目地址&#xff1a;https://github.com/…

Latex正文引用公式编号,以防公式调整,正文编号对应错误

一、背景 最近在改论文时&#xff0c;需要调整某些公式顺序或添加新的公式&#xff0c;导致正文中的公式引用序号错误。 这里特记录解决方法&#xff0c;即在\begin{eqnarray}后添加lable标签&#xff0c;正文不再是手动输入序号&#xff0c;而是使用命令\eqref{}。 具体如下…

Flink 输出至 Redis

【1】引入第三方Bahir提供的Flink-redis相关依赖包 <!-- https://mvnrepository.com/artifact/org.apache.bahir/flink-connector-redis --> <dependency><groupId>org.apache.bahir</groupId><artifactId>flink-connector-redis_2.11</arti…

初中女教师退休年龄是多少岁

“时光荏苒&#xff0c;岁月如梭。作为老师的你&#xff0c;是否已经开始思考自己的退休生活&#xff1f;是悠然自得地享受晚年&#xff0c;还是继续在教育的道路上发光发热&#xff1f;而无论你的选择如何&#xff0c;了解退休年龄的规定都是你规划未来的重要一环。 女教师的退…

nginx+lua+redis实践

nginxluaredis实践 1.概述 nginx、lua访问redis的三种方式&#xff1a; HttpRedis模块。 指令少&#xff0c;功能单一&#xff0c;适合简单的缓存。只支持get 、select命令。 HttpRedis2Module模块。 功能强大&#xff0c;比较灵活。 lua-resty-redis库 OpenResty。api…

史上最详细的JAVA学生信息管理系统(MySQL实现)

一、项目介绍 为了巩固Java的学习写了一个基于MVC设计模式的学生管理系统。 简单介绍一下MVC设计模式&#xff1a; 1、M也就是Model 模型层&#xff08;也叫数据层&#xff09;主要是通过这个类来进行数据的操作。 2、V是Views 视图层&#xff0c;主要就是来显示页面信息。 3、…

开发辅助一(网关gateway+ThreadLocal封装用户信息+远程调用+读取配置文件+统一异常处理)

网关gateway模块 ①、配置文件&#xff0c;添加各个服务模块的路由路径 gateway:routes:-id: server-cart #微服务名称uri: lb://service-cart #负责均衡predicates:- Path/api/order/cart/**ThreadLocal ①、定义一个工具类 public class AuthContextUtil{private static…

Facebook自动回复脚本编写教程

在数字时代&#xff0c;社交媒体已经成为人们交流和建立联系的重要渠道&#xff0c;Facebook作为全球最大的社交媒体平台之一&#xff0c;拥有数十亿的用户&#xff0c;为企业和个人提供了无限的社交可能性。 然而&#xff0c;对于企业和个人来说&#xff0c;在Facebook上保持…

脱壳后多dex文件合并进apk反编译

我们遇到加固后的apk&#xff0c;在脱壳后有很多dex文件&#xff0c;有时候我们只反编译有关键代码的dex会存在一些上下文代码找不到的情况&#xff0c;这时候我们需要多dex一起反编译&#xff0c;并且需要同步看看资源文件怎么办&#xff1f;&#xff1a; 我们可以把多dex塞回…

华为eNSP入门实验,Vlan配置,路由配置,用户模式,链路聚合

文章目录 一、同一交换机下的PC通信二、不交换机下的PC通信三、配置静态路由通信四、路由器rip协议配置五、路由器ospf协议配置六、单臂路由七、通过三层交换机使不同的Vlan能连通八、设备consolo密码模式九、设备consolo用户密码模式&#xff08;AAA模式&#xff09;十、Telne…

虚拟机服务器中了lockbit2.0/3.0勒索病毒怎么处理,数据恢复应对步骤

网络技术的不断发展也为网络威胁带来了安全隐患&#xff0c;近期&#xff0c;对于许多大型企业来说&#xff0c;许多企业的虚拟机服务器系统遭到了lockbit2.0/3.0勒索病毒攻击&#xff0c;导致企业所有计算机系统瘫痪&#xff0c;无法正常工作&#xff0c;严重影响了企业的正常…

Python能做大项目(6)Poetry -- 项目管理的诗和远方之一

[Poetry] 是一个依赖管理和打包工具。Poetry 的作者解释开发 Poetry 的初衷时说&#xff1a; 通过前面的案例&#xff0c;我们已经提出了一些问题。但不止于此。 当您将依赖加入到 requirements.txt 时&#xff0c;没有人帮你确定它是否与既存的依赖能够和平共处&#xff0c;这…

电脑监控软件排行榜(电脑监控软件隐藏安装)

在当今数字化时代&#xff0c;电脑已经成为我们工作、学习和生活中不可或缺的工具。然而&#xff0c;随着电脑使用的普及&#xff0c;电脑监控软件也逐渐浮出水面。这类软件可以对电脑进行全方位的监控和管理&#xff0c;保护电脑安全、提高工作效率。 本文将为您介绍电脑监控…

Unity is running with Administrator privileges, which is not supported

Unity is running with Administrator privileges, which is not supported 如果还是弹出CMD窗口提示输入密码&#xff0c;但无法怎样都无法输入&#xff0c;请关闭窗口&#xff0c;然后右键快捷方式管理员运行一次。 ----------分割线---------- 为什么这样做&#xff1f; 很…

【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版

第一章 简介 太赫兹波是介于微波和光波之间的光谱区域&#xff0c;频率从 0.1THz ~ 10THz 之间&#xff0c;波长在 3mm ~ 30μm 之间。提供大块连续的频带范围以满足对 Tbit/s 内极高数据传输速率的需求&#xff0c;使该区域成为下一代无线通信&#xff08;6G&#xff09;的重…

数字化时代的探索:学生为何对数据可视化趋之若鹜?

随着信息时代的迅猛发展&#xff0c;数据已经成为我们生活中不可或缺的一部分。而在这个数字化浪潮中&#xff0c;越来越多的学生开始关注数据可视化&#xff0c;这并非偶然。下面&#xff0c;我就从可视化从业者的角度出发&#xff0c;简单聊聊为什么越来越多的学生开始关注数…