1、仿真要求
通过MATLAB建模,模拟数字通信过程中对信号传输的影响,并通过计算误码率来评估传输信号质量的好坏。具体来说,该代码读取一张图片,经过调制、通道卷积和增加噪声的过程,以模拟传输信号受到的影响,然后进行解调并计算误码率,最终将解调后的信号重建成图片并进行显示。通过修改信噪比和调制阶数等参数来对数字通信模拟进行不同的测试和分析。
2、相关原理介绍
AWGN(Additive White Gaussian Noise)是指加性白噪声,即在信号传输过程中叠加的纯随机高斯分布噪声。AWGN是一种理想的噪声模型,它的主要特点是在频率域上是平坦的,而且各个频率成分之间是相互独立的。
而多径信道则是指信号在传播过程中受到多个路径干扰和衰落的影响,导致接收端收到的信号存在时延、失真、干扰等问题。 多径信道不仅有时域上的变化,而且还涉及较为复杂的衰落和多路干扰等问题。
因此,AWGN主要考虑信号传输过程中叠加的纯随机高斯分布噪声,多径信道则主要考虑信号传播过程中受到路径干扰和衰落等因素影响带来的问题。
在这次的仿真中,主要利用matlab的相关函数对两种信道传输模型中的各个部分的信号进行处理。
3、仿真步骤
模拟AWGN信道传输图片有以下步骤:
- 先是模拟信源将图片信息转成可以在信道上传输的比特流,用imread函数读取png文件,将输出的整型三维整型数组转为一维双精度型信号;
- 在模拟调制器调制时用qammod函数对信号进行16-QAM调制,计算调制后的信号的平均功率;
- 在模拟AWGN信道传输时,设置一定的传输信噪比,用awgn函数对信号进行加噪处理并输出复数信号(16-QAM调制要用4个比特位表示一个符号,所以需要使用复数信号;而且复数信号可以表示为实部和虚部的组合,它们可以用来表示振幅和相位信息。因此,在使用复数信号时,我们可以利用相位和幅度信息来抵消传输过程中的噪声、失真和其他干扰信号。);
- 在模拟解调器解调时用qamdemod函数进行正交振幅解调,并用biterr函数计算AWGN信道传输产生的误码率;
- 最后模拟信宿对图片进行重构时,先将一维信号用reshape函数恢复成三维数组,再用im2uint8函数将双精度型数据转为整型。至此便完成AWGN信道仿真的全过程。
模拟多径信道传输图片的步骤和AWGN信道基本相同,需要注意的是在第3步对信号进行加噪之前,要设置多径信道的单位冲激响应(在这次的仿真中我尝试将各径固定的响应改为随指定的衰减因子进行衰减)并与信号进行卷积运算(用conv卷积函数要注意添加‘same’参数,以确保卷积后信号长度和原来信号一致),以模拟多径传输过程中信号的多径干扰、时延扩散和失真等影响。
4、仿真结果
(a)-10dB,BER= 0.4764 (b)0dB,BER= 0.3998
(c)10dB,BER= 0.2368 (d)30dB,BER= 0.0001
图1 AWGN信道在不同信噪比下的仿真结果
(a)h=[0,1],BRE= 0.2848 (b)h=[-1,1],BRE= 0.5315
(c)h=[0,-1],BRE= 0.4358 (d)h=[1,1],BRE= 0.3642
(e)5径传输,BRE= 0.5542 (f)10径传输,BRE= 0.4198
(g)40径传输,BRE= 0.4512 (h)200径传输,BRE= 0.4887
图2 多径信道在不同冲击响应下的仿真结果
5、结果分析
从图1可以看出,在AWGN信道中,信噪比越高,接收到的信号质量就越好(误码率越小),图片的失真度就越小,所以,在无线通信中,通常希望能够提高信噪比,以保证通信系统的可靠性和稳定性。
从图2(a)(b)(c)(d)可以看出,在多径信道中固定信噪比,不同的冲击响应下,输出的结果也不一样。在二径传输信道中,当其中一径冲击响应为零时,其对另一径的影响最小,从而输出端接收的信号误码率较低,如图2(a);而当两个路径的响应相差较大时(即不等增益传输),会存在深渊和峰值现象,当其中一路信号强度较弱时,会形成深渊,即信号在该位置的能量很小,容易被噪声所覆盖;当其中一路信号强度较强时,则会形成峰值,即信号在该位置的能量很大,容易造成码间干扰,从而误码率较高,如图2(b)。当两个路径的冲击响应大小相等时(即等增益传输),在接收端会出现明显的时延扩展现象,即信号经过两条路径到达接收端的时间差较大,可能会导致码间干扰,因此误码率也相对较高,如图2(d)。但在在实际生活中,经常会出现两径以上的传输情况,而且各个路径的响应还会出现一定的衰减,为了尽可能还原实际的多径信道传输情况,我将固定的冲击响应改为随机的冲击响应,并且各个路径响应按照指定的衰减因子进行衰减,仿真得到图2的(e)(f)(g)(h),从图中可以看出,在随机衰减的多径响应下,误码率和路径数并不是正相关的关系,路径多误码率不一定高,有趣的是,当路径数达到几十的时候,如图(g),接收的照片出现了图像循环,为了看的更加清楚,我将路径数加到200,如图(h),经查阅资料明白这是由于传输路径中存在多个反射、干扰等引起的,为了避免这种问题,可以采用抗干扰性能更强的传输方案、减少反射和干扰等措施。
6、程序代码
% image +AWGN +multipath channel->communication under different SNR
clear;clc;clf;close all;
SNR= 15; %dB
%% Read Image
ImageIN=imread('coolLearn.PNG');
%pcode moduPath
[wid,len,depth]=size(ImageIN);
ImageIN=imread('coolLearn.PNG');
%以下5行是Im2Integer函数的复原
imdouble = double(ImageIN);%将整型变为双精度型
imdouble1 = imdouble(:,:,1);
imdouble2 = imdouble(:,:,2);
imdouble3 = imdouble(:,:,3);
x = [imdouble1(:);imdouble2(:);imdouble3(:)];%括号里冒号的作用是将所有元素排成一列
%% modulate, convolute with channel, add noise(调制,与信道卷积,增加噪声)
M = 256; % 调制阶数
h = [1 1];
% h = randn(1,10);%多径信道冲击响应,设置路径数
% 指定指数衰减因子
alpha = 0.5;
% 对h数组进行按指数衰减进行调整
for i = 1:length(h)
h(i) = h(i)*exp(-alpha*i);
end
%以下5行是moduPath函数的复原
y = qammod(x,M);%基带正交调制,调制阶数M
y = conv(y,h,'same');%y和h卷积,返回结果中心部分,大小与y相同
avgPower = mean(abs(y).^2);%信号的平均功率
yNormal = y./sqrt(avgPower);%
rxSig = awgn(yNormal,SNR,'measured');%根据信噪比添加噪声
%% Demodulate,and count the BER:bit error rate (解调,并计算误码率)
%以下2行是demoduBER函数的复原
rxData = qamdemod(rxSig*sqrt(avgPower),M);%正交振幅解调
[~,BER] = biterr(x,rxData)%计算误码率
%% reconstruct the image(重建图像)
%以下6行是Imager2IM函数的复原
rxData3 = reshape(rxData,wid*len,3);
resig = zeros(wid,len,3);
resig(:,:,1) = reshape(rxData3(:,1),wid,len);
resig(:,:,2) = reshape(rxData3(:,2),wid,len);
resig(:,:,3) = reshape(rxData3(:,3),wid,len);
%matlab默认图片double类型是0-1,只有0-1的数据才会被映射到0-255之间
ImageOUT = im2uint8(resig/M);%resig/M确保数据在复原时被正确映射
%% plot and save
subplot(2,1,1);
imshow(ImageIN)
title('The original image')
subplot(2,1,2);
imshow(ImageOUT)
imwrite(ImageOUT,'coolLearnNoise.PNG');
title('The demodulated image')