搞通信原理的迟早都要跟功率谱密度正面碰一次。碰得多了你会发现单极性不归零码Unipolar NRZ的功率谱密度几乎是所有码型频谱分析的“地基”——它简单到波形只是一堆0和1的矩形脉冲但推导过程和结论里藏着的坑足够让一批又一批的学生在考试里翻车。这篇文章就从工程和考试两个视角把单极性不归零码的功率谱密度掰开揉碎讲清楚从信号建模、随机序列功率谱通用公式到连续谱和离散谱的来龙去脉再到带宽判断、位定时提取的物理意义最后附上我踩过的坑和一段Python仿真验证。无论你是正在啃樊昌信第七版的本科生还是想回头补基础的在职工程师这篇应该都能让你省下不少找资料的功夫。1. 为什么要揪着单极性NRZ的功率谱不放1.1 单极性不归零码到底是啥先明确基本概念。单极性不归零码也就是Unipolar NRZ二进制符号“1”用一个正电平A表示符号“0”用零电平表示并且在整个码元宽度T_b内电平保持不变。所谓“不归零”就是指电平在码元周期内不会回到零电平——跟归零码RZ那种“只持续半个码元就回零”的波形有本质区别。这个码型虽然在实际传输系统中用得不多但它在教材里的地位非常高。为什么因为它是所有数字基带信号里最朴素、最容易建模的一个。从它入手推功率谱你能清楚看到随机序列频谱分析的完整套路先假设比特独立等概再把波形拆成基本脉冲和信息脉冲串然后套通用功率谱公式。这个过程一旦走通了后面推双极性NRZ、RZ、AMI、HDB3的时候你需要的只是替换参数和脉冲形状思路完全一样。所以千万别觉得“考完试这东西就没用了”。我在后面做实际项目时判断一个随机数字信号的带宽、看它有没有直流分量、能不能直接提取位定时靠的本质上还是当年对NRZ功率谱的理解。只是那个时候没意识到教科书第一章的结论就是工程里频谱设计的起点。1.2 功率谱密度能告诉我们什么很多同学对功率谱密度的印象停留在“这是一条曲线”但它其实回答了三个非常关键的工程问题。第一信号占多宽数字信号是宽带信号功率谱的包络形状直接决定了你会占用多少频谱资源。对单极性NRZ来说功率谱形状是sinc²函数主瓣宽度、第一零点位置都跟码元速率直接挂钩。你在设计滤波器、估算信道带宽、做频段规划时第一步回答的就是“这个信号有多宽”。第二信号里有没有离散谱线离散谱意味着对应频率上存在周期分量或者说有“稳定的时钟成分”。比如归零码在码速率处有离散谱线接收端就能用窄带滤波器把时钟提取出来。而单极性NRZ的离散谱只有直流分量没有码速率处的谱线这意味着接收端没法直接从这里提取位定时。这个结论对于理解同步系统为什么需要非线性变换、为什么很多基带码型要做码型变换非常关键。第三信号的功率是怎么分布的直流功率有多大低频分量有多重单极性NRZ因为“1”用正电平、“0”用零电平平均下来会有一个正的直流分量所以它不能用带变压器耦合的信道直接传。这些都是从功率谱上一眼能看出来的信息。2. 推导前的三块垫脚石2.1 信号模型把NRZ写成一个通式要算单极性NRZ的功率谱先得把信号用一个适合理论分析的数学模型写出来。数字基带信号的一般形式是s(t) Σ a_n · g(t − n·T_b)这里g(t)是一个基本脉冲T_b是码元周期a_n是第n个码元的幅度取值。对单极性NRZ基本脉冲就是宽度为T_b、幅度为A的矩形脉冲而a_n的取值是0或1。这个模型的关键在于s(t)是一个随机过程因为a_n是随机变量。对于普通的确定信号我们习惯用傅里叶变换看频谱但随机信号不能用传统的傅里叶变换直接处理只能通过统计平均的方式研究它的功率在频域上的分布这就是功率谱密度PSD存在的意义。在教材里通常还会进一步假设各码元之间统计独立而且P(1)P(0)0.5。这是最简单的等概独立模型。所有推导都是基于这个假设展开的实际信号不一定完全满足但作为理论分析的第一步这个模型已经足够说明问题。2.2 随机序列功率谱的通用公式这里要介绍的是樊昌信《通信原理》里最常用、也最实用的一套公式。对于由两种基本波形构成的随机脉冲序列s(t) Σ v_n(t)其中每个码元对应波形要么是g_1(t)代表“1”要么是g_2(t)代表“0”其双边功率谱密度可以写成P_s(f) f_b · P(1−P) · |G_1(f) − G_2(f)|^2 f_b² · Σ_m |P·G_1(m·f_b) (1−P)·G_2(m·f_b)|² · δ(f − m·f_b)其中f_b 1/T_b是码速率P是发“1”的概率G_1(f)和G_2(f)分别是两个基本波形的傅里叶变换。第一项是连续谱来源于码元波形的随机切换第二项是离散谱来源于码元波形中的周期性和直流成分。这个公式不用背但要理解它为什么长这样。连续谱部分之所以含有|G_1 − G_2|²是因为随机序列的功率取决于两种波形之间的“差异”离散谱的存在则是因为如果两种波形有相同的周期分量它们会叠加成稳定的谱线。你可以把公式忘掉但这段物理直觉最好留住。2.3 关键参数均值、方差、矩形脉冲的傅里叶变换为了用上面的通用公式我们需要准备几个小零件。第一个零件是概率参数。等概条件下P 0.5所以P(1−P) 0.25。第二个零件是两个基本波形的傅里叶变换。单极性NRZ中代表“1”的脉冲是一个矩形波幅度A宽度T_b中心在0附近。它的傅里叶变换是G_1(f) A·T_b·Sa(π·f·T_b) A·T_b·sinc(f·T_b)这里我用Sa(x)sin(x)/x这个定义跟樊昌信教材一致。注意如果采用sinc(x)sin(πx)/(πx)的定义写起来更简洁但两者本质上是一样的只是自变量差一个π倍。看书时一定要注意教材用了哪种定义不然很容易对不上号。代表“0”的波形是零电平所以G_2(f) 0。第三个零件其实不算独立参数但在计算中会用到G_1(m·f_b)在m取整数时的值。因为G_1(f)是sinc函数形状而m·f_b正好是sinc函数的零点位置m≠0时所以G_1(m·f_b)0除非m0当m0时G_1(0)A·T_b。这三个零件的结论虽然简单却是整个推导最后的落点。3. 单极性NRZ功率谱密度的完整推导3.1 连续谱部分sinc²是怎么冒出来的现在把上面的零件代入通用公式。连续谱部分是P_c(f) f_b · P(1−P) · |G_1(f) − G_2(f)|²代入P(1−P)0.25和G_2(f)0得到P_c(f) f_b · 0.25 · |G_1(f)|² 0.25 · f_b · A²·T_b² · sinc²(f·T_b)利用f_b 1/T_b做一次化简P_c(f) 0.25 · A² · T_b · sinc²(f·T_b)这是连续谱的最终形式形状是一个标准的sinc²函数幅度由信号幅度A的平方和码元周期T_b共同决定。这一步的物理含义值得多说两句。连续谱来源于“随机切换”的那部分功率。因为比特是随机的波形不可能像纯周期信号那样把功率都集中在离散频率点上而是摊开在频率轴上形成连续包络。由于矩形脉冲的傅里叶变换就是sinc形状所以连续谱自然继承了sinc²的形状。换句话说信号的频谱形状首先由基本脉冲的形状决定而不是由信息序列决定——这一点很多人在学的时候没有意识到。3.2 离散谱部分为什么只剩一条直流谱线离散谱部分来自通用公式的第二项P_d(f) f_b² · Σ_m |P·G_1(m·f_b) (1−P)·G_2(m·f_b)|² · δ(f − m·f_b)代入G_20、P0.5得到每一项都是f_b² · (0.5)² · |G_1(m·f_b)|² · δ(f − m·f_b) 0.25 · f_b² · |G_1(m·f_b)|² · δ(f − m·f_b)关键就在于G_1(m·f_b)的取值。当m≠0时m·f_b正好落在sinc函数的零点上所以G_1(m·f_b)0离散谱项消失。只有m0这一项是幸存者P_d(f) 0.25 · f_b² · |G_1(0)|² · δ(f) 0.25 · f_b² · A²·T_b² · δ(f)注意到f_b²·T_b² 1于是P_d(f) 0.25 · A² · δ(f)所以离散谱只有一条位于f0处的冲激冲激强度为0.25·A²。这就是为什么单极性NRZ一定存在直流分量——它的一半功率平均功率的计算不考虑离散谱时另说集中在直流上。这里提醒一个新手容易疑惑的问题为什么sinc函数的零点恰好能“杀光”所有非零整数倍的离散谱因为矩形脉冲的傅里叶变换在整倍码速率处全部为零而离散谱线恰好就出现在整倍码速率的位置上。这两个性质的巧合导致单极性NRZ的离散谱除了直流外空空如也。换句话说这种码型在码速率及其整数倍上没有可提取的定时分量。3.3 合起来最终表达式长什么样把连续谱和离散谱相加单极性不归零码的双边功率谱密度为P_s(f) 0.25 · A² · T_b · sinc²(f·T_b) 0.25 · A² · δ(f)这是一个非常干净的结果也是考试最爱考的结论。它告诉我们单极性NRZ的功率谱由连续谱和直流离散谱两部分组成连续谱是sinc²形状直流处有一个冲激没有其他任何频率的离散谱线。你可以用这个结果快速回答几类常见问题信号带宽是多少sinc²的主瓣到第一零点宽度是2·f_b如果只说正向零点带宽就是f_b有没有定时分量没有能不能直接隔直流通低频不能因为直流功率占比很大。如果这些答案你能脱口而出说明这个公式你是真理解了而不只是会背。4. 画出功率谱看看它告诉我们的物理意义4.1 怎么画sinc²函数的形状与带宽判断把P_s(f)画出来纵轴是功率谱密度横轴是频率。连续谱部分在f0处取得最大值0.25·A²·T_b然后随|f|增大按照sinc²规律衰减在f±f_b处第一次降到零随后出现一系列逐渐衰减的旁瓣。在那个f0的位置还要画一个向上的箭头表示直流冲激——它的强度是0.25·A²量纲是W/Hz下的冲激画图时用一个带数值标注的箭头比较合适。带宽的判断是考试里最高频的考点之一。如果问“谱零点带宽”或者“第一零点带宽”单极性NRZ的答案是f_b也就是码速率。如果问“主瓣宽度”则是从−f_b到f_b宽度为2·f_b。这里一定要看清题目在问哪个。很多同学把这些概念混在一起一看到带宽就开始写f_b/2结果题目问的是主瓣宽度自然就错了。更深一层为什么NRZ的主瓣这么“宽”因为它用了一个宽度佔满整个码元的矩形脉冲。脉冲越窄频谱越宽脉冲越宽频谱越窄。NRZ的脉冲宽度等于码元周期属于“比较宽”的脉冲所以它的主瓣不至于像RZ那样宽到2·f_b以上。这也是为什么在同样的码速率下NRZ比RZ节省频谱资源。4.2 直流分量说了什么单极性NRZ功率谱里有一条很强的直流谱线这在实际系统里是个不小的麻烦。首先很多信道和放大器是交流耦合的也就是说它们无法传递直流和极低频分量。单极性NRZ信号一旦经过交流耦合直流分量被阻断波形就会发生严重的基线漂移接收端判决时很难确定门限。所以你在很多基带传输系统里很少见到直接用单极性NRZ的不是因为它简单才不用而是因为它低频分量太重。其次直流耗散本身也是个问题。如果信号长时间保持“1”电平平均功率就集中在直流附近对于电池供电的设备或者对功耗敏感的场景这种码型的能量效率并不理想。这些工程层面的考量都能从功率谱密度一眼看出端倪这也是为什么频谱分析在通信系统设计中如此基础。从考试角度看只要问到“单极性NRZ能否通过变压器耦合”“为什么实际基带系统不直接用单极性NRZ”万能的答法就是它的功率谱存在很强的直流分量不适合交流耦合信道。这句话虽然听着简单但背后正是功率谱密度在发挥作用。4.3 为什么说NRZ提取不了位定时数字接收机必须知道每个码元的边界在哪里也就是要有位定时时钟同步。提取位定时最直接的办法就是看接收信号里有没有码速率f_b处的离散谱线。如果有用窄带滤波器滤出来就能得到时钟如果没有就得先做非线性变换。单极性NRZ的功率谱里f_b处没有任何离散谱分量。为什么因为矩形脉冲的傅里叶变换在f_b处是零点而信息序列又不够“周期化”。所以直接用滤波法提取时钟是行不通的。实际系统中要提取NRZ信号的位定时通常要先把信号做微分整流、平方律器件或者延迟相乘等非线性处理制造出f_b处的离散谱分量然后再滤波提钟。这个结论在学习时很容易被忽略但在工程里非常重要。我记得当年做基带收发仿真时天真地想直接对NRZ波形做PLL提取时钟结果锁相环完全失锁后来才意识到锁相环能在f_b处锁定前提是信号里要有f_b处的谱分量。NRZ没有这个分量锁相环自然无从锁起。这个坑教科书往往一笔带过但工程里血淋淋地真实存在。5. 考试和工程中的高频坑我的踩坑实录5.1 教材对比樊昌信和曹志刚的符号陷阱功率谱密度的公式在不同教材里写法不太一样但结论本质相同。樊昌信第七版的公式用的是g_1(t)、g_2(t)的双波形形式连续谱的系数是f_b·P(1−P)曹志刚那本教材用的是均值方差形式直接写成f_b·σ_a²·|G(f)|²加上离散谱项。这两种写法对单极性NRZ的结果完全一致因为σ_a²正好等于P(1−P)0.25。但坑也在这里。如果你在笔记本上记的是“P_s(f)f_b·σ_a²·|G(f)|²...”看到樊昌信教材变成了“f_b·P(1−P)·|G_1−G_2|²”第一反应往往是“教材是不是印错了”。其实两者是从不同角度切入的一个从随机变量的均值和方差出发一个从两个波形的差异出发。建议你把两个公式都推一遍确认它们在单极性NRZ情况下得到同一个答案以后看哪本教材都不会慌。还有一个更隐蔽的坑sinc和Sa的定义差一个π。Matlab里的sinc(x)等于sin(πx)/(πx)而数学教材里通常写Sa(x)sin(x)/x。同一张图用错一个定义零点位置就差了一个π倍数值仿真对不上理论曲线是常有的事。我自己的习惯是统一用Sa(x)sin(x)/x凡是写功率谱公式都显式写成Sa(π·f·T_b)这样在跟书核对时最不容易出错。5.2 第一零点带宽它不等于“信号的等效带宽”考试里经常问码速率为R_b的单极性NRZ信号谱零点带宽是多少答案是R_b。但有一个地方非常容易混淆数字信号在理想信道里传输时理论上最小所需带宽是R_b/2奈奎斯特带宽那是从无码间串扰的角度说的。而NRZ信号本身的谱零点带宽是R_b那是从功率谱包络形状的角度说的。这两个“带宽”完全不是一回事。把这个混淆讲透一个例子就够如果你设计一个匹配滤波器让NRZ信号通过你关心的可能是信号功率集中的主瓣范围这时候会参考谱零点带宽但如果要设计一个低通滤波器保证不产生码间串扰你关心的是奈奎斯特带宽和滚降系数。用错了概念你的滤波器带宽可能宽了一倍噪声功率也跟着翻倍误码率性能直接劣化。所以做题的时候先问清楚题目要的是“谱零点带宽”还是“奈奎斯特带宽”再动手算。5.3 仿真验证用一段Python代码实测理论推导再漂亮也得经得起仿真验证。我在学习时用Python写过一个简单验证核心思想是随机生成大量0/1比特构建NRZ波形用Welch周期图法估计功率谱再跟理论表达式画在同一张图上对比。下面给出核心片段。import numpy as np import matplotlib.pyplot as plt from scipy.signal import welch A 1.0 rb 1_000_000 # 码速率 Tb 1 / rb fs 8 * rb # 过采样率 n_bits 200_000 bits np.random.randint(0, 2, n_bits) # 每个码元填充8个采样点NRZ波形 wave np.repeat(A * bits, 8) # Welch法估计功率谱 f, Pxx welch(wave, fsfs, nperseg1024, noverlap512, return_onesidedFalse) f np.fft.fftshift(f) Pxx np.fft.fftshift(Pxx) # 理论连续谱0.25*A^2*Tb*sinc^2(f*Tb) f_theory np.linspace(-4*rb, 4*rb, 2000) P_theory 0.25 * A**2 * Tb * (np.sinc(f_theory * Tb))**2 plt.figure(figsize(10, 5)) plt.semilogy(f_theory, P_theory, r-, lw2, labeltheory (continuous)) plt.semilogy(f, Pxx, b-, alpha0.6, labelWelch estimate) plt.xlabel(f (Hz)) plt.ylabel(PSD (W/Hz)) plt.grid(True) plt.legend() plt.show()注意我这里没有画出直流的冲激因为仿真估计的离散谱会以一根很高的窄线出现在0频附近跟你设定的谱估计分辨率有关。如果你在图上看到0频处有一根明显高于理论连续谱的尖峰那就是直流离散谱的体现正好对应理论里的0.25·A²·δ(f)。这不是bug是物理规律。我自己跑这段代码时的经验是比特数至少要在十万以上谱估计窗口不要太短否则旁瓣比较糙看不出sinc²的零点和旁瓣结构。另外Welch法默认加窗会有一点谱泄漏零点不会完全归零看到的是“接近零”的小凹坑这是正常现象。如果你用矩形窗配合足够长的观察时间理论上零点会更接近真实零点但谱泄漏又会引入其他麻烦这本身就是频谱估计的经典取舍。5.4 其他经典应用题占空比与功率谱的关系单极性NRZ的推导弄明白后有一个非常经典的变体题如果把“不归零”改成“归零”RZ也就是“1”只持续半个码元宽度τT_b/2功率谱会怎么变核心变化只有一个基本脉冲的宽度从T_b变成τ幅度不变。于是傅里叶变换变成G_1(f)A·τ·Sa(π·f·τ)sinc函数的零点位置也跟着变成1/τ2·f_b。最终连续谱的零点带宽翻倍离散谱在m·f_b处也不再全部消失——因为G_1(m·f_b)在m·f_b处不再是零点当τT_b/2时G_1(f_b)不为0。这就解释了为什么RZ码在f_b处有离散谱线能用窄带滤波器提取位定时。考试中一旦遇到“为什么RZ能提钟而NRZ提不了”本质上就是脉冲宽度改变导致sinc零点位置变化的结论。把NRZ的推导彻底吃透这种变体题基本是白送的。6. 从NRZ功率谱到码型选择的工程启示6.1 为什么实际系统不用单极性NRZ做长途传输结合上面的功率谱分析单极性NRZ的缺点非常清楚它有大量的直流分量和低频能量无法通过变压器耦合和交流耦合信道它没有码速率处的离散谱线位定时提取困难它的判决门限依赖于信号均值当信号出现长串连续“1”或连续“0”时直流分量波动会导致误码率恶化。所以实际基带传输系统中单极性NRZ很少作为最终线路码直接使用。你会看到大量替代方案双极性NRZ用正负电平表示1和0消除了直流分量AMI码通过交替反转脉冲极性把直流进一步压下去HDB3码在AMI基础上解决长串0的定时问题曼彻斯特码则牺牲带宽换来自带时钟的能力。这些码型设计背后的动机几乎都是从功率谱密度出发的。6.2 双极性、AMI、HDB3的功率谱对比双极性NRZ与单极性NRZ的唯一区别在于“0”不再用零电平表示而是用−A表示。这看起来只是“把0的电平往下移”但功率谱发生了质变因为G_1(f)和G_2(f)变成A·T_b·sinc(fT_b)和−A·T_b·sinc(fT_b)两者之差是2倍而两者在m0处的加权和是P·G_1(1−P)·G_2 A·T_b·sinc·(P−(1−P))0所以连续谱变成A²·T_b·sinc²(fT_b)比单极性大4倍的系数注我指功率谱密度函数表达式若考虑总功率还要看细节但离散谱完全消失直流分量归零。这就是为什么双极性码能在交流耦合信道中传输。AMI码更进一步它让“1”的极性交替变化。它的功率谱没有离散谱主瓣宽度仍然是f_b但低频分量比双极性NRZ还小。HDB3是在AMI基础上插入特定脉冲破坏长串0它的功率谱大体保持AMI的优点同时保证了定时信息。这些码型的功率谱曲线你要是能跟单极性NRZ的做一个对比图会发现设计思路一脉相承尽量压低低频和直流尽量保留或制造时钟分量尽量压缩主瓣宽度。理解了NRZ这个基准再看其他码型就全是“相对变异”。6.3 留给你的一个思考题文章写到这个份上我想留一个思考题给认真读到这儿的你如果单极性NRZ的“1”电平不再是固定的A而是服从某种分布的随机变量例如A以等概率取1或3它的功率谱会有什么变化连续谱还长这样吗离散谱会变强还是变弱这个问题在PAM脉冲幅度调制里会再次出现但它的本质其实在单极性NRZ身上已经埋下种子。你可以试着用文中的通用公式重新代入一遍会发现随机幅度带来的核心变化体现在均值和方差上连续谱的“形状”仍然由脉冲决定但“强度”由方差决定离散谱的“强度”则由均值的平方决定。想通这一点再看高阶QAM、ASK信号的频谱就容易很多了。说白了通信原理里的很多章节翻来覆去就是在跟你玩“脉冲形状 信息统计特性 → 功率谱分布”这个游戏。单极性NRZ是这个游戏的第一关关卡简单但玩法最全。把这关玩通了后面的关隘都是同一套打法。我个人在实际学习中的体会是推导一定要自己亲手来一遍不能只看书上的结论画图一定要用仿真工具自己画一遍不能只看教材的示意图。推导让你知道公式哪里来仿真让你知道公式长什么样。两件事做完功率谱密度就再也不是你的噩梦而是你的工具箱里一个随取随用的趁手工具。以后不管碰到什么码型先问问它的功率谱有没有直流、有没有定时分量、主瓣多宽这三个问题一出你就已经拥有一个通信工程师该有的频谱直觉了。