欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

MATLAB在通信系统仿真中的注意

发布时间:2025/3/15 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 MATLAB在通信系统仿真中的注意 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

原文链接:(更多文章移步链接)

MATLAB在通信系统仿真中的注意 - 子木的文章 - 知乎 https://zhuanlan.zhihu.com/p/46668425

1.调用函数fourier和ifourier之前,需用syms命令对所用到的变量进行说明,即将这些变量说明成符号变量。

clear all
syms t;
f=t*exp(-abs(t));
subplot(121);ezplot(f);
F=fourier(f);
subplot(122);ezplot(abs(F));

 

2.采用fourier和ifourier得到的返回函数,仍是符号表达式。若作图,应用ezplot而不是plot。若返回函数有如狄拉克函数  等。则用ezplot也无法作图。

clear all syms t w; F=pi*exp(-abs(w)); subplot(121);ezplot(abs(F)); f=ifourier(F,t);%因为返回是关于x的函数,所以指定返回t的函数。 subplot(122);ezplot(f);

plot是绘制二维图形,并且是x,y的表达式是已知的或者是形如y=f(x)这样确切的表达式,而ezplot是画出形如f(x,y)=0这种隐函数图形。

 

3.严格的说,只有非周期信号才有Fourier变换。(不满足绝对可积)但若满足Dirichlet条件,可展开为Fourier级数。 是k次谐波处的Fourier系数。  是谐波幅度的概念,  是频谱密度的概念。

 

4.离散时间信号的Fourier变换,两个特点:

(1)变换是用于无限长的序列;

(2)变换的结果是自变量  的连续函数。

*两个序列的循环卷积序列:

clear all h=[6 3 4 2 1 -2];%产生信号序列 x=[3 2 6 7 -1 -3]; h1=fliplr(h); H=toeplitz(h,[h(1) h1(1:5)]); y=H*x';H=fft(h); X=fft(x); Y=H.*X; y1=ifft(Y);subplot(211);stem(y);title('直接计算') subplot(212);stem(y1);title('DFT计算')

*DFT对应循环卷积而不对应线性卷积。若用DFT进行线性卷积,需对两长度分别为M,L的序列都扩展为长度为M+L-1的新序列。例子及程序如下:

clear all n1=0:20; n2=0:10; %%直接法 h=sinc(0.2*n1);%两序列 x=exp(-0.2*n2); y=conv(x,h); %%DFT法 h1=[h zeros(1,length(x)-1)]; x1=[x zeros(1,length(h)-1)]; H1=fft(h1); X1=fft(x1); Y1=H1.*X1; y1=ifft(Y1);subplot(211);stem(y);title('直接计算') subplot(212);stem(y1);title('DFT计算')

 

5.加性高斯白噪声(AWGN)表现为信号围绕平均值的一种随机波动过程。加性高斯白噪声的均值为0,方差为噪声功率的大小。一般情况下,噪声功率越大,信号的波动幅度越大,接收端接收到的信号的误比特率就越高。

awgn(x,snr)%把加性高斯白噪声叠加到输入信号中,snr以dB的形式指定噪声的功率

*awgn函数使用方法:

awgn将白色高斯噪声添加到信号中

语法

y = awgn(x,snr)

y = awgn(x,snr,sigpower)

y = awgn(x,snr,'measured')

y = awgn(x,snr,sigpower,state)

y = awgn(x,snr,'measured',state)

y = awgn(...,powertype)

描述

y = awgn(x,snr)将白高斯噪声添加到向量信号x中。标量snr指定了每一个采样点信号与噪声的比率,单位为dB。如果x是复数的,awgn将会添加复数噪声。这个语法假设x的能量是0dBW。

y = awgn(x,snr,sigpower)和上面的语法相同,除了sigpower是x的能量,单位为dBW。

y = awgn(x,snr,'measured')和y = awgn(x,snr)是相同的,除了agwn在添加噪声之前测量了x的能量。

y = awgn(x,snr,sigpower,state)和y = awgn(x,snr,sigpower)是相同的,除了awgn首先重置了正态随机数产生器randn的状态为整数状态。

y = awgn(x,snr,'measured',state)和y = awgn(x,snr,'measured')是相同的,除了awgn首先重置了正态随机数产生器randn的状态为整数状态。

