不同 c AWGN 调制方法的理论误码率特性分析¶
在现代通信系统中,调制方法的选择对确保数据传输的可靠性和效率起着关键作用。比特误码率(BER)是表征通信质量的主要指标之一,它取决于信噪比(Eb/No)。本演示从理论上分析了各种调制技术在加性白高斯噪声信道条件下的误码率,包括 M-PSK(BPSK、QPSK、8-PSK)、M-QAM(16-QAM、64-QAM)和 M-FSK(2-FSK、4-FSK)。
在计算误码率时,使用了考虑到每种调制方法特殊性的精确公式和近似公式。分析结果以图表的形式直观呈现,可清晰比较不同调制方法作为 Eb/No 变化函数的性能。 该分析有助于工程师和研究人员在考虑数据传输速率和抗噪能力之间权衡的情况下,为特定通信条件选择最佳调制方法。
函数berawgn_psk
使用 BPSK (M=2) 的精确公式计算 AWGN 信道中 M-PSK 调制的理论误码率 (BER)--0.5 * erfc(sqrt(EbNo))
,其中erfc
是一个附加误差函数,而对于 M>2 则使用近似值erfc(sqrt(k * EbNo) * sin(π/M)) / k
,其中考虑了每个符号的比特数 (k = log2(M)
) 和星座的几何形状(通过sin(π/M)
)。这两个公式都取决于线性信噪比EbNo = 10^(EbNo_dB/10)
,由分贝转换而来。
Out[0]:
berawgn_psk (generic function with 1 method)
函数berawgn_qam
可计算 AWGN 噪声信道中正交振幅调制(M-QAM,如 16-QAM、64-QAM)的理论误码率 (BER)。它使用正交星座的精确公式,其中
-EbNo = 10^(EbNo_dB/10)
是线性信噪比、
-k = log2(M)
是每个符号的比特数、
-erfc
是加性误差函数、
- 乘法器
4/k
和(1 - 1/sqrt(M))
考虑了星座的几何形状和不同比特组合的误差概率。该公式对二次 QAM 有效。
Out[0]:
berawgn_qam (generic function with 1 method)
函数berawgn_fsk
计算了 AWGN 噪声信道中 M-FSK(频率操纵)调制的理论误码率(BER),支持两种检测模式。对于相干接收(具有准确的相位信息),使用以下公式:
-EbNo = 10^(EbNo_dB/10)
是线性信噪比、
-k = log2(M)
是每个字符的比特数、
-erfc
- 附加误差函数。
该函数考虑了误差随M
(通过乘法器(M-1)/M
或(M-1)/2
)的增加而增加,以及与每比特能量的关系 (k*EbNo
)。模式由参数coherent=true/false
设置。适用于分析 2-FSK、4-FSK 和其他正交电路。
Out[0]:
berawgn_fsk (generic function with 1 method)
对不同调制方法的理论误码率特性所做的分析表明,它们的不同表现取决于信噪比(Eb/No)。从图中可以看出,BPSK 和 QPSK 调制方法在 Eb/No 值较低时具有较好的抗噪能力,是弱信号条件下的理想选择。然而,随着 Eb/No 值的增加,16-QAM 和 64-QAM 等更高级别的调制技术虽然需要更高的信噪比才能达到相当的误码率值,但却能提供更高的频谱效率。
M-FSK 调制方法,特别是 2-FSK 和 4-FSK,表现出中等性能,使其适用于对实施的简易性和频率变化的鲁棒性有重要要求的特定场景。研究结果强调了根据通信系统的具体要求(如可接受的错误概率、可用带宽和能量限制)选择调制方法的重要性。
因此,我们的分析为通信系统的设计和优化提供了有价值的信息,可以为不同的运行条件选择最佳调制方法。
{"id": "8cf7ca5e-f33d-4aa4-a471-5f4fd786846d", "data": [{"showlegend": true, "mode": "lines+markers", "xaxis": "x", "colorbar": {"y": 0.5086805555555556, "title": {"text": ""}, "len": 0.8657316272965879, "x": 0.9934383202099737}, "name": "BPSK", "yaxis": "y", "legendgroup": "BPSK", "marker": {"symbol": "circle", "color": "rgba(0, 154, 250, 1.000)", "line": {"color": "rgba(0, 0, 0, 1)", "width": 1}, "size": 8}, "line": {"color": "rgba(0, 154, 250, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.4007189272925956, 0.3889055441688301, 0.37577243728786613, 0.36120700311607173, 0.3451015211341458, 0.3273604230092885, 0.30791047071507943, 0.2867145275814431, 0.26378950525626593, 0.23922871076767188, 0.21322801835762034, 0.186113817483389, 0.1583683188095979, 0.13064448852282923, 0.1037590959534063, 0.07864960352514257, 0.056281951976541456, 0.03750612835892598, 0.022878407561085324, 0.012500818040737556, 0.00595386714777866, 0.0023882907809328075, 0.0007726748153784444, 0.00019090777407599314, 3.362722841961749e-05, 3.872108215522037e-06, 2.6130679535751977e-07, 9.00601035062875e-09, 1.33293101753005e-10, 6.810189128780764e-13, 9.123957362628091e-16], "type": "scatter", "x": [-15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]}, {"showlegend": true, "mode": "lines+markers", "xaxis": "x", "colorbar": {"y": 0.5086805555555556, "title": {"text": ""}, "len": 0.8657316272965879, "x": 0.9934383202099737}, "name": "QPSK", "yaxis": "y", "legendgroup": "QPSK", "marker": {"symbol": "square", "color": "rgba(227, 111, 71, 1.000)", "line": {"color": "rgba(0, 0, 0, 1)", "width": 1}, "size": 8}, "line": {"color": "rgba(227, 111, 71, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.4007189272925956, 0.3889055441688301, 0.37577243728786613, 0.36120700311607173, 0.3451015211341459, 0.3273604230092885, 0.30791047071507943, 0.28671452758144317, 0.26378950525626593, 0.23922871076767188, 0.2132280183576204, 0.186113817483389, 0.15836831880959795, 0.13064448852282923, 0.10375909595340632, 0.07864960352514257, 0.0562819519765415, 0.03750612835892601, 0.02287840756108534, 0.012500818040737566, 0.00595386714777866, 0.0023882907809328075, 0.0007726748153784444, 0.00019090777407599314, 3.362722841961758e-05, 3.872108215522048e-06, 2.6130679535752067e-07, 9.006010350628784e-09, 1.33293101753005e-10, 6.810189128780764e-13, 9.123957362628184e-16], "type": "scatter", "x": [-15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]}, {"showlegend": true, "mode": "lines+markers", "xaxis": "x", "colorbar": {"y": 0.5086805555555556, "title": {"text": ""}, "len": 0.8657316272965879, "x": 0.9934383202099737}, "name": "8-PSK", "yaxis": "y", "legendgroup": "8-PSK", "marker": {"symbol": "diamond", "color": "rgba(62, 164, 78, 1.000)", "line": {"color": "rgba(0, 0, 0, 1)", "width": 1}, "size": 8}, "line": {"color": "rgba(62, 164, 78, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.28920408031643524, 0.2838785855707817, 0.27792745561134136, 0.2712841671897466, 0.26387800891387786, 0.2556350990735843, 0.24648008896600734, 0.2363388155381412, 0.2251422368375632, 0.21283205242425526, 0.1993684593014792, 0.1847404854243907, 0.16897921427553894, 0.1521738663029757, 0.1344899978700235, 0.11618785533262038, 0.09763706378539527, 0.07932141777736897, 0.06182513458966774, 0.045790942734672414, 0.03184330336407075, 0.020479923891202897, 0.011952769488034582, 0.006181051750685378, 0.002748133529652667, 0.0010113953207128907, 0.0002937292522288448, 6.337878823300314e-05, 9.417264530264064e-06, 8.756326958310433e-07, 4.516092535387282e-08], "type": "scatter", "x": [-15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]}, {"showlegend": true, "mode": "lines+markers", "xaxis": "x", "colorbar": {"y": 0.5086805555555556, "title": {"text": ""}, "len": 0.8657316272965879, "x": 0.9934383202099737}, "name": "16-QAM", "yaxis": "y", "legendgroup": "16-QAM", "marker": {"symbol": "triangle-up", "color": "rgba(195, 113, 210, 1.000)", "line": {"color": "rgba(0, 0, 0, 1)", "width": 1}, "size": 8}, "line": {"color": "rgba(195, 113, 210, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.3276098304798456, 0.32188515288218034, 0.3154856220072827, 0.3083385155476397, 0.3003660997695802, 0.2914865290460706, 0.28161541628341835, 0.270668341314537, 0.2585646398830702, 0.24523289535146084, 0.2306186226662118, 0.21469465726886178, 0.19747468298888676, 0.17903005859143523, 0.15950949445603402, 0.1391600135710116, 0.11834583884997399, 0.09755935237670887, 0.07741543426555975, 0.05861845741925089, 0.04189230318126344, 0.027871306319660706, 0.016966733896638594, 0.009247213737517426, 0.004390336087342222, 0.0017541506178927247, 0.0005647061064817435, 0.000138658688812619, 2.4233785466315867e-05, 2.763208001687778e-06, 1.8418555110944843e-07], "type": "scatter", "x": [-15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]}, {"showlegend": true, "mode": "lines+markers", "xaxis": "x", "colorbar": {"y": 0.5086805555555556, "title": {"text": ""}, "len": 0.8657316272965879, "x": 0.9934383202099737}, "name": "64-QAM", "yaxis": "y", "legendgroup": "64-QAM", "marker": {"symbol": "triangle-down", "color": "rgba(172, 142, 24, 1.000)", "line": {"color": "rgba(0, 0, 0, 1)", "width": 1}, "size": 8}, "line": {"color": "rgba(172, 142, 24, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.2695795385359728, 0.2668941488962412, 0.26388506136773954, 0.26051440790248265, 0.2567403654086945, 0.2525169427061812, 0.2477938488121117, 0.2425164937915452, 0.23662619445091193, 0.2300606851864444, 0.22275507077837273, 0.21464340387767528, 0.20566112513434232, 0.19574866531839366, 0.18485656785230106, 0.1729525285884161, 0.1600307330072046, 0.1461237406152098, 0.13131683131204988, 0.11576406413570582, 0.09970416506415956, 0.08347266672985076, 0.06750457506851805, 0.05231979827721594, 0.03848298922558383, 0.026532609826146015, 0.016883529039968943, 0.009723985039970597, 0.004945987194977894, 0.0021540037571798924, 0.000772472180420455], "type": "scatter", "x": [-15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]}, {"showlegend": true, "mode": "lines+markers", "xaxis": "x", "colorbar": {"y": 0.5086805555555556, "title": {"text": ""}, "len": 0.8657316272965879, "x": 0.9934383202099737}, "name": "2-FSK", "yaxis": "y", "legendgroup": "2-FSK", "marker": {"symbol": "pentagon", "color": "rgba(0, 170, 174, 1.000)", "line": {"color": "rgba(0, 0, 0, 1)", "width": 1}, "size": 8}, "line": {"color": "rgba(0, 170, 174, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.42942905166046325, 0.42092556304323187, 0.41142840747215204, 0.4008341322988809, 0.38903375348602526, 0.3759148170229246, 0.36136469851162906, 0.3452755944935355, 0.3275517651733183, 0.30811967906576465, 0.2869417437260485, 0.26403420763801794, 0.23948946302589857, 0.2135021855040061, 0.1863972813913738, 0.15865525393145702, 0.13092729675552447, 0.10402863708538863, 0.07889587198172442, 0.05649530174936167, 0.037678988147463385, 0.023007138877866016, 0.01258703312214462, 0.006004386400163562, 0.0024133104196338642, 0.0007827011290012744, 0.0001939854720578607, 3.430262386641538e-05, 3.9692483963428305e-06, 2.6951481173667167e-07, 9.361039990685104e-09], "type": "scatter", "x": [-15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]}, {"showlegend": true, "mode": "lines+markers", "xaxis": "x", "colorbar": {"y": 0.5086805555555556, "title": {"text": ""}, "len": 0.8657316272965879, "x": 0.9934383202099737}, "name": "4-FSK", "yaxis": "y", "legendgroup": "4-FSK", "marker": {"symbol": "hexagon", "color": "rgba(237, 94, 147, 1.000)", "line": {"color": "rgba(0, 0, 0, 1)", "width": 1}, "size": 8}, "line": {"color": "rgba(237, 94, 147, 1.000)", "shape": "linear", "dash": "solid", "width": 1}, "y": [0.6010783909388935, 0.5833583162532452, 0.5636586559317992, 0.5418105046741076, 0.5176522817012188, 0.49104063451393276, 0.4618657060726191, 0.43007179137216467, 0.39568425788439887, 0.35884306615150785, 0.31984202753643054, 0.27917072622508354, 0.23755247821439684, 0.19596673278424384, 0.15563864393010945, 0.11797440528771386, 0.08442292796481218, 0.05625919253838897, 0.03431761134162799, 0.018751227061106334, 0.00893080072166799, 0.0035824361713992113, 0.0011590122230676666, 0.00028636166111398973, 5.0440842629426234e-05, 5.808162323283056e-06, 3.919601930362796e-07, 1.3509015525943126e-08, 1.9993965262950752e-10, 1.0215283693171146e-12, 1.3685936043942138e-15], "type": "scatter", "x": [-15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]}], "config": {"showlegend": true, "xaxis": {"showticklabels": true, "gridwidth": 0.5, "tickvals": [-15, -10, -5, 0, 5, 10, 15], "range": [-15.9, 15.9], "domain": [0.07646908719743364, 0.9934383202099737], "mirror": false, "tickangle": 0, "showline": true, "ticktext": ["-15", "-10", "-5", "0", "5", "10", "15"], "zeroline": false, "tickfont": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 11}, "zerolinecolor": "rgba(0, 0, 0, 1)", "anchor": "y", "visible": true, "ticks": "inside", "tickmode": "array", "linecolor": "rgba(0, 0, 0, 1)", "showgrid": true, "title": {"text": "Eb/No (dB)", "font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 15}}, "gridcolor": "rgba(0, 0, 0, 0.1)", "tickcolor": "rgb(0, 0, 0)", "type": "linear"}, "paper_bgcolor": "rgba(255, 255, 255, 1.000)", "annotations": [{"yanchor": "top", "xanchor": "center", "rotation": 0, "y": 1, "font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 20}, "yref": "paper", "showarrow": false, "text": "Теоретические BER для различных модуляций", "xref": "paper", "x": 0.5349537037037038}], "height": 400, "margin": {"l": 0, "b": 20, "r": 0, "t": 20}, "plot_bgcolor": "rgba(255, 255, 255, 1.000)", "yaxis": {"showticklabels": true, "gridwidth": 0.5, "tickvals": [0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6000000000000001], "range": [-0.01803235172816592, 0.6191107426670603], "domain": [0.07581474190726165, 0.9415463692038496], "mirror": false, "tickangle": 0, "showline": true, "ticktext": ["0.0", "0.1", "0.2", "0.3", "0.4", "0.5", "0.6"], "zeroline": false, "tickfont": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 11}, "zerolinecolor": "rgba(0, 0, 0, 1)", "anchor": "x", "visible": true, "ticks": "inside", "tickmode": "array", "linecolor": "rgba(0, 0, 0, 1)", "showgrid": true, "title": {"text": "Bit Error Rate (BER)", "font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 15}}, "gridcolor": "rgba(0, 0, 0, 0.1)", "tickcolor": "rgb(0, 0, 0)", "type": "linear"}, "legend": {"yanchor": "auto", "xanchor": "auto", "bordercolor": "rgba(0, 0, 0, 1)", "bgcolor": "rgba(255, 255, 255, 1.000)", "borderwidth": 1, "tracegroupgap": 0, "y": 1, "font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 11}, "title": {"font": {"color": "rgba(0, 0, 0, 1)", "family": "sans-serif", "size": 15}, "text": ""}, "traceorder": "normal", "x": 1}, "width": 1998.234375}}