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在通信系统仿真中的注意的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pcl完整分割聚类流程
- 下一篇: 通信工程专业的一些小知识点