⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basicofdm.m

📁 OFDM Source is very easy. so you can easily understand.
💻 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 + -