自寫
%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,是爲了在相同的標準下比較性能。