基于扩频信号的水声信道数据传输系统仿真,研究满足了WSSUS假设的瑞利信道模型,采用相干BPSK调制,联合多普勒Rake接收机,利用matlab仿真,在该算法在不同信噪比有良好的误码率。 下面是部分仿真代码和结果
水声通信这玩意儿就像在水下玩击鼓传花,多径效应和多普勒频移随时能把信号整得亲妈都不认识。今天咱们来扒拉一个基于扩频技术的传输系统,用Matlab折腾了个仿真,效果居然还不错?
先说说信道模型。这里用到了满足WSSUS假设的瑞利衰落信道,简单说就是信道特性在短时间内相对稳定。生成信道冲激响应的核心代码长这样:
taps = 5; % 多径数量 delay_spread = [0, 1e-3, 2.1e-3, 3.3e-4, 4.5e-3]; % 时延分布 h = (randn(1,taps) + 1i*randn(1,taps)) .* sqrt(exp(-delay_spread/0.001)); % 指数衰减这段代码里有个骚操作——用指数衰减模拟多径能量衰减。randn生成复高斯噪声模拟瑞利衰落,sqrt部分控制各径能量衰减速度。注意时延单位是秒,水声环境里毫秒级时延已经很要命了。
调制部分选了相干BPSK,毕竟水声信道信噪比低得感人。扩频用的是31位Gold序列:
gold_seq = comm.GoldSequence('FirstPolynomial',[5 2 0],'SecondPolynomial',[5 4 3 2 0]); spread_factor = 31; % 扩频因子 data_spread = kron(data, gold_seq()); % 数据扩频kron函数实现克罗内克积,把每个数据符号重复31次跟Gold序列相乘。这里有个隐藏知识点——Gold序列的互相关性好,适合多用户场景。虽然咱们是单用户仿真,但为后续扩展留了后手。
基于扩频信号的水声信道数据传输系统仿真,研究满足了WSSUS假设的瑞利信道模型,采用相干BPSK调制,联合多普勒Rake接收机,利用matlab仿真,在该算法在不同信噪比有良好的误码率。 下面是部分仿真代码和结果
接收端的大杀器是多普勒Rake接收机。核心是多径合并和多普勒补偿:
for p = 1:taps freq_shift = exp(1i*2*pi*doppler(p)*t); % 多普勒频移补偿 correlator(p) = sum(rcv_signal .* conj([zeros(1,delay(p)), h(p)*freq_shift(1:end-delay(p))])); end combined_signal = sum(correlator .* weights); % 最大比合并这个循环干了两件大事:先用复指数信号补偿多普勒频移,然后做信道匹配。weights向量保存各径的信道增益,实现最大比合并。注意delay(p)的单位要和采样率匹配,不然时延补偿会翻车。
跑完仿真得出来的误码率曲线挺有意思:在15dB信噪比时误码率就降到了1e-4量级。不过细看发现,当信噪比低于5dB时,曲线会出现平台效应——这时候多普勒估计误差开始主导性能损失。这说明Rake接收机在低信噪比时得多做几次迭代估计才行。
最后甩个仿真结果图(假装有图)。横轴信噪比从0到20dB,纵轴对数坐标的误码率曲线呈经典下滑趋势。在10dB处出现明显拐点,这时候扩频增益开始发威,把误码率从1e-2拽到1e-3量级。所以说啊,水声通信这玩意儿,信噪比不够的时候,就得靠扩频和分集技术来续命。