📄 basicofdm.m
字号:
clear all;
clc;
M = 4;
N = 256; % - Subcarrier number
D = N * 100; % - 涝仿 data 肮荐
Fs = 4; %frequency of the sample
Fd = 1; %frequency of the data
backoff = 0;
HPA = 'SSPA';
SNR = 0: 2: 16;
%% < 价脚扁 >
[a]=gen_data(M,D);
s_p = conj(vec2mat(a, N)'); % Serial to Parallel
% over sample
sample = [s_p(1: N / 2, :); zeros(3 * N, size(s_p, 2)); s_p(N / 2 + 1: N, :)];
% sample = s_p;
ifft_out = ifft(sample); % IFFT 函炼
% ifft_out=sample;
p_s = vec2mat(conj(ifft_out'), size(ifft_out, 1) * size(ifft_out, 2));
sig_in = p_s * Fs*N/Fd; % Scale
% sig_in = HPA_SSPA_TWTA(sig_in, backoff, HPA);
%% plot_f狼 output篮 -30dB俊辑 林颇荐 埃拜寸 割俺狼 power啊 -30dB焊促 奴瘤甫 技辑 林颇荐 埃拜栏肺 蚌窍搁
%% 措开气捞 唱柯促.
% plot_f(sig_in,Fs,0.01,1,'r-',-30);
%% < AWGN >
snr_w = 10 .^ (SNR / 10); % SNR in decade
sigpwr = norm(sig_in) ^ 2 / length(sig_in); % sampling // 乞闭傈仿
for i = 1: length(SNR)
% Noise power
switch M
case 2
sgma=sqrt((Fs/Fd*sigpwr)/snr_w(i) / 2); %% BPSK
case 4
sgma=sqrt((Fs/Fd*sigpwr)/ snr_w(i) / 4); %% QPSK
case 16
sgma=sqrt((Fs/Fd*sigpwr)/snr_w(i) / 8); %% 16-QAM
end
R_n = sgma * randn(1, length(sig_in));
I_n = sgma * randn(1, length(sig_in));
noise = R_n + j * I_n;
signal = sig_in;% + noise;
%% < 荐脚扁 >
R_sig_in = signal / (Fs*N/Fd); % de-scaling
% R_sig_in = signal;
R_sp = conj(vec2mat(R_sig_in, Fs*N/Fd)'); % Serial to Parallel
fft_out = fft(R_sp); % FFT 函炼
% fft_out=R_sp;
% remove over sampling data
R_sample = [fft_out(1: N / 2, :); fft_out(size(fft_out, 1) - N / 2 + 1: size(fft_out, 1), :)];
% R_sample = fft_out;
R_ps = vec2mat(conj(R_sample'), D); % Parallel to Serial
% - BER -
vector = hard_decision(R_ps,M);
% Bit Error Rate 拌魂
ber(i) = ber_call_qpsk(vector, a, M);
end
% - theory -
for i = 1: length(SNR)
t_snr(i) = 10 ^ (SNR(i) / 10);
theo_err(i) = Q(sqrt(2 * t_snr(i)));
out(i) = (1 / (((pi - 1) / pi) * sqrt(2 * t_snr(i)) + (1 / pi) * sqrt(sqrt(2 * t_snr(i)) * sqrt(2 * t_snr(i)) + 2 * pi)))...
* exp((-1) * sqrt(2 * t_snr(i)) * sqrt(2 * t_snr(i)) / 2) / sqrt(2 * pi);
%theo_err(i)=(1./2)*erfc(sqrt(t_snr))-(1./8)*(erfc(sqrt(t_snr))).^2;
end
%% 免仿何
figure(1)
semilogy(SNR, theo_err, 'g');
hold on;
semilogy(SNR, ber);
hold on;
axis([0 16 10e-5 1]);
xlabel('SNR(dB)');
ylabel('BER');
figure(2)
plot([R_ps], '.'); % constellation
axis([-4 4 -4 4]);
grid on;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -