SSB调制与解调(Simulink&Matlab)
题目:基于Simulink的SSB信号调制与解调仿真
一、实验目的与要求
- 目的:学习SSB信号的调制与解调仿真
- 要求:
- 具有MATLAB的仿真结果并附上代码
- 具有基于Simulink的模块的模拟仿真结果,并附上设计模块图
- 结果清晰充分
- 包含实现结果分析和总结
二、原理
- 单边带调制是幅度调制的一种,由调制信号去控制高频载波的幅度,使之随调制信号做线性变化的过程。这里的
线性
并不意味着已调信号与调制信号之间符合线性变换关系,事实上,任何调制过程都是非线性变换过程。 - SSB信号是将DSB信号中的一个边带滤掉而形成的,最直接的方法是滤波法。所谓滤波法,就是通过产生一个双边带信号,然后让其通过一个边带滤波器,即可得到单边带信号。
其中,
DSB信号为:\(s_{DSB}(t)=m(t)cosw_ct\)
DSB信号频谱为:\(S_{DSB}(t)=\frac{1}{2}[M(w-w_c)+M(w+w_c)\)
SSB信号为:\(s_{SSB}(t)=s_{DSB}(t)*h_{SSB}(t)\)
SSB信号频谱为:\(s_{SSB}(t)=\frac{1}{2}[M(w-w_c)+M(w+w_c)H_{SSB}(t)\)
解调采用相干解调,也叫同步检波。解调与调制的实质一样,均是频谱搬移。调制是把基带信号的频谱搬移到载频的位置,这一过程可以通过一个相乘器与载波相乘来实现。解调是调制的反过程,即把在载波位置的已调信号的频谱搬回到原始基带位置,因此同样可以使用相乘器与载波相乘来实现。
即: \(S_p(t)=S_m(t)cosw_ct\) ,其中,\(cosw_ct\)为相干载波,\(S_m(t)\)为SSB信号
实际上,各种线性已调信号在传输过程中不可避免的要受到噪声的干扰,所以在解调过程中需要解调器的抗噪声性能足够的强,也就是信噪比增益越高,解调器抗噪声性能越好。
其中信噪比增益为:\(G=\frac{S_o/N_o}{S_i/N_i}\)
利用滤波法展示单边带信号框图
单边带信号频谱图(分上边带、下边带)
相干解调框图
线性调制相干解调是接收系统的一般模型
其中\(n(t)\)为加性高斯白噪声\(s_m(t)\)为已调信号,BPF为带通滤波器,解调器为相干解调器;\(n_i(t)\)为窄带高斯噪声,\(m_o(t)\)为输出的有用信号,\(n_o(t)\)为噪声
三、实验内容
一、基于Simulink的SSB调制实验(纯正弦)
图注:基于Simulink的SSB调制模块图
模块结构:
- 输入: 一个2Hz的正弦基带信号和一个20Hz的正弦载波信号,其中基带信号为\(2sin(4\pi)\),载波信号为\(2sin(40\pi)\)
- 边带滤波器: 采用的是椭圆模拟滤波器,过渡带比较窄。其中低通滤波器的通带边界频率为20-2=18Hz,高通滤波器的通带边界频率为20+2=22Hz,两个滤波器的通带最大衰减均为0.1dB,阻带最小衰减均为80dB
图注:第一个波形为:消息信号(2Hz)第二个波形为:载波信号 (20Hz)
第三个波形为:DSB已调信号
- 从上图可以看到DSB波形,在过零点处有相位翻转180°的现象,幅值为4
图注:黄色波形为:基带信号
蓝色波形为:DSB已调信号
- 可以看到基带信号经过DSB信号过零点处
图注:第一个波形为:下边带信号(LSSB)
第二个波形为:上边带信号(USSB)
图注:基带信号频谱
- 可以看到一个频率为2Hz,幅值为2的正弦信号频谱
图注:载波信号频谱
- 可以看到一个频率为20Hz,幅值为2的正弦信号频谱
图注:DSB信号频谱
- 可以看到有两个边带,其中下边带主要频率成分为18Hz,幅值为2;上边带主要频率成分为22Hz,幅值为2;
图注:LSB信号频谱
- 可以看到上边带基本没有了,主要频率成分为18Hz,幅值为2的下边带信号频谱
图注:USB信号频谱
- 可以看到下边带基本没有了,主要频率成分为22Hz,幅值为2的上边带信号频谱
小结: 通过把两个信号直接相乘来产生DSB信号,这种调制会把基带信号的频谱搬移到载波信号的频谱附近,形成对称的上下边带,所以从信息传输的角度考虑,仅需要任一边带就够了,所以通过适当的低通滤波器取得下边带,适当的高通滤波器取得上边带。这里原本的滤波器采用Butterworth滤波器的设计方式,但由于过渡带不够窄,即不够陡峭,总是会残留一部分边带,再经过查阅资料后选择了过渡带比较窄的椭圆滤波器,这样就基本滤除了另一个边带。
二、基于Simulink的SSB相干解调实验(纯正弦)
图注:基于Simulink的SSB解调模块图
模块结构:
- 输入: 一个2Hz的正弦基带信号和一个20Hz的正弦载波信号,其中基带信号为\(2sin(4\pi)\),载波信号为\(2sin(40\pi)\)
- 边带滤波器: 采用的是椭圆模拟滤波器,过渡带比较窄。其中低通滤波器的通带边界频率为20-2=18Hz,高通滤波器的通带边界频率为20+2=22Hz,两个滤波器的通带最大衰减均为0.1dB,阻带最小衰减均为80dB
- 相干载波: \(2sin(40\pi)\)与输入时的载波信号同频同相
- 低通滤波器 : 通带边界频率为40Hz的椭圆模拟低通滤波器
图注:波形1为:相干载波(20Hz)
波形2为:相干载波与LSB信号相乘后的波形
波形3为:相干载波与USB信号相乘后的波形
- 可以很明显看到波形2和波形3基本是相同的
图注:波形1为:相干载波与LSSB信号相乘后经过低通后的波形
波形2为:相干载波与USSB信号相乘后经过低通后的波形
- 可以看到图中标注的两个信号再经过LPF后的波形一致,且频率为2Hz,幅值为2,与基带信号一致,说明上下边带所含的信息一样,解调成功。
图注:相干载波与LSB信号相乘后的波形频谱
- 相干载波与LSB信号相乘后的波形频谱在20-18=2Hz处有一个信号,在18+20=38Hz处也有一个信号,符合DSB调制的规律
图注:相干载波与USB信号相乘后的波形频谱
- 相干载波与USB信号相乘后的波形频谱在-20-(-22)=2Hz处有一个信号,在20+22=42Hz处也有一个信号,符合DSB调制的规律。对比上面相干载波与LSB信号相乘后的波形发现,在2Hz处都有一个相同幅值的信号。
图注:相干载波与LSB/USB信号相乘后经过低通后的波形频谱
- 可以看到相干载波与LSB/USB信号相乘后经过低通后的波形频谱都是一样的,为频率2Hz,幅值为2的正弦信号。
小结: 通过从DSB信号经过单边带滤波器取得任一边带形成的SSB信号,与相干载波相乘后,形成的信号基本一样,再通过适当的LPF后就可得到基带信号。其中,相干载波要与DSB调制时的载波同频同相,从步骤上来看与DSB调制本质上一样。最后的结果说明用上边带或下边带都可以解调出基带信号。
三、基于Matlab的SSB调制
- 实验代码
%DSB design
clear all;
Fs=1024;%采样频率
t=0:1/Fs:2;%信号长度
Am=2;%基带信号幅值
Ac=2;%载波信号幅值
fm=2;%基带信号频率
fc=20;%载波信号频率
wm=2*pi*fm;%基带信号模拟角频率
wc=2*pi*fc;%载波信号模拟角频率
Sm=Am*sin(wm*t);%基带信号
Sc=Ac*sin(wc*t);%载波信号
SDSB=Sm.*Sc;%DSB已调信号
spec_SDSB=fft(SDSB,2*Fs);%对DSB信号做2048点FFT,做频谱分析
mag_SDSB=abs(spec_SDSB);%计算DSB频响幅值
fdsb=(0:2*Fs-1)./2;%真实频率
figure(10);
plot(fdsb,mag_SDSB);grid on;%显示DSB频谱
title('DSB Spectrum');
set(gca,'xlim',[10,30]);
figure(1);
plot(Sm);grid on;%显示基带信号
title('Base Sign');
set(gca,'xlim',[0,1000]);
figure(2);
plot(Sc);grid on;%显示载波信号
title('Carry Sign');
set(gca,'xlim',[0,1000]);
figure(3);
plot(SDSB);grid on;%显示DSB信号
title('DSB Wave');
set(gca,'xlim',[0,1000]);
%filter design
N=8;%椭圆滤波器的阶数
[BL,AL]=ellip(N,0.1,80,(fc-fm)/(Fs/2),'low');%设计椭圆低通滤波器
%其中通带最大衰减为0.1,阻带最小衰减为80,通带边界频率为20-2=18Hz
[H1,F1]=freqz(BL,AL,Fs/2,Fs);%获取滤波器的频响函数
[BH,AH]=ellip(N,0.1,80,(fc+fm)/(Fs/2),'high');%设计椭圆高通滤波器
%其中通带最大衰减为0.1,阻带最小衰减为80,通带边界频率为20+2=22Hz
[H2,F2]=freqz(BH,AH,Fs/2,Fs);%获取滤波器的频响函数
figure(4);
plot(F1,20*log10(abs(H1)));grid on;%显示椭圆低通滤波器的频响
title('Ellips low pass filter');
set(gca,'xlim',[0,100]);
figure(5);
plot(F2,20*log10(abs(H2)));grid on;%显示椭圆高通滤波器的频响
title('Ellips hign pass filter');
set(gca,'xlim',[0,100]);
%SSB design
LSSB=filter(BL,AL,SDSB);%DSB经过Ellips LPF后取得下边带
USSB=filter(BH,AH,SDSB);%DSB经过Ellips HPF后取得上边带
figure(6);
plot(LSSB);grid on;%显示下边带波形
title('LSSB Wave');
set(gca,'xlim',[0,1000]);
figure(7);
plot(USSB);grid on;%显示上边带波形
title('USSB Wave');
set(gca,'xlim',[0,1000]);
spec_LSSB=fft(LSSB,2*Fs);%对LSSB信号做2048点FFT
spec_USSB=fft(USSB,2*Fs);%对USSB信号做2048点FFT
mag_LSSB=abs(spec_LSSB);%计算LSSB频响幅值
mag_USSB=abs(spec_USSB);%计算USSB频响幅值
fssb=(0:2*Fs-1)./2;
figure(8);
plot(fssb,mag_LSSB);grid on;%显示LSSB频响幅值
title('LSSB Spectrum');
set(gca,'xlim',[10,30]);
figure(9);
plot(fssb,mag_USSB);grid on;%显示USSB频响幅值
title('USSB Spectrum');
set(gca,'xlim',[10,30]);
|
|
- ·基带信号: 频率为2Hz,幅值为2,其时域表达式为\(2sin(4\pi)\)
- ·载波信号: 频率为20Hz,幅值为2,其时域表达式为\(2sin(40\pi)\)
图注:DSB已调信号波形
- 从上图可以看到DSB波形,在过零点处有相位翻转180°的现象,幅值为4
图注:DSB已调信号频谱
- 可以看到有两个边带,其中下边带频率为18Hz,幅值为2;上边带频率为22Hz,幅值为2,因为做2048点FFT,所以这里的幅值是2048。
图注:椭圆低通滤波器频响
- 可以看到通带边界频率为18Hz,通带最大衰减基本为0,阻带衰减最小为80,过渡带比较窄,有较大的陡峭度,可以很好的滤除上边带
图注:椭圆高通滤波器频响
- 可以看到通带边界频率为22Hz,通带最大衰减基本为0,阻带衰减最小为80,过渡带比较窄,有较大的陡峭度,可以很好的滤除下边带
|
|
- 两个边带的波形基本一致,不过可以看到上边带信号频率明显比下边带频率要高,且反相
|
|
- 下边带信号频谱: 主要频率成分集中在18Hz处,上边带基本被滤除
- 上边带信号频谱: 主要频率成分集中在22Hz处,下边带基本被滤除
小结: 通过把两个信号直接相乘来产生DSB信号,这种调制会把基带信号的频谱搬移到载波信号的频谱附近,形成对称的上下边带,所以从信息传输的角度考虑,仅需要任一边带就够了,所以通过适当的低通滤波器取得下边带,适当的高通滤波器取得上边带。这里原本的滤波器采用Butterworth滤波器的设计方式,但由于过渡带不够窄,即不够陡峭,总是会残留一部分边带,再经过查阅资料后选择了过渡带比较窄的椭圆滤波器,这样就基本滤除了另一个边带。
四、基于Matlab的SSB相干解调
- 实验代码
%SSB信号与上面SSB调制过程的信号一致
%Demodulation SSB
coherent_carrier=Sc;%相干载波与输入载波一致
mul_LSSB_cc=coherent_carrier.*LSSB;%相干载波与下边带相乘
mul_USSB_cc=coherent_carrier.*USSB;%相干载波与下边带相乘
figure(4);
plot(mul_LSSB_cc);grid on;%显示相干载波与下边带相乘后的波形
title('mul_LSSB_cc');
set(gca,'xlim',[500,2000]);
figure(5);
plot(mul_USSB_cc);grid on;%显示相干载波与上边带相乘后的波形
title('mul_USSB_cc');
set(gca,'xlim',[500,2000]);
spec_LSSB_cc=fft(mul_LSSB_cc,2*Fs);%对相干载波与下边带相乘后的信号做FFT
spec_USSB_cc=fft(mul_USSB_cc,2*Fs);%对相干载波与上边带相乘后的信号做FFT
mag_LSSB_cc=abs(spec_LSSB_cc);%求频响幅度
mag_USSB_cc=abs(spec_USSB_cc);
fdssb=(0:2*Fs-1)./2;%真实频率
figure(6);
plot(fdssb,mag_LSSB_cc);grid on;%显示相干载波与下边带相乘后的波形频谱
title('DLSSB Spectrum');
set(gca,'xlim',[0,50]);
figure(7);
plot(fdssb,mag_USSB_cc);grid on;%显示相干载波与上边带相乘后的波形频谱
title('DUSSB Spectrum');
set(gca,'xlim',[0,50]);
%pass the LPF
LPF_LSSB=filter(BL,AL,mul_LSSB_cc);
%把相干载波与下边带相乘后的信号通过LPF
LPF_USSB=filter(BL,AL,mul_USSB_cc);
%把相干载波与上边带相乘后的信号通过LPF
figure(8);
plot(LPF_LSSB);grid on;%显示相干载波与下边带相乘后信号经过LPF后的波形
title('LPF_LSSB');
set(gca,'xlim',[500,2000]);
figure(9);
plot(LPF_USSB);grid on;%显示相干载波与上边带相乘后信号经过LPF后的波形
title('LPF_USSB');
set(gca,'xlim',[500,2000]);
spec_LPF_LSSB=fft(LPF_LSSB,2*Fs);
%对相干载波与下边带相乘后信号经过LPF后的信号做FFT
spec_LPF_USSB=fft(LPF_USSB,2*Fs);
%对相干载波与上边带相乘后信号经过LPF后的信号做FFT
mag_LPF_LSSB=abs(spec_LPF_LSSB);%求频响幅度
mag_LPF_USSB=abs(spec_LPF_USSB);
figure(10);
plot(fdssb,mag_LPF_LSSB);grid on;
%显示相干载波与下边带相乘后信号经过LPF后的波形频谱
title('DLSSB Spectrum');
set(gca,'xlim',[0,50]);
figure(11);
plot(fdssb,mag_LPF_USSB);grid on;
%显示相干载波与上边带相乘后信号经过LPF后的波形频谱
title('DUSSB Spectrum');
set(gca,'xlim',[0,50]);
figure(12);
plot(Sm);grid on;
title('msg sign');
set(gca,'xlim',[500,2000]);
图注:相干载波与LSB相乘后的信号波形
图注:相干载波与LSB相乘后的信号频谱
- 相干载波与LSB信号相乘后的波形频谱在20-18=2Hz处有一个信号,在18+20=38Hz处也有一个信号,符合DSB调制的规律
图注:相干载波与USB相乘后的信号波形
图注:相干载波与USB相乘后的信号频谱
- 相干载波与USB信号相乘后的波形频谱在-20-(-22)=2Hz处有一个信号,在20+22=42Hz处也有一个信号,符合DSB调制的规律。对比上面相干载波与LSB信号相乘后的波形发现,在2Hz处都有一个相同幅值的信号。
图注:相干载波与LSB/USB相乘后经过LPF的信号波形
- 相干载波与LSB和USB信号相乘后经过LPF的波形是基本一致的
图注:相干载波与LSB/USB相乘后经过LPF的信号频谱
- 相干载波与LSB和USB信号相乘后经过LPF的信号频谱是基本一致的
图注:基带信号波形
- 相干载波与LSB和USB信号相乘后经过LPF的信号与基带信号基本一致的,说明用上边带或下边带都可以解调出基带信号
五、基于Simulink的SSB带加性噪声的相干解调(下边带)
图注:基于Simulink的SSB带加性噪声的相干解调模块图
模块结构:
- 输入: 一个2Hz的正弦基带信号和一个20Hz的正弦载波信号,其中基带信号为\(2sin(4\pi)\),载波信号为\(2sin(40\pi)\)
- 边带滤波器: 采用的是椭圆模拟滤波器,过渡带比较窄。其中低通滤波器的通带边界频率为20-2=18Hz,滤波器的通带最大衰减均为0.1dB,阻带最小衰减均为80dB
- 加性噪声: 直接加噪声功率为0.01的带限白噪声,就不用带通滤波器了
- 相干载波: \(2sin(40\pi)\)与输入时的载波信号同频同相
- 低通滤波器 : 通带边界频率为2Hz的椭圆模拟低通滤波器
整体上和上面的SSB调制所用的信号和滤波器一样
图注:带限白噪声频谱
图注:下边带LSB加上带限白噪声时域波形
图注:下边带LSB加上带限白噪声的频谱
- 可以看到新的信号在原来LSB频谱上多了很多的噪声频谱分量
图注:下边带LSB加上带限白噪声后与相干载波相乘的波形
图注:下边带LSB加上带限白噪声后与相干载波相乘的波形频谱
- 可以看到下边带LSB加上带限白噪声后与相干载波相乘的波形频谱在20-18=2Hz处和20+18=38Hz处都有幅度较大频谱分量和上面无噪声时的情况一样。
图注:相干解调后的信号经过LPF后的信号波形
- 可以看到整体上与原基带信号相比,幅度上会有一些畸变,频率基本一样,为2Hz
图注:相干解调后的信号经过LPF后的信号频谱
- 可以看到,经过LPF后的信号频谱的主要分量就集中在2Hz处,也就是说可以解调出基带信号
四、实验总结
本次实验学习了采用滤波法实现SSB信号的调制与解调,在仿真过程中遇到许多的问题,不过通过查阅资料,询问老师和同学,最终得到了解决,现总结如下。
在用Simulink仿真调制与解调过程时,需要分为两个模块,一个为调制模块,另一个为解调模块。为了确认上下边带是否真的同时可以恢复基带信号,所以我就对两个边带同时进行调制与解调,把DSB信号通过低通滤波器得到下边带,通过高通滤波器得到上边带,然后分别与相干载波相乘后通过LPF,最后进行对比发现上下边带均能恢复基带信号。在仿真过程中会遇到显示上的问题,需要信号采样时间间隔保持一致,在那个频谱分析仪前还要加个零阶保持器,采样间隔需要和前面信号的一致。在做滤波器设计时,最先使用的巴特沃斯滤波器,由于过渡带比较宽,在进行边带滤波时,总会残留一些边带,所以最后选择了边带窄的椭圆滤波器,实现了比较好的边带滤波效果。 而matlab代码的仿真基本思路是一样的。
在用Simulink做SSB带加性噪声的仿真调制过程中,因为在实际中,已调信号在传输过程中总会受到噪声干扰,所以只仿真了解调过程。按照书本上的原理,加性噪声为高斯白噪声,然后经过BPF后进行相干解调,但由于版本问题,没有高斯白噪声模块,所以我这里就直接用了带限白噪声,相当于高斯白噪声通过BPF后的带限白噪声,然后进行相干解调,解调出来的信号,与基带信号相比,会有不少的畸变,当然因为实际情况更为复杂,所以我的仿真模块一些参数的设计并不能满足实际,所以这是我需要提升的。
SSB调制与解调(Simulink&Matlab)的更多相关文章
- 【Matlab】BFSK的调制与解调仿真
写在前面 本篇是[Matlab]BASK的调制与解调仿真的下篇,考虑到阅读体验,故另开一篇分享将BFSK的调制与解调仿真. 索引 写在前面 一.BFSK的调制 1.1 异频载波生成 1.2 信号合并 ...
- DVB-C系统中QAM调制与解调仿真
本文简单记录一下自己学习<通信原理>的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序.自己一直是研究"信源"方面的东西,所以对&q ...
- 5G 调制与解调
调制,就是将原始信号转换为适合在信道中传输的形式的一种过程,在无线通信中,调制一般均指载波调制,而解调则是调制的逆过程,即将原始信号从已调信号中恢复出来. 进行载波调制,主要为实现以下目标: 1)在无 ...
- <转载>调制与解调电路详解
原文链接:http://www.elecfans.com/analog/20120509270848_4.html 调幅和检波电路 广播和无线电通信是利用调制技术把低频声音信号加到高频信号上发射出去的 ...
- matalb 产生信号源 AM调制解调 FM调制解调
%%%%%%%%%%%%%%%%%%%%%%%%%%% %AM调制解调系统 %%%%%%%%%%%%%%%%%%%%%%%%%%% clear; clf; close all Fs=800000;%采 ...
- 通信原理实践(二)——幅度调制
一.幅度调制,并画出时域和频域波形 1.代码如下: function [ p_n ] = AM_func( N,fs,fm,Am,fc,Ac,Ma ) %UNTITLED 此处显示有关此函数的摘要 % ...
- 以神经网络使用为例的Matlab和Android混合编程
由于需要在一个Android项目中使用神经网络,而经过测试发现几个Github上开源项目的训练效果就是不如Matlab的工具箱好,所以就想在Android上使用Matlab神经网络代码(可是...) ...
- FPGA与数字信号处理
过去十几年,通信与多媒体技术的快速发展极大地扩展了数字信号处理(DSP)的应用范围.眼下正在发生的是,以更高的速度和更低的成本实现越来越复杂的算法,这是针对高级信息服更高带宽以及增强的多媒体处理能力等 ...
- RFID-RC522、FM1702SL、M1卡初探
catalogue . 引言 . RC522芯片(读卡器)简介 . FM1702SL芯片(读卡器)简介 . RFID M1卡简介 . 读取ID/序列号(arduino uno.MFRC522芯片 Ba ...
- 开源BTS产品中存在多处漏洞,攻击者或可劫持手机通讯基站
前言 在过去的几周时间里,我从多个方面对GSM的安全性进行了调查和研究,例如GSM通信协议中存在的漏洞.除此之外,我还对目前世界上应用最为广泛的BTS软件进行了安全审计.在这篇文章中,我将会给大家介绍 ...
随机推荐
- Java语言发展史-计算机进制转换
Java语言发展史 java的诞生 在1991年时候,James Gosling在Sun公司的工程师小组想要设计这样一种主要用于像电视盒这样的消费类电子产品的小型计算机语言. 这些电子产品有一个共同的 ...
- 内存概述-java虚拟机的内存划分
内存概述 内存是计算机中的重要原件,临时存储区域,作用是运行程序,我们编写写的程序是存放在硬盘中的,在硬盘中的程 序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存. Java虚拟机要运行程 ...
- immutable.js学习笔记(六)----- OrderedSet
一.OrderedSet 二.普通Set 与 OrderedSet 注意:普通Set并不是严格的一定是升序的 三.takeWhile 四.升序 sort valueA - valueB 五.降序 va ...
- C# 处理实体类赋值(获取嵌套类型,支持list 自定义类型)
public static T AESEncrypt<T>(T obj) where T : class { if (obj == null) { return obj; } var pr ...
- 经典this指向问题
代码如下 function f1() { this.p = function(){ // 这里 this 跟的是p这个func,谁调用p,就跟谁 console.log(this); } return ...
- P14_协同工作-开发者的权限说明以及如何维护项目成员
不同项目成员对应的权限 开发者的权限说明 开发者权限:可使用小程序开发者工具及对小程序的功能进行代码开发 体验者权限:可使用体验版小程序 登录权限:可登录小程序管理后台,无需管理员确认 开发设置:设置 ...
- UBUNTU16.04卸载安装protobuf
1.卸载 sudo apt-get remove libprotobuf-dev which protoc 然后删除路径即可 2.安装 sudo apt-get install autoconf au ...
- .NET周报 【2月第3期 2023-02-18】
国内文章 2023 年.NET仓库社区年度调查已经开始 https://mp.weixin.qq.com/s/H9xUAO_yAdqm5CIHBs_eqA 中国地区是 .NET 的一个重要的市场和社区 ...
- Hexo系列(四):Hexo写文章
作者:独笔孤行 官网: http://anyamaze.com 公众号:云实战 可以执行下列命令来创建一篇新文章或者新的页面. $ hexo new [layout] <title&g ...
- Eureka高可用集群服务端和客户端配置
微服务应用中,生产环境一般都需要保障服务注册中心的高可用!高可用也分好几个等级,例如:同数据中心(可用Zone区)高可用-->同地域(Region)跨数据中心(可用Zone区)高可用--> ...