自寫
%QPSK
close all;clc;
%思路:1.輸入一組隨機初始信息x=[01矩陣];
% 2.按兩兩一組通過for循環判別4種組合,分別對應星座圖4個點
% 3.做星座圖
% a.過程中考慮過將01序列兩兩分開表示出來,不知是否有必要,未實現
% b.考慮兩兩分開后直接定位一個組合,映射到星族圖,未實現.利用y-
a=randi([0,1],1,20) %產生一組隨機初始信息矩陣
[r,c] = size(a) % 讀取行r、列c
y=[]; p=1;
for u = 1:r % 建立for循環嵌套
for t=1:2:c
k=t+1;
if a(u,t)==0&&a(u,k)==0
y(p)=-1-1i;
elseif a(u,t)==0&&a(u,k)==1
y(p)=-1+1i;
elseif a(u,t)==1&&a(u,k)==0
y(p)=1-1i;
else a(u,t)==1&&a(u,k)==1
y(p)=1+1i;
end
p=p+1;
end
end %for循環,將4中組合映射到星座圖位置
scatterplot(y) %畫星座圖
% v=pskdemod(y,4)
% scatterplot(v)
ys = awgn(y,10);
scatterplot(ys)
[n,m] = size(ys)
q=[];j=1;
for b=1:n % qpsk解調
for d=1:m
if abs(ys(b,d))<0&&imag(ys(b,d))<0
q(b,j)=0;q(b,j+1)=0;
elseif abs(ys(b,d))<0&&imag(ys(b,d))>0
q(b,j)=0;q(b,j+1)=1;
elseif abs(ys(b,d))>0&&imag(ys(b,d))<0
q(b,j)=1;q(b,j+1)=0;
else abs(ys(b,d))>0&&imag(ys(b,d))>0
q(b,j)=1;q(b,j+1)=1;
end
j=j+2;
end
end
ys
a
q
numErrs = symerr(a,q) %輸出與輸入相比,計算錯誤比特數
歸一化相關轉于:https://blog.csdn.net/hudada19/article/details/97623075
星座映射歸一化因子是如何得到的?
答:所有能量求平均后開方得到的就是波形幅度值,其倒數就是歸一化因子。比如,
比如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),其他類推。
能量(功率)歸一化有什么用?
答:添加功率歸一化因子,目的在于使得不同調制方式(或者說對于所有映射方式)都能夠取得相同的平均功率。
實際上,歸一化是為了方便系統性能的比較,所以就要分清比較的模塊是什么。比如,信道編碼的增益問題,無論有無信道編碼,比特能量是一樣的,所以比較要以Eb/No為基準,而不是以進入信道前的符號能量Es/No為基準。再比如,在比較空時碼系統和單天線系統中,還是以進入時空碼編碼前信號能量為基準,那么發送時的總能量一致,即時空碼系統中各天線發射功率總和應和單天線系統發射功率相同。一般而言,歸一化都在發射端處理。
在仿真OFDM的IFFT變換時,為什么要乘以sqrt (fft的點數) 進行歸一化?
答:在matlab中做完IFFT后要乘以sqrt(fft的點數),這樣才能保證時域和頻域上的功率相同,否則在計算功率上容易出錯,如果不乘的話你只要知道也是可以的。至于信號功率歸一化,是為了更方便的計算SNR,是為了在相同的標準下比較性能。