y = awgn(...,powertype)和前面的语法相同,除了字符串powertype指定了snr和sigpower的单位。powertype的选择有'db' and 'linear',如果powertype是'db',那么snr是按照dB为单位测量的,sigpower是按照dBW为单位测量的。如果powertype是线性的,snr是按照一个比率测量的,sigpower是以瓦特为单位测量的。Relationship Among SNR, Es/N0, and Eb/N0

对于SNR和其他的噪声相对能量测量的关系,查看Describing the Noise Level of an AWGN Channel。

clear all t=0:0.001:10; x=sin(2*pi*t); snr=20;%噪声功率为20dBW y0=awgn(x,snr);%将高斯白噪声叠加到信号上 y1=awgn(x,snr,10);%y1=awgn(x,snr,sigpower)假设了输入信号功率为sigpower单位dBW y2=awgn(x,snr,'measured');%首先计算输入信号的功率,然后按照snr添加相应的高斯白噪声 subplot(411);plot(t,x);title('正弦信号x'); subplot(412);plot(t,y0);title('叠加了高斯白噪声后的正弦信号0');%若未说明输入信号功率,则假设为0dBW subplot(413);plot(t,y1);title('叠加了高斯白噪声后的正弦信号1');%因为输入信号实际功率(输入函数是0.5)小于10dBW,图是根据给出的输入信号功率画的 subplot(414);plot(t,y2);title('叠加了高斯白噪声后的正弦信号2');%(添加的噪声功率根据实际给出输入信号的信号功率计算得出)z0=y0-x; var(z0);%均方差

 

6.上面的例子太简单,下面看这样一个例子:

*仿真正交相移键控(QPSK)调制的基带数字通信系统通过AWGN信道的误符号率(SER)和误比特率(BER),假设发射端信息比特采用Gray编码影射,基带脉冲采用矩形脉冲,仿真时每个脉冲的采样点数为8,接收端采用匹配滤波器进行相干解调。

代码如下:

%% % .::::. % .::::::::. % ::::::::::: % ..:::::::::::' % '::::::::::::' % .:::::::::: % '::::::::::::::.. % ..::::::::::::. % ``:::::::::::::::: % ::::``:::::::::' .:::. % ::::' ':::::' .::::::::. % .::::' :::: .:::::::'::::. % .:::' ::::: .:::::::::' ':::::. % .::' :::::.:::::::::' ':::::. % .::' ::::::::::::::' ``::::. % ...::: ::::::::::::' ``::. % ```` ':. ':::::::::' ::::.. % '.:::::' ':'````.. % clear all nSamp=8;%矩形脉冲的采样点数 numSymb=200000;%每种SNR下传输的符号数 M=4;%QPSK的符号类型数 SNR=-3:3;%SNR的范围 grayencod=[0 1 3 2 ];%Gray编码格式 for ii=1:length(SNR)msg=randsrc(1,numSymb,[0:3]);%产生发送符号,1行numSymb列0-3的数。msg_gr=grayencod(msg+1);%进行Gray编码影射(格雷码)msg_tx=pskmod(msg_gr,M);%QPSK调制msg_tx=rectpulse(msg_tx,nSamp);%矩形脉冲成型msg_rx=awgn(msg_tx,SNR(ii),'measured');%通过AWGN信道msg_rx_down=intdump(msg_rx,nSamp);%匹配滤波相干解调msg_gr_demod=pskdemod(msg_rx_down,M);%QPSK解调[dummy graydecod]=sort(grayencod);graydecod=graydecod-1;msg_demod=graydecod(msg_gr_demod+1);%Gray编码逆映射[errorBit BER(ii)]=biterr(msg,msg_demod,log2(M));%计算BER[errorSym SER(ii)]=symerr(msg,msg_demod);%计算SER end scatterplot(msg_tx(1:100))%画出发射信号星座图 title('发射信号星座图') xlabel('同相分量') ylabel('正交分量') scatterplot(msg_rx(1:100))%画出接收信号星座图 title('接收信号星座图') xlabel('同相分量') ylabel('正交分量') figure semilogy(SNR,BER,'-r*',SNR,SER,'-r*')%画出BER和SER随SNR变化的曲线 legend('BER','SER') title('QPSK在AWGN信道下的性能') xlabel('信噪比(dB)') ylabel('误符号率和误比特率')

