基于CGAN恢复陷窄带干扰信号的通信系统测试

一、系统框架

通信系统的一般框架如下图所示。实际通信系统不一定包含图中的所有环节,本设计是数字带通传输系统,但仿真中省略了上变频、下变频部分。并且省略了信源编码、加密、信道编码部分,直接产生随机二进制序列进行QPSK映射。另外,在上采样后,对信号添加了AWGN和窄带干扰,下采样后陷波陷掉窄带干扰,然后进行解调译码等,在不同的参数下,测试系统的抗干扰性能。当系统有频率偏移时,采用PLL锁相环对频偏进行矫正,测试不同频偏下的BER,锁相会引入相位模糊,通过插入导频的方式解决。
在这里插入图片描述

如图所示为本设计的系统结构之一。随机产生的二进制序列经过QPSK、成型滤波、上采样后,直接下采样得到的信号clean_signals为CGAN的标签。上采样后的信号经过加性高斯白噪声、窄带噪声,加频偏后通过匹配滤波、下采样,后陷波、载波同步、消除相位模糊。如果不经过锁相,那么陷波后的信号即为CGAN网络的输入,如果经过锁相,那么经过载波同步、消除相位模糊的信号为CGAN网络的输入。输入信号学习标签,生成的信号再送入MATLAB计算BER。在实验数据1~4中采用的是这种结构。
在这里插入图片描述

下图所示为本设计的另一个系统结构。加窄带高斯后,先陷波,在PLL同步、消除相位模糊,然后匹配滤波和下采样。在实验数据5(包括)及以后的部分采用此结构。后续可以将第一种结构作为baseline对比。
在这里插入图片描述

二、系统参数

参数内容
调制方式QPSK
符号速率2e8
成型滤波器点数8
匹配滤波器点数8
带宽100M
窄带范围[4e7,5e7](10M)
陷波带宽10M/15M/20M
上采样倍数2/4
采样频率4e8/8e8
信噪比8dB/5dB
信干比-10dB/-20dB/-30dB
频偏0/2000/4000/5000
EbN08dB

三、基础知识

1.EbN0与SNR关系

EbN0和SNR的关系在MATLAB的官方文档中有具体的说明,详见help awgn(在命令行输入即可):
在这里插入图片描述
EbN0 = SNR + 10log10(oversampled rate)-10log10(k),其中oversampled rate为上采样倍数,k为每个符号包含的比特数,当上采样倍数为2且调制方式为QPSK时,EbN0等于SNR。
在MATLAB中,我们可以使用bertool工具箱计算不同EbN0下的BER。 在本设计中,BER要求为10e-2,由图知EbN0大于等于4dB即可,由于bertool中的理论仿真是没有干扰的,所以我们设计中,保证EbN0大于7dB或者8dB即可。
在这里插入图片描述

2.锁相原理(参考MATLAB官方文档)

(1)载波同步

载波同步是基于锁相环技术使本地获取和载波同频同相的参考信号,用来解调信号。载波同步就是对本地参考信号进行频率和相位偏差的补偿,进而实现本地参考信号和载波信号同频同相。
comm.CarrierSynchronizer System object™ 用于补偿使用单载波调制方案的信号中的载波频率和相位偏移,创建并调用即可。载波同步器算法对于 BPSK、QPSK、OQPSK、8-PSK、PAM 和QAM 兼容。详见help comm.CarrierSynchronizer。

% 校正接收信号中的相位和频率偏移
carrierSync = comm.CarrierSynchronizer('SamplesPerSymbol',1,'Modulation','QPSK');
 % 对输入信号的频率偏移进行补偿
syncSignal(:,jj) = step(carrierSync,sig_r_trap(:,jj)); 

(2)相位模糊

同步算法会产生相位模糊问题,同步器引入的潜在相位模糊度取决于调制类型,如本设计中的QPSK引入的相位模糊可能是0、90、180、270。以下是解决相位模糊的代码。idx是随机选取的部分导频信号,通过这些符号来估计相位偏移,用于纠正相位模糊。

%%--------------------------- Phase ambiguity ---------------------------%%
idx = 1:50;
phOffset = angle(modSig(idx) .* conj(syncSignal(idx)));
phOffset = round((2/pi) * phOffset); % -1, 0, 1, +/-2
phOffset(phOffset==-2) = 2; % Prep for mean operation
phOffset = mean((pi/2) * phOffset); % -pi/2, 0, pi/2, or pi
disp(['Estimated mean phase offset = ',num2str(phOffset*180/pi),' degrees'])
%%------------------------------ Phase Shift ----------------------------%%
resPhzSig = exp(1i*phOffset) * syncSignal;

四、CGAN网络

五、部分实验数据

1.第一部分实验数据:上采样倍数16,EbN0为19.03dB(SNR=10dB)

参数内容
EbN019.03dB
信噪比10dB
上采样倍数16
采样频率32e8
信干比-10dB/-20dB/-30dB
频偏0~5000

