git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5910 818b1a75-f10b-46b9-bf7c-635c3b92a50f
140 lines
4.5 KiB
Matlab
140 lines
4.5 KiB
Matlab
%
|
|
% SCRIPT ID : s_run_meas
|
|
%
|
|
% PROJECT NAME : TDD Recoprocity
|
|
%
|
|
% PURPOSE : full transmission and receive train for TDD reciprocity calibration
|
|
%
|
|
%**********************************************************************************************
|
|
% Eurecom - All rights reserved
|
|
%
|
|
% AUTHOR(s) : Xiwen JIANG, Florian Kaltenberger
|
|
%
|
|
% DEVELOPMENT HISTORY :
|
|
%
|
|
% Date Name(s) Version Description
|
|
% ----------- ------------- ------- ------------------------------------------------------
|
|
% Apr-29-2014 X. JIANG 0.1 script creation v0.1
|
|
%
|
|
% REFERENCES/NOTES/COMMENTS :
|
|
%
|
|
% - Based on the script "run_full_duplex" created by Mirsad Cirkic, Florian Kaltenberger.
|
|
%
|
|
%**********************************************************************************************
|
|
|
|
%% ** initialisation **
|
|
%% ------------- to change in experiment ------------
|
|
%clc
|
|
close all
|
|
%clear all
|
|
%
|
|
%% ----------------------------------------------------
|
|
m_sym_TA = zeros(d_N_f,d_N_OFDM,length(v_indA),d_N_meas);
|
|
m_sym_TB = zeros(d_N_f,d_N_OFDM,length(v_indB),d_N_meas);
|
|
m_sym_RA = zeros(d_N_f,d_N_OFDM,length(v_indA),d_N_meas);
|
|
m_sym_RB = zeros(d_N_f,d_N_OFDM,length(v_indB),d_N_meas);
|
|
m_sym_TA_ = zeros(d_N_f,d_N_OFDM,length(v_indA));
|
|
m_sig_TA = zeros((d_N_CP+d_N_FFT)*d_N_OFDM*2,d_N_antA);
|
|
m_sig_TB = zeros((d_N_CP+d_N_FFT)*d_N_OFDM*2,d_N_antB);
|
|
|
|
for d_n_meas = 1:d_N_meas
|
|
%% -------- tx --------
|
|
%** tx of site A **
|
|
[m_sym_TA_(:,:,:,d_n_meas), m_sig_TA_] = f_ofdm_tx(d_M, d_N_f, d_N_FFT, d_N_CP, d_N_OFDM, v_active_rfA, d_amp);
|
|
|
|
for d_a = 1:d_N_antA_act
|
|
d_N_a = d_N_OFDM/d_N_antA_act;
|
|
d_N_b = d_N_OFDM*(d_N_FFT+d_N_CP)/d_N_antA_act;
|
|
m_sig_TA(d_N_b*(d_a-1)+1:d_N_b*d_a,v_indA(d_a)) = m_sig_TA_(d_N_b*(d_a-1)+1:d_N_b*d_a,d_a);
|
|
m_sym_TA(:,d_N_a*(d_a-1)+1:d_N_a*d_a,d_a,d_n_meas) = m_sym_TA_(:,d_N_a*(d_a-1)+1:d_N_a*d_a,d_a,d_n_meas);
|
|
end
|
|
|
|
m_sig_TA(1:end/2,v_indA)= m_sig_TA(1:end/2,v_indA)*2; %affect the LSB to 0 to set on Tx mode
|
|
m_sig_TA(end/2+1:end,v_indA)= 1+1i; %affect the LSB to 1 to set on Rx mode
|
|
|
|
%** tx of site B **
|
|
[m_sym_TB(:,:,:,d_n_meas), m_sig_TB_] = f_ofdm_tx(d_M, d_N_f, d_N_FFT, d_N_CP, d_N_OFDM, v_active_rfB, d_amp);
|
|
m_sig_TB(1:end/2,v_indB)=1+1i;
|
|
m_sig_TB(end/2+1:end,v_indB)= m_sig_TB_*2;
|
|
|
|
|
|
%** Transmission from A to B **
|
|
oarf_send_frame(cardA,m_sig_TA,d_n_bit);
|
|
%** Transmission from B to A **
|
|
oarf_send_frame(cardB,m_sig_TB,d_n_bit);
|
|
%sleep(0.1);
|
|
|
|
m_sig_R = oarf_get_frame(-2);
|
|
m_sig_RA = m_sig_R(d_N_OFDM*(d_N_FFT+d_N_CP)+1:d_N_OFDM*(d_N_FFT+d_N_CP)*2,1:d_N_antA);
|
|
m_sig_RB = m_sig_R(1:d_N_OFDM*(d_N_FFT+d_N_CP),d_N_antA+1:d_N_antA+d_N_antB);
|
|
%% -------- rx --------
|
|
m_sym_RB(:,:,:,d_n_meas) = f_ofdm_rx(m_sig_RB, d_N_FFT, d_N_CP, d_N_OFDM, v_active_rfB);
|
|
m_sym_RA(:,:,:,d_n_meas) = f_ofdm_rx(m_sig_RA, d_N_FFT, d_N_CP, d_N_OFDM, v_active_rfA);
|
|
%keyboard;
|
|
end
|
|
|
|
%** channel estimation **
|
|
m_H_est_A2B = f_ch_est(m_sym_TA, m_sym_RB); %dimension: d_N_antR x d_N_antT x d_N_f x d_N_meas
|
|
m_H_est_B2A = f_ch_est(m_sym_TB, m_sym_RA);
|
|
|
|
%% -------- plot --------
|
|
|
|
%** channel estimation in frequency domain **
|
|
m_H_A2B_draw = squeeze(m_H_est_A2B(1,:,:,end)).';
|
|
m_H_B2A_draw = squeeze(m_H_est_B2A(:,1,:,end)).';
|
|
|
|
figure(1)
|
|
subplot(2,1,1)
|
|
plot(real(m_sig_RB(1:40,v_indB)),'b-');
|
|
hold on
|
|
plot(real(m_sig_RB(end-80+1:end-40,v_indB)),'g-')
|
|
hold on
|
|
plot(real(m_sig_RB(end-40+1:end,v_indB)),'r-')
|
|
title('m_sig_RB')
|
|
subplot(2,1,2)
|
|
plot(real(m_sig_RA(:,v_indA)),'-');
|
|
title('m_sig_RA')
|
|
|
|
figure(2)
|
|
subplot(2,2,1)
|
|
plot(20*log10(abs(m_H_A2B_draw)),'-');
|
|
title('|h| vs. freq (A2B)')
|
|
xlabel('freq')
|
|
ylabel('|h|')
|
|
ylim([0 100])
|
|
|
|
subplot(2,2,2)
|
|
plot(20*log10(abs(m_H_B2A_draw)),'-');
|
|
title('|h| vs. freq (B2A)')
|
|
xlabel('freq')
|
|
ylabel('|h|')
|
|
ylim([0 100])
|
|
|
|
subplot(2,2,3)
|
|
plot(angle(m_H_A2B_draw),'-');
|
|
title('angle(h) vs. freq (A2B)')
|
|
xlabel('freq')
|
|
ylabel('angle(h)')
|
|
|
|
subplot(2,2,4)
|
|
plot(angle(m_H_B2A_draw),'-');
|
|
title('angle(h) vs. freq (B2A)')
|
|
xlabel('freq')
|
|
ylabel('angle(h)')
|
|
|
|
%v_color = ['b*','g*','r*','c*'];
|
|
figure(3)
|
|
for d_a = 1:d_N_antA_act
|
|
subplot(2,2,d_a);
|
|
plot(m_sym_RA(1,:,d_a,1),'*');
|
|
title(strcat('m sym RA',num2str(d_a)));
|
|
end
|
|
|
|
figure(4)
|
|
for d_a = 1:d_N_antA_act
|
|
subplot(2,2,d_a);
|
|
plot(m_sym_RB(1,d_N_OFDM/d_N_antA_act*(d_a-1)+1:d_N_OFDM/d_N_antA_act*d_a,1,1),'*');
|
|
hold on;
|
|
title(strcat('m sym RB',num2str(d_a)));
|
|
end
|