Project2 安全编码与波形信道传输
通网课件 3 数字调制与传输 p49
预计流程图如下(相比于大作业 I,在收发端增加了一个加解密模块和一个载波调制模块)
graph LR
Origin[信源比特流]
Dest[信宿比特流]
Origin-->加密-->conv[卷积码]-->mapping[电平映射]-->filterT[升余弦滤波]-->modulate[载波升频调制]-->channel1[信道]
channel2[信道]-->demodulate[载波降频提取]-->filterR[升余弦滤波]-->demapping[电平反映射]-->Viterbi[维特比译码]-->解密-->Dest
在第二次仿真任务基础上,考虑以下波形信道:
- 某数据传输系统,试图利用 300-3400Hz 的双边话音通道进行载波传输,波形信道为加性高斯白噪声信道。
$W = \frac{3400-300}{2} = 1550\ \text{Hz}$ - 进行基带调制后,时域乘
$\cos(2 \pi f_0 t)$ 升频。其中$f_0 = \frac{3400+300}{2}\ \text{Hz} = 1850\ \text{Hz}$
- 采用线性传输,收发两端拟采用滚降系数
$0.5$ 的根号升余弦滤波,以解决采样点失真问题。- 在 MATLAB 中使用
rcosdesign()得到根号升余弦滤波器 -
$\alpha = 2 W T_s - 1 = 0.5$ 可以得到$T_s = \frac{\alpha + 1}{2W}$ -
$R_S = \frac{1}{T_s} \leq \frac{2W}{1 + \alpha} = 2067\ \text{符号/s}$ ,所需传输速度为$R_b \geq \frac{8192\ \text{bit}}{5\ \text{s}} = 1638\ \text{bit/s}$ 。 - 当然实际传输不一定占满所给频带 可以降低$W$的值(但会导致$R_s$下降)
- 在 MATLAB 中使用
需求:
- 某数据文件大小为 1 kB,希望在5秒钟之内传完 (不是说5秒钟内仿真完,而是说相当于以信道中传输的波形的时间长度不超过5秒)。
- 即希望 5 s 传输 8192 bit
-
$R_S \leq 2067\ \text{符号/s}$ ,$R_b \geq 1638\ \text{bit/s}$ ,故可以使用二元符号映射方式。 - 加入编码等冗余后需要注意不超过此限制
任务:
- 无编码情况下,自行选择调制方式和参数(进制数、符号率),说明理由
-
MASKMPSK - 符号率选择$R_s = \frac{1}{T_s}$ 当然也可以选用更低的符号速率 占用更少的带宽
-
- 自行选择合适的采样率刻画信号波形,画出发射波形(细节)和功率谱
- 采样率选择符号速率的
precision_N倍
- 采样率选择符号速率的
- 按该采样率产生一定功率谱密度
$n_0$ 的AWGN,叠加在一定功率的调制信号上,作为接收机输入,画出叠加噪声的接收信号波形(细节)和功率谱- 使用MATLAB的
awgn()函数添加噪声 设定信噪比为SNR
- 使用MATLAB的
- 编写解调判决模块,统计误比特率与
$E_b/n_0$ 的关系 - 引入卷积码,自行选择编码参数(效率)和调制参数,说明理由
- 编写相应的信道编码(含调制),画出发射波形(细节)和功率谱,接收机入口信号波形和功率谱
- 编写相应的接收机,完成从接收波形到最终信源比特的恢复,统计硬判决和软判决的误比特率与
$E_b/n_0$ 的关系(注意$E_b$ 是平均传输每个信源比特所需要的接收信号分量的能量)
无编码情况下,自行选择调制方式和参数(进制数、符号率),说明理由
MATLAB代码中实现的调制方式有MASK和MPSK (M = 2,4,8,16) (ASK.m iASK.m PSK.m iPSK.m),其中ASK映射所需的能量较多,但由于不需要考虑复数的处理,实现较为简单;PSK所需能量较少,同等发射能量的情况下,PSK的误码率理论上比ASK更小。
实验中选择8PSK作为传输的映射方式,选择的原因是较小的进制数难以达到较高的传输速率,较大的进制数可能会提高出错概率。而且实现代码经修改后支持复数转实数的发射与接收。
SK_way = 'PSK';
SK_M = 8;前面已经讨论过,使用二元映射也是满足题设条件的,这里选择最大的传输速率占满频谱,即
自行选择合适的采样率刻画信号波形,画出发射波形(细节)和功率谱
采样率选择符号速率的precision_N倍,这里在SNR较高时,precision_N取3已经足够;当SNR提高时,需要适当提高precision_N来提高采样率。
先将随机生成的比特流message使用8PSK映射为符号;
选取precision_N = 16,用冲激串加载符号 刻画“连续”波形得到下图(左侧为实部,右侧为虚部,只取前20个采样点进行示意):
在此基础上,信号过根号升余弦滤波器得到连续波形:
要发送信号我们需要将低频信号升频:
u_t = s_t .* exp(1j * (omega_0 * t));
u_t = real(u_t);u(t)即为要发送的连续波形,发射波形(细节)和功率谱如下:
按该采样率产生一定功率谱密度
$n_0$ 的AWGN,叠加在一定功率的调制信号上,作为接收机输入,画出叠加噪声的接收信号波形(细节)和功率谱
使用MATLAB的awgn()函数添加噪声 设定信噪比为SNR = 20,可以看到频谱上有噪声叠加,波形与未叠加噪声前的波形存在差异。
编写解调判决模块,统计误比特率与
$E_b/n_0$ 的关系
这里首先要导出MATLAB函数awgn()的参数SNR与
由于使用8PSK,单符号的平均能量为
由于传输的信号占满
得
在main_noRSA_1_4_analysis.m中,选取Ebn0_array = [0.01, 0.1:0.1:5];,计算出SNR后重复实验多次(experiment_times)取平均得到BER_array
subplot(1, 2, 1);
loglog(Ebn0_array, BER_array, "x-"); xlabel("E_b/n_0"); ylabel("BER");
subplot(1, 2, 2);
semilogy(SNR_array, BER_array, "o-"); xlabel("SNR (dB)"); ylabel("BER");得到如下结果:
引入卷积码,自行选择编码参数(效率)和调制参数,说明理由
信道无码间串扰的最大传输速率为
具体选择方式如下:
SK_way = 'PSK'; SK_M = 8;
n = log2(SK_M); k = 1; m = 4;
% 注意这里n=2的话就选QPSK n=3的话就选8PSK 因为软解的话这两个值必须相同
A = cat(3, [1 1 1], [1 0 1], [0 1 1], [1 1 1]);
zero_begin = 1; % 从零状态开始
zero_end = 1; % 收尾最大传输的比特速率为
编写相应的信道编码(含调制),画出发射波形(细节)和功率谱,接收机入口信号波形和功率谱
编写相应的接收机,完成从接收波形到最终信源比特的恢复
与1.1类似,在符号映射前添加卷积码编码:
conv_encoded_message = conv_encode(message, n, k, m, A, zero_begin, zero_end, p);
...
a_n = PSK(conv_encoded_message, SK_M, r);发射波形和功率谱与前面的没有很大的区别(其中u(t)为升频后实际发送的波形):
接收时则根据硬或软Viterbi选择不同的距离函数和判决方式:
if viterbi_mode == 0 % hard
distance = @(b, a)(hard_distance(b, a, 2));
message_rec = iPSK(y_n, SK_M); % 注意 这一步将采样得到的实数接受序列变成了01比特流(对应卷积码编码结束后的conv_encoded_message)
message_rec = viterbi_decode(message_rec, n, k, m, A, viterbi_mode, p, distance); % 传入的message_rec是01序列
else % soft
distance = @(z, y)(sum(abs(PSK(y, SK_M, r) - z).^2, 2));
message_rec = viterbi_decode(y_n, n, k, m, A, viterbi_mode, p, distance); % 注意 这里传入软判的序列是直接采样得到的实序列
disp(length(message_rec))
end由于前面使用收尾的方式,最后要去尾零:
message_rec = message_rec(1:length(message));最终得到的message_rec即为Viterbi解码后的码流
统计硬判决和软判决的误比特率与
$E_b/n_0$ 的关系(注意$E_b$ 是平均传输每个信源比特所需要的接收信号分量的能量)
与1.4类似,运行main_noRSA_1_7_analysis.m,修改其中的 viterbi_mode = 0; % 0 hard 1 soft,每个点跑5次取平均,得到下图:
可以看到软解的误比特率约比硬解的小一个量级。
设计一种加密机制(繁简自便,但要有明确的算法说明):
-
RSA算法:
前置工作:生成两个大素数p与q,这个RSA的加密算法的核心参数就是$N=pq$。其欧拉函数$\phi(N)=(p-1)(q-1)$。再生成公钥与私钥,一个是大于$p,q$且与$\phi(N)$互质的数e,而另一个是满足$de=1(mod\ \phi(N))$的数字。这两个数一个公开一个保密
在加密段,对明文进行$c=m^e(mod\ N)$的操作得到密文c
在解密端,对密文进行$m=c^d(mod\ N)$的操作得到明文m
核心是生成大素数,我们采用Miller-Rabin素性检验解决。
-
EIGamal算法:
前置工作:生成一个大素数p(仍然使用Miller-Rabin素性检验),找到GF(p)内的一个本原元g**(实际上p是素数的话本原元随便取一个就行)**。然后取2~p-1之间的任意一个数d我作为私钥,计算$y=g^d(mod\ p)$。y也是公钥的一部分。由于循环域内对数操作的难解性,Eve很难从公钥y,g,p中解密出私钥d。
在加密段:首先生成加密参数k,然后计算$U=y^k=g^{dk}(mod\ p)$。然后生成两个传输的参数。一个是参照项$c_1=g^k(mod\ p)$,第二个是信息项$c_2=(U\times m)(mod\ p)$。(其中m是明文)。$c1,c2$一起被传输
在解密段,首先利用$c_1$将加密段生成的加密参数k破译:$V=c_1^d=g^{dk}(mod\ p)$。然后取V的逆作为加密操作U的逆操作,解密只需要$m=c_2\times V^{-1}(mod\ p)$
-
DES算法:
算法极其复杂,在此只提供流程图(在文件夹里)
安全、信道编码联调:
- 无加密:观察不同信噪比条件下,误码图案
- 有加密:观察不同信噪比条件下,误码图案