(1)SIR=-10dB,SNR=10dB,不同频偏下加锁相的BER和BER(afterGAN)

结论:SIR=-10dB,SNR=10dB,频偏0~10kHz,锁相后BER为10e-2量级,通过GAN增强后BER降低至10e-3量级。
在这里插入图片描述

(2)SIR=-10dB,SNR=10dB,相同频偏下,加锁相和不加锁相的BER和BER(afterGAN)

结论:
2.SIR=-10dB,SNR=10dB,当FrequencyOffset<5000时,不锁相效果更好;当FrequencyOffset≥5000时,锁相后BER更低。BER为10e-2量级,通过GAN增强后BER降低至10e-3量级。
在这里插入图片描述

(3)SNR=10dB,SIR=-20dB,相同频偏下,加锁相和不加锁相下的BER和BER(afterGAN)

结论:
3.SIR=-20dB,SNR=10dB,当FrequencyOffset≤5000时,不锁相效果更好,BER为10e-2量级,通过GAN增强后BER降低。
在这里插入图片描述

(4)SNR=10dB,SIR=-30dB,相同频偏下,加锁相和不加锁相下的BER和BER(afterGAN)

结论:
4.SIR=-30dB,SNR=10dB,当FrequencyOffset≤5000时,不锁相效果更好,BER为10e-1量级,通过GAN增强后BER降低至10e-2量级。锁相后BER为0.5左右。
在这里插入图片描述

(5)SNR=10dB,相同频偏,不加锁相,不同SIR下的BER和BER(afterGAN)

结论:
5.当FrequencyOffset≤5000、SIR≥-30dB且不加锁相时,GAN能有效降低BER。
在这里插入图片描述

(6)SNR=10dB,相同频偏,加锁相,不同SIR下的BER和BER(afterGAN)

结论:
6.当FrequencyOffset≤5000、SIR≥-20dB且加锁相时,GAN能有效降低BER。SIR=-30dB时且加锁相时,BER为0.5,且生成器不收敛。
在这里插入图片描述
实际系统中,上采样倍数没有这么高,为和硬件保持一致,设置为2或者4。

2.第二部分实验数据:上采样倍数2/4

参数内容
EbN08dB
信噪比8dB
上采样倍数2/4
采样频率4e8/8e8
信干比-10dB/-20dB/-30dB
频偏0/2000/5000

(1)sps=2,SNR=8dB,不加锁相,相同频偏不同SIR下的BER和BER(afterGAN)

在这里插入图片描述

(2)sps=4,SNR=5dB,不加锁相,相同频偏不同SIR下的BER和BER(afterGAN)

在这里插入图片描述

3.第三部分实验数据:每帧符号数为16384,上采样倍数为2/4

(1)频率分辨率

频率分辨率是指所用的算法能将信号中两个靠得很近的谱峰保持分开的能力。DFT频率分辨率为Δf=fs/N。
实际应用时,可以将频率分辨率理解为频谱图中,在频率轴(频谱图的水平轴))上得到的最小频率间隔如果采样频率为fs,采样时间间隔为t,采样点数为N,采样时间为t(完成一组样本的采集所需要的时间),则频率分辨率为:f0 = fs/N = 1/t。所以信号长度越长,频率分辨率越好。
为了使陷波更加精准,将每帧符号数修改为16384,最后生成的clean_signals和noise_signals均reshape为[frame,1024,16]输入CGAN。

(2)实验参数

参数内容
EbN08dB
信噪比8dB
上采样倍数2
采样频率4e8
信干比-10dB/-20dB/-30dB
频偏0/2000/5000

(3)实验结果

不加PLL时,每帧符号数16384,上采样倍数为2,EbNo = SNR = 8dB
结论:当符号数增加为16384后,频偏为0时BER有所提升;频偏不为0时,BER增大。原因如下。
在这里插入图片描述

(4)原因分析

如下是代码中添加频偏的部分:

