通信原理学习笔记5-1:数字调制——脉冲成形滤波器选择(码间串扰、Nyquist准则、升余弦滚降滤波器、眼图)
数字调制分为三步:
- 比特映射:比特bkb_kbk映射到符号InI_nIn(一个复数,即IQ调制的复数星座点,即IQ两路实信号),符号可以取MMM种离散值,称为MMM元的,一个多元符号承载多个比特;
一系列符号组成了一个冲激函数序列I(t)=∑n=−∞∞Inδ(t−nTs)I(t)=\sum_{n=-\infty}^{\infty}I_n\delta(t-nT_s)I(t)=∑n=−∞∞Inδ(t−nTs) - 脉冲成形:每个符号对应产生某种波形,所有符号的波形按时间顺序叠加
符号序列经过成形滤波器g(t)g(t)g(t),输出电路中的连续波形,即基带信号s(t)=I(t)∗g(t)=∑n=−∞∞Ing(t−nTs)s(t)=I(t)*g(t)=\sum_{n=-\infty}^{\infty}I_ng(t-nT_s)s(t)=I(t)∗g(t)=n=−∞∑∞Ing(t−nTs)
使用不同成形脉冲的效果不同:
使用矩形脉冲,则基带信号为不断变化的矩形电平,经过上变频后得到理想正弦波;
然而,实际中常使用升余弦滚降滤波器作为成形滤波器,时域基带信号更平滑(而非矩形电平),从而上变频后能够抑制带外泄露
- 上变频:将基带信号s(t)s(t)s(t)搬移至载波,这部分和模拟调制类似
在实际中,我们传输复信号s(t)s(t)s(t)(即星座点),这一部分等效实现为IQ调制(用实频带信号传输复基带信号)
下面先接收数字调制中遇到的两个问题,然后介绍「脉冲成形」是如何解决这两个问题的
问题:带外泄露
带外泄露:信号超出了规定的工作频带,从而可能影响工作在相邻频段的系统;
另外,带宽过大时,经过带限信道后,信号也会变形,从而产生误码
- 通信中信道的频带资源有限,因此要严格控制带外泄露,具体而言也就是通过控制基带信号的带宽,从而控制已调信号的带宽(频谱搬移关系)
- 脉冲成形的作用之一是控制带外泄露,下面将看到,选择不同的成形滤波器,得到的信号频谱是不同的
问题:码间串扰
解调时,对当前符号的判决不利的两个因素是「噪声」和「码间串扰ISI」,码间串扰ISI就是其他符号(的时域拖尾)对当前采样时刻的干扰
脉冲成形后,基带信号=时域上不同时刻的一系列脉冲信号的叠加,如果一个码元 / 脉冲 达到最大幅值时,其他所有码元幅值刚好为0,则在此时进行采样判决,码元直接不会相互影响,这就是无码间串扰
无码间串扰:Nyquist准则
基带信号是脉冲成形的波形的叠加(这里假设接收信号与发射信号相同):r(t)=s(t)=∑n=−∞∞Ing(t−nTs)r(t)=s(t)=\sum_{n=-\infty}^{\infty}I_ng(t-nT_s)r(t)=s(t)=n=−∞∑∞Ing(t−nTs)
解调时,对r(t)r(t)r(t)做TsT_sTs的等间隔采样(每个符号抽样判决一次),采样结果为r(nTs)r(n T_{s})r(nTs),那么无码间串扰,就是希望r(nTs)=Inr(n T_{s})=I_nr(nTs)=In(也就是说,采样时不希望受到其他时刻符号值的影响)
系数InI_nIn只影响r(nTs)r(n T_{s})r(nTs)的幅度,将其忽略,只关注脉冲成形函数g(t)g(t)g(t),那么无码间串扰就是 要求g(t)g(t)g(t)在特殊位置的拖尾为0,即g(nTs)={1n=00n≠0g\left(nT_{s}\right)=\left\{\begin{array}{ll}1 \quad n=0 \\0 \quad n \neq 0\end{array}\right.g(nTs)={1n=00n=0(各符号的拖尾不影响其他符号在其他时刻的抽样判决)
进一步求解对g(t)g(t)g(t)频谱的约束条件
上面说过,接收端抽样判决时,对r(t)r(t)r(t)做TsT_sTs的等间隔采样,真正影响结果的是g(t)g(t)g(t),因此变为对g(t)g(t)g(t)做TsT_sTs的等间隔采样得到gs(t)=g(t)∑n=−∞∞δ(t−nTs)=∑n=−∞∞g(nTs)δ(t−nTs)Gs(ω)=12πG(ω)∗[2πTs∑n=−∞∞δ(ω−2πnTs)]=1Ts∑n=−∞∞G(ω−2πnTs)g_{s}(t)=g(t) \sum_{n=-\infty}^{\infty} \delta(t-n T s)=\sum_{n=-\infty}^{\infty} g\left(n T_{s}\right) \delta(t-n T s)\\G_{s}(\omega)=\frac{1}{2\pi}G(\omega)*[\frac{2\pi}{T_s}\sum_{n=-\infty}^{\infty} \delta(\omega-\frac{2\pi n}{T_s})]=\frac{1}{T_s}\sum_{n=-\infty}^{\infty} G(\omega-\frac{2\pi n}{T_s})gs(t)=g(t)n=−∞∑∞δ(t−nTs)=n=−∞∑∞g(nTs)δ(t−nTs)Gs(ω)=2π1G(ω)∗[Ts2πn=−∞∑∞δ(ω−Ts2πn)]=Ts1n=−∞∑∞G(ω−Ts2πn)
带入g(nTs)={1n=00n≠0g\left(nT_{s}\right)=\left\{\begin{array}{ll}1 \quad n=0 \\0 \quad n \neq 0\end{array}\right.g(nTs)={1n=00n=0的要求,上面两式必须满足gs(t)=∑n=−∞∞g(nTs)δ(t−nTs)=δ(t)Gs(ω)=1Ts∑n=−∞∞G(ω−2πnTs)=1(做上式的傅里叶变换可知)g_{s}(t)=\sum_{n=-\infty}^{\infty} g\left(n T_{s}\right) \delta(t-n T s)=\delta(t)\\G_{s}(\omega)=\frac{1}{T_s}\sum_{n=-\infty}^{\infty} G(\omega-\frac{2\pi n}{T_s})=1(做上式的傅里叶变换可知)gs(t)=n=−∞∑∞g(nTs)δ(t−nTs)=δ(t)Gs(ω)=Ts1n=−∞∑∞G(ω−Ts2πn)=1(做上式的傅里叶变换可知)
这就是Nyquist准则:
- 第一个式子保证时域拖尾互不干扰,时域上每隔TsT_sTs采样,除了本码元采样点之外的所有采样点应该为0
- 第二个式子是说,将频谱G(ω)G(\omega)G(ω)以2πnTs\frac{2\pi n}{T_s}Ts2πn为周期延拓后,所有延拓的频谱叠加,应该为常数TsT_sTs;
或者也可以说将频谱G(ω)G(\omega)G(ω)沿ω\omegaω轴以2πnTs\frac{2\pi n}{T_s}Ts2πn为长度切段,平移各个段到一起并累加,应该为常数TsT_sTs
要满足Nyquist准则,脉冲成形函数g(t)g(t)g(t) / 基带信号s(t)s(t)s(t)的的最小带宽为B0≥12Ts=Rs2B_0\geq \frac{1}{2T_s}=\frac{R_s}{2}B0≥2Ts1=2Rs(或数字频率2πB02\pi B_02πB0)
注意,这里的带宽B0B_0B0是理想低通信道的带宽
或者等价的说,带通信道的Nyquist带宽为B0≥RsB_0\geq R_sB0≥Rs
实际中,OFDM信号就达到带通信道的奈奎斯特带宽,理论上最节约信道资源
虽然实际上基带信道带宽略大于Rs2\frac{R_s}{2}2Rs,但是相邻频带重叠,利用子载波正交性总体上仍没有重叠,即等效于到达了最小的奈奎斯特带宽,实现理论最大频带利用率
扩展:奈奎斯特带宽、奈奎斯特速率
在Nyquist准则的基础上,我们又得到了奈奎斯特带宽、奈奎斯特速率的概念
信道容量:在信道中进行无差错传输可达的最大信息速率
解调时,对当前符号的判决不利的是「噪声」和「码间串扰ISI」,在不同信道情况下,计算信道容量的方式不同。下面可以看出,「码间串扰ISI」是信道容量永远无法摆脱的内在束缚,而「噪声」的存在进一步减小了信道容量
- 理想无噪信道:数据率的限制仅来自于信号的「带宽 」(涉及码间串扰限制),计算信道容量使用奈奎斯特准则
理解:即使没有噪声,信号自己会对自己造成干扰(这就是码间干扰,就像说话太快前后几个字混淆不清),但是只要增加带宽就能增加数据率
奈奎斯特准则的理论,延伸出奈奎斯特带宽和奈奎斯特速率两个概念(下面的BBB是理想的低通信道的带宽)
奈奎斯特带宽:固定了符号速率Rs=1TsR_s=\frac{1}{T_s}Rs=Ts1,则在无噪信道无ISI(无差错)传输所需的最小带宽B≥Rs2B\geq \frac{R_s}{2}B≥2Rs
奈奎斯特速率:固定了带宽BBB,那么在无噪信道无ISI(无差错)传输能达到的最大符号速率为Rs≤2BR_s\leq2BRs≤2B
根据奈奎斯特速率,无噪信道容量:C=2Blog2M(bps)C=2Blog_2M(bps)C=2Blog2M(bps),其中MMM为一个码元可能对应的离散值个数
- 实际有噪信道:数据率上限由「带宽」和「信噪比」共同决定(而不仅仅是带宽了),计算信道容量使用香农公式
理解:有噪声的情况下,香农公式指出,无限增加带宽就不一定能相应增加传输速率了,因为信道带宽增加其中混入的白噪声也就增加了(信道容量上限limB→∞C=log2e⋅(S/n0),n0为噪声功率谱密度\lim_{B\rightarrow\infty C=log_2e\cdot(S/n_0)},n_0为噪声功率谱密度limB→∞C=log2e⋅(S/n0),n0为噪声功率谱密度)
有噪信道容量:C=2Blog2(1+SNR)C=2Blog_2(1+SNR)C=2Blog2(1+SNR),其中MMM为一个码元可能对应的离散值个数
脉冲成形
想要在信道中真正传输数字信号(如01比特),必须将它们转化为一定的电路波形 / 脉冲信号,称为脉冲成形;
脉冲成形,具体实现方法就是冲激信号经过基带滤波器g(t)g(t)g(t)(一个滤波器),得到时域脉冲波形,下面讨论什么样的g(t)g(t)g(t)是合适的
结论:
- 理论分析中可以用矩形脉冲,但实际中均为类似sinc的脉冲,由升余弦滚降滤波器生成
- 注意,采用sinc脉冲会进一步导致PSK / QAM调制得到的波形,实际与理论不同,然后我们在实际中并不需要关注调制后的波形如何,只要关注波形解调后对于sinc脉冲的采样判决,后面将看到,sinc脉冲能很好的降低码间串扰
- 接收端收到基带的脉冲信号,进行采样判决,再将其还原为一个个符号,进而得到数字信号
具体分析如下:
矩形脉冲:带宽无限,不可行
最容易想到的脉冲就是矩形脉冲,我们直接用其高低电平来对应数字信号,然而脉冲信号的频谱有无限的带宽:F[rect(tτ)]=τsinc(τf)\mathscr F[rect(\frac{t}{\tau})]=\tau sinc(\tau f)F[rect(τt)]=τsinc(τf)
实际信道带宽有限,这样就会导致传输后信号频谱变形,时域信号失真,很容易误判
或者说,带外功率的衰减慢,带外泄露强
如图,发送端的理想矩形脉冲,经过信道后信号失真(频域上低通,时域上平滑),从而误判
可见,矩形脉冲在频域上带宽无限,经过带限信道很容易失真,这就是为什么要控制带外泄露
接下来尝试选择其他更合适的脉冲成形滤波器
sinc脉冲:理想的脉冲成形
根据尺度变换性质F[x(αt)]=1∣α∣X(ωα)\mathscr{F}[x(\alpha t)]=\frac{1}{|\alpha|}X(\frac{\omega}{\alpha})F[x(αt)]=∣α∣1X(αω),尺度变换因子α\alphaα对时域和频域的作用是相反的:
- α>1\alpha>1α>1时域波形变窄,则频谱变宽(含有更多高频分量)
- 也可以说,时域信号的跳变引起频域的扩展(时域跳变包含大量高频成分,从而频谱变宽)
频域信号的跳变引起时域的扩展
既然需要有限宽的频谱来减少带外泄露,则根据傅里叶变换的对偶性,我们想到F[sinc(τt)]=1τrect(fτ)\mathscr F[sinc(\tau t)]=\frac{1}{\tau}rect(\frac{f}{\tau})F[sinc(τt)]=τ1rect(τf)
左侧为sinc信号时域波形,右侧为频谱(理想LPF)
使用sinc作为脉冲信号,优点如下:
- 频谱带宽有限(理想LPF的频谱),经过带通信道不失真
- 实现简单:脉冲成形的成形滤波器就是理想LPF
- sinc信号每间隔1/τ1/\tau1/τ幅值取0(τ\tauτ为其矩形频谱的总宽度,即2倍LPF带宽BBB),因此只要sinc脉冲信号的发送间隔为1/τ=1/(2B)1/\tau=1/(2B)1/τ=1/(2B),即码元速率Rs=2BR_s=2BRs=2B,即可实现无码间串扰
如图,如果一个码元 / 脉冲 达到最大幅值时,其他所有码元幅值刚好为0,在此时进行采样判决,码元直接不会相互影响,这就是无码间串扰
sinc函数实现了Nyquist准则要求的最小带宽Rs/2R_s/2Rs/2,并且无码间干扰ISI,但问题在于
sinc脉冲成形对应的基带滤波器是理想LPF,是不可能实现的
理想的LPF是非因果滤波器(需要未来的输入),想要实现必须将系统冲激响应做延时(将一段时间的输入缓存下来),转化为因果系统;
并且,延时取决于 信号何时衰减至可以被忽略,i.e.信号衰减越快,可以使用越小的延时
衰减速度慢还带来其他缺点:拖尾衰减速度慢,且拖尾振荡幅度大,因此出现定时偏差/采样时刻偏离时导致严重码间串扰(有定时偏差,不能保证当前码元抽样时刻“对齐”了其余码元取值为0的位置,从而由于拖尾引起码间串扰**)
也就是说,拖尾衰减慢,则要求采样精度更高
综上,sinc函数作为脉冲成形函数,理论上可行,实际上仍需改进(希望加快衰减速度)
升余弦滚降滤波器:从理想sinc到实际应用
sinc脉冲成形函数的缺点是时域拖尾长,但频谱是理想LPF,无法实现;
由于频域信号的跳变引起时域的扩展,可以采用频谱更平滑的成形滤波器,从而时域拖尾衰减更快,即升余弦滚降滤波器
实际应用中,使用「升余弦滚降滤波器RC」来逼近理想的LPF,并且能够控制脉冲的拖尾衰减速度
升余弦滚降滤波器RC可以加速信号拖尾的衰减,代价是频带的展宽
如右图,升余弦滚降滤波器RC一般有过渡带,且过渡带就是把余弦函数的一个周期升高了1,故称"升余弦"g(t)=sinc(tTs)cos(παt/Ts)1−(2αt/Ts)2G(ω)={Ts∣ω∣⩽∣1−α∣2πB0Ts2[1+cos∣ω∣−(1−α)2πB04αB0]∣1−α∣2πB0<∣ω∣⩽∣1+α∣2πB00∣ω∣>∣1+α∣2πB0g(t)=\operatorname{sinc}\left(\frac{t}{T_{s}}\right) \frac{\cos \left(\pi \alpha t / T_{s}\right)}{1-\left(2 \alpha t / T_{s}\right)^{2}}\quad G(\omega)=\left\{\begin{array}{ll} T_{s} & |\omega| \leqslant|1-\alpha| 2 \pi B_{0} \\ \frac{T_{s}}{2}\left[1+\cos \frac{|\omega|-(1-\alpha) 2 \pi B_{0}}{4 \alpha B_{0}}\right] & |1-\alpha| 2 \pi B_{0}<|\omega| \leqslant|1+\alpha| 2 \pi B_{0} \\ 0 & |\omega|>|1+\alpha| 2 \pi B_{0} \end{array}\right.g(t)=sinc(Tst)1−(2αt/Ts)2cos(παt/Ts)G(ω)=⎩⎨⎧Ts2Ts[1+cos4αB0∣ω∣−(1−α)2πB0]0∣ω∣⩽∣1−α∣2πB0∣1−α∣2πB0<∣ω∣⩽∣1+α∣2πB0∣ω∣>∣1+α∣2πB0
升余弦滚降滤波器的关键参数是 滚降系数α\alphaα,满足0≤α≤10\leq\alpha\leq10≤α≤1
如图,升余弦滚降滤波器RC的频率响应是平缓的(因此可近似实现),过渡带中心为B=12Ts=f0B=\frac{1}{2T_s}=f_0B=2Ts1=f0
- 无论α\alphaα取值如何,时域波形仍然满足:每间隔Ts=12B=12f0T_s=\frac{1}{2B}=\frac{1}{2f_0}Ts=2B1=2f01取值为0
- 无论α\alphaα取值如何,频率响应的过渡带中心固定为f0f_0f0
要满足无码间串扰:
- 利用时域的波形特点,保证脉冲信号的发送间隔为1/(2f0)1/(2f_0)1/(2f0),即码元速率Rs=2f0R_s=2f_0Rs=2f0
- 或者考虑频域:满足Nyquist准则(频谱以RsR_sRs做周期延拓并叠加后为恒定常数),这也要求了必须取f0=Rs/2f_0=R_s/2f0=Rs/2,才能满足无码间串扰
从两个角度分析,得到的结果是统一的
- α\alphaα控制了频率响应的过渡带宽度,过渡带中心f0f_0f0向左有αf0\alpha f_0αf0宽度,向右同样有αf0\alpha f_0αf0宽度,故总带宽(1+α)f0(1+\alpha)f_0(1+α)f0
α=0\alpha=0α=0就是理想LPF的情况,α\alphaα增大,频域增大带宽(实现难度降低),时域的信号拖尾衰减加快(能够减小由定时偏差带来的码间串扰),然而α\alphaα过大也意味着频带利用率η\etaη降低(见后文),需要权衡利弊(一般取α=0.3\alpha=0.3α=0.3)
综上,为了无码间串扰,升余弦滚降滤波器RC的过渡带中心必须取f0=Rs/2f_0=R_s/2f0=Rs/2,进而时域脉冲信号带宽(1+α)Rs/2(1+\alpha)R_s/2(1+α)Rs/2;
对比:满足奈奎斯特准则的成形滤波器,最小带宽正是Rs/2R_s/2Rs/2,而升余弦滚降滤波器的带宽略大于Rs/2R_s/2Rs/2
这也意味着升余弦滚降滤波器RC的频带利用率η=Rs(1+α)Rs/2=21+α(Baud/Hz)\eta=\frac{R_s}{(1+\alpha)R_s/2}=\frac{2}{1+\alpha}(Baud/Hz)η=(1+α)Rs/2Rs=1+α2(Baud/Hz),即上述的 α\alphaα越大频带利用率η\etaη越低
最终,采样升余弦滚降滤波器作为基带滤波器,进行脉冲成形,得到的时域波形如下:
可见,在每个抽样点处,当前码元的幅值达到最大,而其余码元在该点幅值为0,从而无码间串扰,能够正确判决
眼图:评估码间串扰情况
眼图是评价实际系统的码间串扰情况的工具,示波器叠加显示基带信号的波形,波形如同眼睛,称为眼图
眼图生成原理
理论上当前码元的波形受其余所有码元的拖尾影响,但最主要的影响来自前后两个码元,因此我们只关注连续三个码元的时域叠加波形即可:三个码元所有可能取值为000、001、010、011、100、101、110、111000、001、010、011、100、101、110、111000、001、010、011、100、101、110、111
和上面的图片同理,上图中000000000三个码元的合成波形为(码元000对应的是正脉冲)
001001001三个码元的合成波形为
010010010三个码元的合成波形为
由此类推,所有可能的连续三个码元的时域波形叠加,得到了眼图
眼图能显示噪声和码间串扰的影响
- 噪声:导致眼图中的线迹模糊不清
- 码间串扰:导致“眼睛”张开的更小、眼图不端正(眼图的中心时刻对应了当前码元的采样判决时刻,如果混入了其他码元的影响,则“眼睛”就逐渐闭上了)
通信原理学习笔记5-1:数字调制——脉冲成形滤波器选择(码间串扰、Nyquist准则、升余弦滚降滤波器、眼图)相关推荐
- 通信原理学习笔记5-2:数字调制——连续相位和恒包络问题(非线性功放、连续相位CP FSK信号、最小频移键控MSK、GMSK)
为了最大程度利用非线性功放,需要降低信号PAPR,这要求信号具有恒包络特性 信道带宽有限,需要降低信号带外泄露(进而传输失真小),要求信号具有连续相位特性(从而高频成分少) 波形连续和恒包络之间存在矛 ...
- 通信原理学习笔记2-1:模拟调制——相干解调的载波恢复、锁相环(平方环/Costas环)、变频/混频技术
原始信号为基带模拟信号,要想在空气中传播信号,必须使用频带信号(频率高则天线长度降低,且可能进行频分复用等) 要产生频带信号,需要频谱搬移,这就是调制:基带信号经过调制,得到已调信号/调制信号/频带信 ...
- 通信原理学习笔记6-2:数字解调——抽样和符号同步
采样 根据6-1的推导:在无ISI时,任意位置nnn上的一个符号InI_nIn,经过AWGN信道.匹配滤波器.采样后,得到符号YnY_{n}YnYn=In+nnY_{n}=I_{n}+n_{n}Y ...
- 通信原理学习笔记6-5:数字解调——译码的硬判决与软判决
卷积码的Viterbi译码.LDPC的译码,都有两种方式:硬判决(hard decision)与软判决(soft decision) 硬判决 硬判决就是将信号波形与判决门限比较,数字解调器的输出(即后 ...
- 通信原理学习笔记6-4:数字解调——抽样判决的译码准则(最大后验概率准则MAP、最大似然准则ML、最小二乘/最小平方准则LS、最小距离准则)
判决译码 在无ISI时,任意位置nnn上的一个符号InI_nIn,经过AWGN信道.匹配滤波器.采样后,得到符号YnY_{n}YnYn=In+nnY_{n}=I_{n}+n_{n}Yn=In+ ...
- 通信原理学习笔记3-3:数字通信系统概述(数字调制、IQ调制与PSK / QAM)
我们将数字通信系统分为三个主要模块: 信源默认为数字信源,但是如果是模拟信源,还需要模数转换(包含采样.量化.编码,未画出) 数字信源经过信源编码.信道编码和交织处理,提高了有效性和可靠性 然后进行数 ...
- 通信原理学习笔记3-1:数字通信系统概述(模数转换、时频域采样定理)
数字通信系统模型 数字通信系统模型如下: 各部分功能: 信源输入:输入原始基带信号(可以是模拟信号) 信源编码:采样+量化+编码(模数转换+压缩冗余) 信道编码:保证传输无差错,可以是自带校验信息的F ...
- 通信原理学习笔记:数字信号的基带传输
数字基带信号的码型 不同形式的数字基带信号,具有不同的频谱结构,对应不同的信道条件,采用不同的码型有利于传输. 码型变换:数字信息的电脉冲表示过程 在设计数字基带信号码型时,应当考虑到, 低频受限的信 ...
- 通信原理 day8,day9:第五章:数字基带传输系统的组成;常用基带信号传输码型;数字基带信号的功率谱;无码间串扰;无码间串扰系统;预编码
文章目录 1.数字基带传输系统基本模型 2.基带信号的基本波形 3.常用的基带信号传输码型 4.数字基带信号的功率谱 5.码间串扰:无码间串扰条件 5.1 码间串扰定义 5.2 无码间串扰条件 5.3 ...
- 通信原理学习笔记2-3:复信号分析(解析信号与预包络)、IQ调制与复信号的传输
实信号频谱的共轭对称性和冗余性 已经知道,傅里叶变换中的复指数ejωte^{j\omega t}ejωt带来了负频率,意义是旋转向量ejωte^{j\omega t}ejωt的旋转方向(顺/逆时针) ...
最新文章
- Spring复习笔记:4
- shell实例100例《一》
- ASP.NET 2.0的异步页面刷新真给劲
- jquery在ie浏览器下中文乱码的问题
- FPGA自定义UART传输(包含:matlab数据拆分)
- c# 将图片转成透明背景的png 源代码_有机_有机认证标【高清png素材】
- 变态一把,从internet获取所有手机号以及所在地
- VC控制台输出时设置字体及背景颜色
- npm/cnpm install是啥意思
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- 库克:苹果商店收取30%佣金是应该的
- 线性代数与矩阵论 习题 1.2.1
- DP(递归打印路径) UVA 662 Fast Food
- oracle数据库ora01012错误,Oracle自定义异常收集(二)
- A88xm-plus 主板采用Clover实现 m2 固态硬盘启动
- IPFS为什么被学者称为数据的“黄金保险柜”?
- ICA原理推导及代码实现
- c++《AVL树的概念》《AVL树的插入》《AVL树的旋转》《AVL树的验证》《AVL树的删除》《AVL树的性能》
- 写了也不看之第一学期c语言总结
- 计算机维修宣传稿,电脑义务维修活动策划书