diff --git a/executables/nr-ru.c b/executables/nr-ru.c
index 740ba4368d6dea6c8e3194214abd523ce9d59865..9393cdf09b2163ff15a2521e44e3c9ef6b2f0b50 100644
--- a/executables/nr-ru.c
+++ b/executables/nr-ru.c
@@ -1120,8 +1120,14 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) {
   cfg->rx_num_channels=ru->nb_rx;
 
   for (i=0; i<ru->nb_tx; i++) {
-    cfg->tx_freq[i] = (double)fp->dl_CarrierFreq;
-    cfg->rx_freq[i] = (double)fp->ul_CarrierFreq;
+    if (ru->if_frequency == 0) {
+      cfg->tx_freq[i] = (double)fp->dl_CarrierFreq;
+      cfg->rx_freq[i] = (double)fp->ul_CarrierFreq;
+    }
+    else {
+      cfg->tx_freq[i] = (double)ru->if_frequency;
+      cfg->rx_freq[i] = (double)(ru->if_frequency+fp->ul_CarrierFreq-fp->dl_CarrierFreq);
+    }
     cfg->tx_gain[i] = ru->att_tx;
     cfg->rx_gain[i] = ru->max_rxgain-ru->att_rx;
     cfg->configFilename = rf_config_file;
@@ -2335,6 +2341,7 @@ void RCconfig_RU(void)
       RC.ru[j]->nb_rx                             = *(RUParamList.paramarray[j][RU_NB_RX_IDX].uptr);
       RC.ru[j]->att_tx                            = *(RUParamList.paramarray[j][RU_ATT_TX_IDX].uptr);
       RC.ru[j]->att_rx                            = *(RUParamList.paramarray[j][RU_ATT_RX_IDX].uptr);
+      RC.ru[j]->if_frequency                      = *(RUParamList.paramarray[j][RU_IF_FREQUENCY].uptr);
 
       if (config_isparamset(RUParamList.paramarray[j], RU_BF_WEIGHTS_LIST_IDX)) {
         RC.ru[j]->nb_bfw = RUParamList.paramarray[j][RU_BF_WEIGHTS_LIST_IDX].numelt;
diff --git a/openair1/PHY/defs_RU.h b/openair1/PHY/defs_RU.h
index fa4aef2c76825f3b80df6b97286d1bd174b90774..3521ba56bc5812adfe9172a30152d55dd52a03ec 100644
--- a/openair1/PHY/defs_RU.h
+++ b/openair1/PHY/defs_RU.h
@@ -606,6 +606,8 @@ typedef struct RU_t_s {
   int wakeup_L1_sleeptime;
   /// maximum number of sleeps
   int wakeup_L1_sleep_cnt_max;
+  /// DL IF frequency in Hz
+  uint64_t if_frequency;
 } RU_t;
 
 
diff --git a/openair2/ENB_APP/enb_paramdef.h b/openair2/ENB_APP/enb_paramdef.h
index f6c5ad1b0674f7f8a1e9d3a3f653be19faf55aa5..ff3b741d5690048c37a5b45f507a44a26187df67 100644
--- a/openair2/ENB_APP/enb_paramdef.h
+++ b/openair2/ENB_APP/enb_paramdef.h
@@ -94,6 +94,7 @@ typedef enum {
 #define CONFIG_STRING_RU_END_OF_BURST_DELAY       "end_of_burst_delay"
 #define CONFIG_STRING_RU_OTA_SYNC_ENABLE          "ota_sync_enabled"
 #define CONFIG_STRING_RU_BF_WEIGHTS_LIST          "bf_weights"
+#define CONFIG_STRING_RU_IF_FREQUENCY             "if_freq"
 
 #define RU_LOCAL_IF_NAME_IDX          0
 #define RU_LOCAL_ADDRESS_IDX          1
@@ -120,6 +121,7 @@ typedef enum {
 #define RU_END_OF_BURST_DELAY_IDX     22
 #define RU_OTA_SYNC_ENABLE_IDX        23
 #define RU_BF_WEIGHTS_LIST_IDX        24
+#define RU_IF_FREQUENCY               25
 
 /*-----------------------------------------------------------------------------------------------------------------------------------------*/
 /*                                            RU configuration parameters                                                                  */
@@ -151,6 +153,7 @@ typedef enum {
     {CONFIG_STRING_RU_END_OF_BURST_DELAY,          NULL,       0,       uptr:NULL,       defuintval:400,          TYPE_UINT,        0}, \
     {CONFIG_STRING_RU_OTA_SYNC_ENABLE,             NULL,       0,       strptr:NULL,     defstrval:"no",          TYPE_STRING,      0}, \
     {CONFIG_STRING_RU_BF_WEIGHTS_LIST,             NULL,       0,       iptr:NULL,       defintarrayval:DEFBFW,   TYPE_INTARRAY,    0}, \
+    {CONFIG_STRING_RU_IF_FREQUENCY,                NULL,       0,       uptr:NULL,       defuintval:0,            TYPE_UINT64,      0}, \
   }
 
 /*---------------------------------------------------------------------------------------------------------------------------------------*/