Random values are read by Arduino from RX reciever on a single channel

I tried 2 programs to read from RX reciever

#include <EnableInterrupt.h>

#define SERIAL_PORT_SPEED 9600
#define RC_NUM_CHANNELS  4

#define RC_CH1  0
#define RC_CH2  1
#define RC_CH3  2
#define RC_CH4  3

#define RC_CH1_INPUT  A0
#define RC_CH2_INPUT  A1
#define RC_CH3_INPUT  A2
#define RC_CH4_INPUT  A3

uint16_t rc_values[RC_NUM_CHANNELS];
uint32_t rc_start[RC_NUM_CHANNELS];
volatile uint16_t rc_shared[RC_NUM_CHANNELS];

void rc_read_values() {
  noInterrupts();
  memcpy(rc_values, (const void *)rc_shared, sizeof(rc_shared));
  interrupts();
}

void calc_input(uint8_t channel, uint8_t input_pin) {
  if (digitalRead(input_pin) == HIGH) {
    rc_start[channel] = micros();
  } else {
    uint16_t rc_compare = (uint16_t)(micros() - rc_start[channel]);
    rc_shared[channel] = rc_compare;
  }
}

void calc_ch1() { calc_input(RC_CH1, RC_CH1_INPUT); }
void calc_ch2() { calc_input(RC_CH2, RC_CH2_INPUT); }
void calc_ch3() { calc_input(RC_CH3, RC_CH3_INPUT); }
void calc_ch4() { calc_input(RC_CH4, RC_CH4_INPUT); }

void setup() {
  Serial.begin(SERIAL_PORT_SPEED);

  pinMode(RC_CH1_INPUT, INPUT);
  pinMode(RC_CH2_INPUT, INPUT);
  pinMode(RC_CH3_INPUT, INPUT);
  pinMode(RC_CH4_INPUT, INPUT);

  enableInterrupt(RC_CH1_INPUT, calc_ch1, CHANGE);
  enableInterrupt(RC_CH2_INPUT, calc_ch2, CHANGE);
  enableInterrupt(RC_CH3_INPUT, calc_ch3, CHANGE);
  enableInterrupt(RC_CH4_INPUT, calc_ch4, CHANGE);
}

void loop() {
  rc_read_values();

  Serial.print("CH1:"); Serial.print(rc_values[RC_CH1]); Serial.print("\t");
  Serial.print("CH2:"); Serial.print(rc_values[RC_CH2]); Serial.print("\t");
  Serial.print("CH3:"); Serial.print(rc_values[RC_CH3]); Serial.print("\t");
  Serial.print("CH4:"); Serial.println(rc_values[RC_CH4]);

  delay(200);
}

&

int ch[3],i=0;

void setup() {
   Serial.begin(9600);
  pinMode(A3,INPUT);
  pinMode(A1,INPUT);
  pinMode(A2,INPUT);
  delay(500);
}
void loop() {
  delay(500);
 ch[0]=pulseIn(A3,HIGH,25000);delay(10);Serial.print(ch[i]);Serial.print(" ");
    ch[1]=pulseIn(A1,HIGH,25000);delay(10);Serial.print(ch[1+i]);Serial.print(" ");
    ch[2]=pulseIn(A2,HIGH,25000);delay(10);Serial.println(ch[2+i]);

delay(500);
}

in both programms values from channel 3 are inconsistent.Can some tell what should I try out?
I have also tried reading values from 4 channels & also selected different channels but I am getting from on reading channels 3 only.

& i have now attached image of reciever too for clarity of problem
I used T6Config for checking output of radio Transmitter(flysky CT6B), & everything is shown fine there.

Can some tell what should I try out?

You can tell us what "RX Receiver" you are talking about.

void rc_read_values() {
  noInterrupts();
  memcpy(rc_values, (const void *)rc_shared, sizeof(rc_shared));
  interrupts();
}

That function does not read a thing!

void calc_input(uint8_t channel, uint8_t input_pin) {
  if (digitalRead(input_pin) == HIGH) {
    rc_start[channel] = micros();
  } else {
    uint16_t rc_compare = (uint16_t)(micros() - rc_start[channel]);
    rc_shared[channel] = rc_compare;
  }
}

micros() returns an unsigned 32 bit value. This method of keeping track of time is fatally flawed.

pulseIn() is a blocking function. delay() is a blocking function. Serial.print() can block. All those blocking functions are NOT a good idea.

However, if two completely different approaches to reading data from the device both show the same problem, the problem clearly is NOT with the software.

The first code in my post is from this site

I tried binding the receiver with radio & it fixed my problem, although I still have no idea how it receiver started working wrong in the first place.