?? ofdm_16qam.m
字號:
clear;
close all;
clc;
disp('請按任意鍵繼續......')
pause
snr=input('請你輸入信號經信道時的信噪比snr(以dBW為單位):');
N=64;%N為載波數,即一個OFDM符號的長度
%----------------------------發射部分----------------------------
for k=1:N
X(k)=fix(rand()*16);%隨機產生64個[0,15]之間的整數
X1(k)=QAM16_mod(X(k));%進行星座圖映射,X 可以認為是已經進行串/并轉換后的輸出信號
end
disp('原輸入的數據為:')
disp(X)
figure(1)
plot(real(X1),imag(X1),'.r');
title('隨機輸入數據的星座圖');
xlabel('An(實部)');
ylabel('Bn(虛部)');
X2=ifft(X1,N);%對X進行傅里葉反變換
X3=[X2((N-0.25*N+1):N),X2];%在該OFDM符號中加入循環前綴
X4=awgn(X3,snr);%接收機最終接收的信號
figure(2)
subplot(2,2,1)
plot(1:numel(X3),real(X3),'r');
title('加入噪聲前的信號波形(實部部分)');
subplot(2,2,3)
plot(1:numel(X4),real(X4),'r');
title('加入噪聲后的信號波形(實部部分)');
subplot(2,2,2)
plot(1:numel(X3),imag(X3),'b');
title('加入噪聲前的信號波形(虛部部分)');
subplot(2,2,4)
plot(1:numel(X4),imag(X4),'b');
title('加入噪聲后的信號波形(虛部部分)');
%------------------------------接收部分------------------------------
Y1=X4(0.25*N+1:N+0.25*N);
Y2=fft(Y1,N);
figure(3)
plot(real(X1),imag(X1),'.r',real(Y2),imag(Y2),'.b');
title('接收的OSDF符號的星座圖')
xlabel('An(實部)');
ylabel('Bn(虛部)');
for k=1:numel(Y1)
[Y(k),Y3(k)]=QAM16_demod(Y2(k));
end
disp('接收機最終得到的數據為:')
disp(Y)
error=0;%解調后錯誤的個數
for k=1:N
if X(k)~=Y(k)
error=error+1;
end
end
disp('解調后錯誤的個數為:')
disp(error)
disp('誤碼率為:')
disp(error/N)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -