From 107b352c92d1a403bfebba9ee437563fb979c535 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger <florian.kaltenberger@eurecom.fr> Date: Wed, 22 Oct 2014 13:37:14 +0000 Subject: [PATCH] replaced gpib_send with socket interface git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5932 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- .../USERSPACE/OCTAVE/rx_calibration_exmimo.m | 154 ++++++++++-------- 1 file changed, 88 insertions(+), 66 deletions(-) diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/rx_calibration_exmimo.m b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/rx_calibration_exmimo.m index d102624c43..7b4b712cb9 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/rx_calibration_exmimo.m +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/rx_calibration_exmimo.m @@ -2,26 +2,28 @@ close all clear all hold off -gpib_card=0; % first GPIB PCI card in the computer -gpib_device=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu +%gpib_card=0; % first GPIB PCI card in the computer +%gpib_device=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu +smbv_ip_addr = "192.168.12.201"; +command = [getenv("OPENAIR_TARGETS") "/TEST/ROHDE_SCHWARZ/EthernetRawCommand.out"]; -fc = 1907600e3; +%fc = 1907600e3; +fc = 2.6e9; +%fc=800e6; fs = 7680e3; fref = fc+fs/4; -power_dBm = -100; -cables_loss_dB = 6; % we need to account for the power loss between the signal generator and the card input (splitter, cables) +power_dBm = [-70 -80 -90]+20; +cables_loss_dB = 12; % we need to account for the power loss between the signal generator and the card input (splitter, cables) dual_tx = 0; tdd = 1; card = 0; limeparms; %rf_mode = (RXEN+TXEN+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA1ON+LNAMax+RFBBNORM+DMAMODE_RX+DMAMODE_TX)*[1 1 1 1]; -rf_mode1 = (RXEN+0+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA1ON+LNAMax+RFBBNORM+DMAMODE_RX+0); -rf_mode2 = (RXEN+0+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA2ON+LNAMax+RFBBNORM+DMAMODE_RX+0); -rf_mode = [rf_mode1 rf_mode2 0 0]; -freq_rx = 1907600000*[1 1 1 1]; +rf_mode = (RXEN+0+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA1ON+LNAMax+RFBBNORM+DMAMODE_RX+0)*[1 1 1 1]; +freq_rx = fc*[1 1 1 1]; freq_tx = freq_rx; tx_gain = 25*[1 1 1 1]; rx_gain = 15*[1 1 1 1]; @@ -32,85 +34,96 @@ rf_local = [8254813 8255016 8254813 8254813]; %exmimo2_2 rf_rxdc = [37059 35459 36300 36999]; %exmimo2_2 rf_vcocal=rf_vcocal_19G*[1 1 1 1]; eNBflag = 0; -tdd_config = DUPLEXMODE_FDD + TXRXSWITCH_LSB; -syncmode = SYNCMODE_FREE; +tdd_config = DUPLEXMODE_FDD + TXRXSWITCH_TESTRX; +%syncmode = SYNCMODE_FREE; +syncmode = [SYNCMODE_MASTER SYNCMODE_SLAVE]; rffe_rxg_low = 63*[1 1 1 1]; rffe_rxg_final = 63*[1 1 1 1]; rffe_band = B19G_TDD*[1 1 1 1]; +autocal = [1 1 1 1]; +resampling_factor = [2 2 2 2]; -gpib_send(gpib_card,gpib_device,'*RST;*CLS'); % reset and configure the signal generator +system(sprintf('%s %s ''*RST;*CLS''',command, smbv_ip_addr)); % reset and configure the signal generator %gpib_send(gpib_card,gpib_device,sprintf("POW %ddBm",power_dBm+cables_loss_dB)); -gpib_send(gpib_card,gpib_device,'POW -14dBm'); +%gpib_send(gpib_card,gpib_device,'POW -14dBm'); %gpib_send(gpib_card,gpib_device,'FREQ 1.91860GHz'); %gpib_send(gpib_card,gpib_device,'FREQ 1.919225GHz'); %gpib_send(gpib_card,gpib_device,'FREQ 1.909225GHz'); -gpib_send(gpib_card,gpib_device,sprintf("FREQ %dHz",fref)); +system(sprintf('%s %s ''FREQ %ldHz''',command,smbv_ip_addr,fref)); -oarf_config_exmimo(card,freq_rx,freq_tx,tdd_config,syncmode,rx_gain,tx_gain,eNBflag,rf_mode,rf_rxdc,rf_local,rf_vcocal,rffe_rxg_low,rffe_rxg_final,rffe_band); +for card=1:oarf_get_num_detected_cards +oarf_config_exmimo(card-1,freq_rx,freq_tx,tdd_config,syncmode(card),rx_gain,tx_gain,eNBflag,rf_mode,rf_rxdc,rf_local,rf_vcocal,rffe_rxg_low,rffe_rxg_final,rffe_band,autocal,resampling_factor); +end +autocal = [0 0 0 0]; ALL_rxrfmode = [LNAByp LNAMed LNAMax]; -ALL_gain = 0:10:30; - - -SpN0 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -SpN1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -N0 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -N1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -S0 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -S1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -G0 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -G1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -NF0 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -NF1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -SNR0 = zeros(length(ALL_rxrfmode),length(ALL_gain)); -SNR1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); +ALL_gain = 0:5:30; + +num_chains = 4*oarf_get_num_detected_cards; + +SpN0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +%SpN1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); +N0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +%N1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); +S0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +S0_lin = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +%S1 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +G0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +%G1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); +NF0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +%NF1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); +SNR0 = zeros(length(ALL_rxrfmode),length(ALL_gain),num_chains); +%SNR1 = zeros(length(ALL_rxrfmode),length(ALL_gain)); %keyboard idx_power = 1; -for LNA=ALL_rxrfmode +for mode_idx = 1:3 + LNA=ALL_rxrfmode(mode_idx); - %gpib_send(gpib_card,gpib_device,['POW ' int2str(power_dBm+cables_loss_dB) 'dBm']); + system(sprintf('%s %s ''POW %d dBm''',command,smbv_ip_addr,power_dBm(mode_idx)+cables_loss_dB)); idx_gain = 1; for rx_gain=ALL_gain - rf_mode = (RXEN+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA1ON+LNA+RFBBNORM+DMAMODE_RX)*[1 1 0 0]; + rf_mode = (RXEN+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA1ON+LNA+RFBBNORM+DMAMODE_RX)*[1 1 1 1]; rx_gain = rx_gain * [1 1 1 1]; - oarf_config_exmimo(card,freq_rx,freq_tx,tdd_config,syncmode,rx_gain,tx_gain,eNBflag,rf_mode,rf_rxdc,rf_local,rf_vcocal,rffe_rxg_low,rffe_rxg_final,rffe_band); +for card=1:oarf_get_num_detected_cards + oarf_config_exmimo(card-1,freq_rx,freq_tx,tdd_config,syncmode(card),rx_gain,tx_gain,eNBflag,rf_mode,rf_rxdc,rf_local,rf_vcocal,rffe_rxg_low,rffe_rxg_final,rffe_band,autocal,resampling_factor); +end sleep(1); % signal measurement - gpib_send(gpib_card,gpib_device,'OUTP:STAT ON'); % activate output + system(sprintf('%s %s ''OUTP:STAT ON''',command,smbv_ip_addr)); % activate output sleep(.5); - s=oarf_get_frame(card); + s=oarf_get_frame(0); sleep(.5); - SpN0(idx_power,idx_gain) = mean(abs(s(:,1)).^2) - abs(mean(s(:,1))).^2; - SpN1(idx_power,idx_gain) = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; +SpN0(idx_power,idx_gain,:) = mean(abs(s).^2,1) - abs(mean(s,1)).^2; + %SpN1(idx_power,idx_gain) = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; figure(1); hold off - plot(20*log10(abs(fft(s(:,1)))),'r',20*log10(abs(fft(s(:,2)))),'b') + plot(20*log10(abs(fft(s(:,end)))),'r'); %,20*log10(abs(fft(s(:,2)))),'b') title("Signal"); ylim([0 200]); % noise measurement - gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output + system(sprintf('%s %s ''OUTP:STAT OFF''',command,smbv_ip_addr)); % deactivate output sleep(.5); - s=oarf_get_frame(card); %oarf_get_frame + s=oarf_get_frame(0); %oarf_get_frame sleep(.5); - N0(idx_power,idx_gain) = mean(abs(s(:,1)).^2) - abs(mean(s(:,1))).^2; - N1(idx_power,idx_gain) = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; +N0(idx_power,idx_gain,:) = mean(abs(s).^2,1) - abs(mean(s,1)).^2; + %N1(idx_power,idx_gain) = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; figure(2); hold off - plot(20*log10(abs(fft(s(:,1)))),'r',20*log10(abs(fft(s(:,2)))),'b') + plot(20*log10(abs(fft(s(:,end)))),'r'); %,20*log10(abs(fft(s(:,2)))),'b') title("Noise"); ylim([0 200]); @@ -120,45 +133,54 @@ for LNA=ALL_rxrfmode % error("something is wrong"); % end - S0(idx_power,idx_gain) = 10*log10(SpN0(idx_power,idx_gain)-N0(idx_power,idx_gain)); - S1(idx_power,idx_gain) = 10*log10(SpN1(idx_power,idx_gain)-N1(idx_power,idx_gain)); - G0(idx_power,idx_gain) = S0(idx_power,idx_gain) - power_dBm; - G1(idx_power,idx_gain) = S1(idx_power,idx_gain) - power_dBm; - NF0(idx_power,idx_gain) = 10*log10(N0(idx_power,idx_gain)) - G0(idx_power,idx_gain) + 105; % 108 is the thermal noise - NF1(idx_power,idx_gain) = 10*log10(N1(idx_power,idx_gain)) - G1(idx_power,idx_gain) + 105; - SNR0(idx_power,idx_gain) = S0(idx_power,idx_gain)-10*log10(N0(idx_power,idx_gain)); - SNR1(idx_power,idx_gain) = S1(idx_power,idx_gain)-10*log10(N1(idx_power,idx_gain)); - - printf(' %d: Signal strength (%f,%f), Gain (%f %f), N (%f %f) SNR (%f %f) NF (%f %f)\n', - rx_gain(1), S0(idx_power,idx_gain),S1(idx_power,idx_gain), - G0(idx_power,idx_gain),G1(idx_power,idx_gain), - 10*log10(N0(idx_power,idx_gain)),10*log10(N1(idx_power,idx_gain)), - SNR0(idx_power,idx_gain),SNR1(idx_power,idx_gain), - NF0(idx_power,idx_gain),NF1(idx_power,idx_gain)); - fflush(stdout); + S0_lin(idx_power,idx_gain,:) = SpN0(idx_power,idx_gain,:)-N0(idx_power,idx_gain,:); + S0_lin(idx_power,idx_gain,S0_lin(idx_power,idx_gain,:)<0) = 0; + S0(idx_power,idx_gain,:) = 10*log10(S0_lin(idx_power,idx_gain,:)); + %S1(idx_power,idx_gain) = 10*log10(SpN1(idx_power,idx_gain)-N1(idx_power,idx_gain)); + G0(idx_power,idx_gain,:) = S0(idx_power,idx_gain,:) - power_dBm(mode_idx); + %G1(idx_power,idx_gain) = S1(idx_power,idx_gain) - power_dBm; + NF0(idx_power,idx_gain,:) = 10*log10(N0(idx_power,idx_gain,:)) - G0(idx_power,idx_gain,:) + 105; % 108 is the thermal noise + %NF1(idx_power,idx_gain) = 10*log10(N1(idx_power,idx_gain)) - G1(idx_power,idx_gain) + 105; + SNR0(idx_power,idx_gain,:) = S0(idx_power,idx_gain,:)-10*log10(N0(idx_power,idx_gain,:)); + %SNR1(idx_power,idx_gain) = S1(idx_power,idx_gain)-10*log10(N1(idx_power,idx_gain)); + + %printf(' %d: Signal strength (%f,%f), Gain (%f %f), N (%f %f) SNR (%f %f) NF (%f %f)\n', + % rx_gain(1), S0(idx_power,idx_gain),S1(idx_power,idx_gain), + % G0(idx_power,idx_gain),G1(idx_power,idx_gain), + % 10*log10(N0(idx_power,idx_gain)),10*log10(N1(idx_power,idx_gain)), + % SNR0(idx_power,idx_gain),SNR1(idx_power,idx_gain), + % NF0(idx_power,idx_gain),NF1(idx_power,idx_gain)); + %fflush(stdout); %fprintf(fid,'%d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f\n', %power_dBm,gain2391,gain9862, S0,S1,G0,G1,10*log10(N0),10*log10(N1),SNR0,SNR1,NF0,NF1); - idx_gain = idx_gain + 1; - figure(3) hold off - plot(ALL_gain,G0,'o-','markersize',10) + plot(ALL_gain,G0(:,:,1),'o-','markersize',10) hold on - plot(ALL_gain,G1,'x-','markersize',10) + plot(ALL_gain,G0(:,:,2),'x-','markersize',10) + plot(ALL_gain,G0(:,:,3),'s-','markersize',10) + plot(ALL_gain,G0(:,:,4),'d-','markersize',10) legend('Byp RX0','Med RX0','Max RX0','Byp RX1','Med RX1','Max RX1'); title('Gains') figure(4) hold off - plot(ALL_gain,NF0,'o-','markersize',10) + plot(ALL_gain,NF0(:,:,1),'o-','markersize',10) hold on - plot(ALL_gain,NF1,'x-','markersize',10) + plot(ALL_gain,NF0(:,:,2),'x-','markersize',10) + plot(ALL_gain,NF0(:,:,3),'s-','markersize',10) + plot(ALL_gain,NF0(:,:,4),'d-','markersize',10) legend('Byp RX0','Med RX0','Max RX0','Byp RX1','Med RX1','Max RX1'); title('Noise Figure') + + idx_gain = idx_gain + 1; + end + idx_power = idx_power + 1; + end %gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output -- GitLab