Rs = 2e8;                          % 符号速率
sps = 2;                           % 上采样倍数
fs = sps * Rs;                     % 采样频率
symbol_num = 16384;
f_shift = 2000;                        % 频率偏移
t0 = (0:symbol_num*sps-1)/fs;
% 加频偏
channel_out_delay(:,jj) = channel_out(:,jj).*exp(1j*2*pi*f_shift*t0');
plot(t0,real(exp(1j*2*pi*f_shift*t0')));

以频偏为2000为例,不同符号数的指数信号实部时域图像如图所示。
符号数为1024时,值基本上都在0.99附近,所以频偏对信号影响就比较小。符号数增长后,信号衰减较大,导致了BER变高。序列越长、频偏越大,对BER的影响越大。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.第四部分实验数据:每帧符号数16384,上采样倍数为2,EbNo = SNR = 8dB

结论:当信干比为-10dB时,陷波15M效果更好;当信干比为-20dB时,陷波20M效果更好;当信干比为-30dB时,陷波应该更多。(符号序列长度、频偏不影响陷波的多少)
在这里插入图片描述

5.第五部分实验数据:

之前系统结构不对,接收端应该是陷波-PLL-匹配-下采,而不是匹配-下采-陷波-PLL。系统结构改变后,数据下表所示:

(1)表5.1 SNR=8dB,相同频偏不加PLL不同SIR下的BER(先陷波)和BER(先匹配)

在这里插入图片描述
结论:没有锁相时,总体来说是更改后的系统结构更好,且下采样时应该用OM插值点。

(2)表5.2 SNR=8dB,相同频偏加PLL不同SIR下的BER(先陷波)和BER(先匹配)

在这里插入图片描述
结论:加锁相后,接收端先匹配下采后陷波PLL(更改前的系统结构)效果更好。表5.1和5.2对比,不锁相效果更好。

6.第六部分实验数据

用16384点陷波时,并没有让BER提高,可能是因为陷波不加过渡带是10M,加上过渡带可能是15M、16M,所以调整干扰,使得干扰加上过渡带后一共10M,然后陷10M测试BER。(事实上不对,因为以前也陷15M,肯定陷干净了,看频谱图也知道陷干净了,这样做只不过给干扰减小了)
干扰+过渡带一共10M时,加的干扰只有4~5M。

(1)干扰5M,陷波10M,不加锁相,对比不同符号数对BER的影响

在这里插入图片描述
结论:当符号数增加为16384后,频偏为0时BER有所提升;频偏不为0时,BER增大。

(2)每帧符号数16384,干扰5M,陷波10M,对比锁相和不锁相对BER的影响

在这里插入图片描述
结论:当符号数增加为16384后,频偏不为0时,累计频偏变大,PLL有效,所以BER提升。(与之前的结论是一致的)

(3)干扰4M,陷波10M,不加锁相,对比不同符号数对BER的影响

在这里插入图片描述
结论:当符号数增加为16384后,频偏为0时BER有所提升;频偏不为0时,BER增大。

(4)每帧符号数16384,干扰4M,陷波10M,对比锁相和不锁相对BER的影响

在这里插入图片描述
结论:当符号数增加为16384后,频偏不为0时,累计频偏变大,PLL有效,所以BER提升。(与之前的结论是一致的)

7.第七部分实验数据

符号数改为16384后,当频偏不为0时,BER会变大。为了解决这个问题,引入多普勒频偏,多普勒频偏的最大值设置为5kHz。

六、实验中报错及解决

1.转置导致BER高的问题

MATLAB中,复数信号的矩阵转置为共轭转置,如果仅仅需要转置,不能使用以下代码进行转置。

Sig = rxsig';

在命令行中进行测试:
在这里插入图片描述
因此,在转置时导致了数据共轭,而数据维度正确从而不会报错,导致BER在0.5左右。
正确的转置代码如下:

Sig = rxsig.';

2.画图出现的陷波不完全问题

修改系统结构后,从匹配-下采-陷波-PLL到陷波-PLL-匹配-下采。第一种系统结构,画陷波后数据时已经下采过了,所以是channel_out_r(1:symbol_num,pp),symbol_num=1024。修改系统结构后,陷波之后还没下采,应该横坐标是2048个点,channel_out_r(:,pp)。如果还用channel_out_r(1:symbol_num,pp)就会出现陷波好像没陷干净的问题。

3.comm.QPSKModulator和pskmod

matlab中提示:以后的版本中将会删除’comm.QPSKModulator’。请对代码进行相应更改后改用’pskmod’。
y = pskmod(x,M,phaseoffset,symorder,InputType=‘bit’)
其中, Input type, specified as either ‘integer’ or ‘bit’.
‘integer’ –– Input signal consists of integers in the range [0, M–1].
‘bit’ –– Input signal consists of binary values and the number of rows must be an integer multiple of log2(M).
接下来两种都给个示例:
首先是integer输入:

		M = 4;
        symbol_num = 1024;
        % 产生随机二进制序列
        msg(:,jj) = randi([0 M-1], symbol_num , 1);   
        % 调制
        msgmod(:,jj) = pskmod(msg(:,jj),M,pi/M,'gray');     

在这里插入图片描述
在这里插入图片描述

其次是bit输入:

		M = 4;
        symbol_num = 1024;
        % 产生随机二进制序列
        msg(:,jj) = randi([0 1], 2*symbol_num , 1);   
        % 调制
        msgmod(:,jj) = pskmod(msg(:,jj),M,pi/M,'gray',InputType='bit');  

在这里插入图片描述

在这里插入图片描述
对应关系是一致的,黑色的是bit,红色的是integer,蓝色的是qpsk调制的结果。采用的是格雷码编码方式。
调制的输入为InputType=‘bit’,解调的输出为OutputType=‘bit’,可以测误比特率;如果是InputType=‘integer’,OutputType=‘integer’,可以测误码率。

  • 56
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值