*仿真8-PSK载波调制信号在AWGN信道下的误码率和误比特率性能,并与理论值比较。假设符号周期为1s,载波频率为10Hz,每个符号周期内采样100个点。程序如下:

clear all nsymbol=10000; %每种信噪比下的发送符号数 T=1; %符号周期 fs=100; %每个符号的采样点数 ts=1/fs; %采样时间间隔 t=0:ts:T-ts; %时间向量 fc=10; %载波频率 c=sqrt(2/T)*exp(j*2*pi*fc*t); %载波信号 figure(1),plot(t,c); c1=sqrt(2/T)*cos(2*pi*fc*t); %同相载波 figure(2),plot(t,c1); c2=-sqrt(2/T)*sin(2*pi*fc*t); %正交载波 figure(3),plot(t,c2); M=8; %8-PSK graycode=[0 1 2 3 6 7 4 5]; %Gray编码规则 EsN0=0:15; %信噪比, Es/N0 snr1=10.^(EsN0/10); %信噪比转换为线性值,倍数 msg=randint(1,nsymbol,M); %消息数据 msg1=graycode(msg+1); %Gray映射,将序列msg+1编成格雷码取出 figure(4),plot(msg,msg1); msgmod=pskmod(msg1,M).'; %基带 8-PSK调制 figure(5),scatterplot(msgmod); tx=real(msgmod*c); %载波调制 tx1=reshape(tx.',1,length(msgmod)*length(c)); % B = reshape(A,m,n) 将矩阵A的元素返回到一个m×n的矩阵B。 figure(6),plot(tx1); spow=norm(tx1).^2/nsymbol; %求每个符号的平均功率,n=norm(A)返回A的最大奇异值,即max(svd(A)) for indx=1:length(EsN0) sigma=sqrt(spow/(2*snr1(indx))); %根据符号功率求噪声功率 rx=tx1+sigma*randn(1,length(tx1)); %加入高斯白噪声,randn 生成标准正态分布的伪随机数(均值为0,方差为1) rx1=reshape(rx,length(c),length(msgmod)); r1=(c1*rx1)/length(c1); %相关运算 r2=(c2*rx1)/length(c2); r=r1+j*r2; y=pskdemod(r,M); %PSK解调 decmsg=graycode(y+1); [err,ber(indx)]=biterr(msg,decmsg,log2(M)); %误比特率,biterr(x,y)是比特的误码率,symerr(x,y)是符号的,在二进制时,它两一样 [err,ser(indx)]=symerr(msg,decmsg); %误符号率 end ser1=2*qfunc(sqrt(2*snr1)*sin(pi/M)); %理论误符号率,误差函数 ber1=1/log2(M)*ser1; %理论误比特率 figure(7),semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,ser1,EsN0,ber1,'-k.');%semilogx函数,semilogy函数,即后标为x的是在x轴取对数,为y的是y轴坐标取对数。 title('8-PSK载波调制信号在AWGN信道下的性能') xlabel('Es/N0');ylabel('误比特率和误符号率') legend('误比特率','误符号率','理论误符号率','理论误比特率')

 

7.matlab中各种线型-颜色-标记点

各种颜色属性选项

'r' 红色 'm' 粉红

'g' 绿色 'c' 青色

'y' 黄色 'k' 黑色

 

各种线型属性选项

'-' 实线 '--' 虚线

':' 点线 '-.' 点划线

 

各种标记点属性选项

'.' 用点号绘制各数据点 '^' 用上三角绘制各数据点

'+' 用'+'号绘制各数据点 'v' 用下三角绘制各数据点

'*' 用'*'号绘制各数据点 '>' 用右三角绘制各数据点

' .' 用'.'号绘制各数据点 '<' 用左三角绘制各数据点

's'或squar 用正方形绘制各数据点'p' 用五角星绘制各数据点

'd'或diamond用菱 形绘制各数据点 'h' 用六角星绘制各数据点

这些选项可以连在一起用,如:'-.g'表示绘制绿色的点划线,'g+'表示用绿

色的 '+'号绘制曲线.

 

注意:

1)表示属性的符号必须放在同一个字符串中;

2)可同时指定2~3个属性;

3) 与先后顺序无关;

4)指定的属性中,同一种属性不能有两个以上.

与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是生活随笔为你收集整理的MATLAB在通信系统仿真中的注意的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。