文章目錄
- 程式
- ps
- 調制思路
- 思考(不太懂)
- 歸一化相關
此代碼是對于基本原理的仿真,未考慮電路和載波!
程式
%此代碼實作QPSK調制與解調,并加噪做誤碼率曲線
close all;clc;
SNR=1:20; %信噪比變化范圍
snr=10.^(SNR/10); %將信噪比轉化成直角坐標
N=100000; %仿真點數
M=1;
a=randi([0,1],1,N); %產生一組隨機初始資訊矩陣
[r,c] = size(a); %讀取行r、列c
y=[];
for u=1:r %建立for回圈嵌套,尋找4種組合→映射到星座圖位置
p=1;
for t=1:2:c
k=t+1;
if a(u,t)==0&&a(u,k)==0
y(u,p)=-1-1i;
elseif a(u,t)==0&&a(u,k)==1
y(u,p)=-1+1i;
elseif a(u,t)==1&&a(u,k)==0
y(u,p)=1-1i;
else
y(u,p)=1+1i;
end
p=p+1;
end %"y1=pskmod(y0,M)"Matlab自帶的psk調制函式
end % "scatterplot(y)"可做畫星座圖 驗證
for i=1:length(SNR)
N0=1/2/snr(i); %計算噪聲功率
N0_dB=10*log10(N0); %將噪聲功率轉換為dBW
ni=wgn(1,N/2,N0_dB); %產生高斯噪聲
ys=y+ni; %通過高斯信道
[n,m] = size(ys);
q=[]; % BER_S=zeros(1,20);BER_S可預先分配空間,提升性能
for b=1:n % 與調制對應,用for回圈QPSK解調(將4個星座點資料輸出為01序列)
j=1;
for d=1:m
if real(ys(b,d))<0&&imag(ys(b,d))<0
q(b,j)=0;q(b,j+1)=0;
elseif real(ys(b,d))<0&&imag(ys(b,d))>0
q(b,j)=0;q(b,j+1)=1;
elseif real(ys(b,d))>0&&imag(ys(b,d))<0
q(b,j)=1;q(b,j+1)=0;
elseif real(ys(b,d))>0&&imag(ys(b,d))>0
q(b,j)=1;q(b,j+1)=1;
end
j=j+2;
end
end %"y2=pskdemod(y1,M)"Matlab自帶的psk解調函式
[number1,BER_S(i)] = symerr(a,q); %計算錯誤位元數和誤碼率(誤位元率)== bit_A=length(find(a~=q))%統計錯誤位元數 p=number1/N;
end
BER_T=1/2*erfc(sqrt(snr/2)); %AWGN信道下QPSK理論誤碼率
%繪制圖形
figure;
semilogy(SNR,BER_S,'-k*');hold on;
semilogy(SNR,BER_T,'-go');hold on;
legend('仿真','理論');
axis([-1,10,10^-4,1]);
title('QPSK誤碼性能分析');
xlabel('信噪比SNR(dB)');ylabel('BER');
ps
1.歸一化不太會(信號噪聲…)
2.加噪聲那塊感覺是有瑕疵的(調制出來后相當于初始序列縮短了一半)
3.通信小白,摸索ing
調制思路
1.輸入一組隨機初始資訊x=[01矩陣];
2.按兩兩一組通過for回圈判別4種組合,分別對應星座圖4個點
3.做星座圖
解調逆向操作即可
思考(不太懂)
1.調制程序中考慮過將01序列兩兩分開表示出來,不知是否有必要,未實作
2.考慮兩兩分開后直接定位一個組合,映射到星族圖,未實作.
[x=randi([0 3],12,1)
b1=dec2bin(x(😃) %按列優先轉換為2進制
c1=reshape(str2num(b1),3,4) %獲得兩個一組的3*4二進制矩陣,用double型別表示]
歸一化相關
轉于:Here
1.星座映射歸一化因子是如何得到的?
答:所有能量求平均后開方得到的就是波形幅度值,其倒數就是歸一化因子,比如,
比如16QAM,取值為,能量為2有4個星座點,為10有8個點(±1±3i),為18有4個點,共有能量72+80+8=160,然后這16個點的等概率分布是16分之1,所以要160除以16=10,這是平均能量,其平均后的波形幅度為sqrt(10),而QPSK共4個能量為2的星座,出現概率為四分之一,所以為8除以4=2,結果為sqrt(2),其他類推,
2.能量(功率)歸一化有什么用?
答:添加功率歸一化因子,目的在于使得不同調制方式(或者說對于所有映射方式)都能夠取得相同的平均功率,
實際上,歸一化是為了方便系統性能的比較,所以就要分清比較的模塊是什么,比如,信道編碼的增益問題,無論有無信道編碼,位元能量是一樣的,所以比較要以Eb/No為基準,而不是以進入信道前的符號能量Es/No為基準,再比如,在比較空時碼系統和單天線系統中,還是以進入時空碼編碼前信號能量為基準,那么發送時的總能量一致,即時空碼系統中各天線發射功率總和應和單天線系統發射功率相同,一般而言,歸一化都在發射端處理,
3.在仿真OFDM的IFFT變換時,為什么要乘以sqrt (fft的點數) 進行歸一化?
答:在matlab中做完IFFT后要乘以sqrt(fft的點數),這樣才能保證時域和頻域上的功率相同,否則在計算功率上容易出錯,如果不乘的話你只要知道也是可以的,至于信號功率歸一化,是為了更方便的計算SNR,是為了在相同的標準下比較性能,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246988.html
標籤:其他
上一篇:【MATLAB有趣玩法】如何使用matlab打開pdf、播放視頻等,這些都很easy~(教你學習ActiveX)
