I'm trying to learn some signal processing and recorded some iq data from the meteor satellite which transmits data with qpsk. I read the file with python and tried applying a rrcos filter on the signal.

sample_rate = 1152000
file = open("file", "rb")

data = []
for i in range(10000):
    point = file.read(8)
    real, img = struct.unpack("ff", point)

# https://de.wikipedia.org/wiki/Root-Raised-Cosine-Filter (code at the bottom)
filter = rrcos(len(data), 0.22, 1.38e-5, sample_rate)
# (number of datapoints, rolloff factor, symbol period, sample rate)

new_data = np.convolve(filter, signal)

The FFT plot for the recorded signal looks like this (signal of the sattelite on the left):
fft recorded signal

and for the "filtered" signal like this: fft filtered

The weird thing is that the filtered signal in a time/amplitude plot when using the numpy convolution function seems to have cut off the start and the end:

I implemented the function myself which seems to "fix" that:

The filtered data doesn't really look like a qpsk signal and i don't really know what i should google to fix that. All examples i found just use convolution to apply the filter to the signal.

Does anyone know whats going on?



1 Answer 1


The reason you're getting lots of zeros is because you're making the RRC filter way too long. If I plot it:

import matplotlib.pyplot as plt
sample_rrc  =  rrcosfilter (10000,0.22, 1.38e-5, 1152000)

then I get

Raised Cosine Impulse Response

which is clearly mostly zero.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.