Skip to content
Snippets Groups Projects
Commit 81e297b4 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Improve comments.

parent 6508bb1e
No related branches found
No related tags found
1 merge request!406Resolve RTSD-268
......@@ -118,7 +118,7 @@ def impulse_at_zero_crossing(x):
###############################################################################
# Window design
# Windowed sinc filter design
###############################################################################
def raised_cosine_response(Ntaps, Tsymbol, beta):
......@@ -139,7 +139,7 @@ def raised_cosine_response(Ntaps, Tsymbol, beta):
t = tIndices - tCenter
# sinc term, can use array assignment because sinc(1 / 0) = 1
hRc = 1 / Tsymbol * np.sinc(t / Tsymbol)
hRc = 1 / Tsymbol * np.sinc(t / Tsymbol) # np.sinc(x) = sin(pi x) / (pi x)
# apply cos term, use for loop instead of array assignment, to detect divide by 0
for tI in tIndices:
......@@ -150,15 +150,18 @@ def raised_cosine_response(Ntaps, Tsymbol, beta):
def square_root_raised_cosine_response(Ntaps, Tsymbol, beta):
"""Generate a square root raised cosine (RC) FIR filter impulse response.
"""Generate a square root raised cosine (SRRC) FIR filter impulse response.
Reference:
. [HARRIS section 4.3]
. https://en.wikipedia.org/wiki/Root-raised-cosine_filter
Reference: [HARRIS section 4.3]
Input:
. Ntaps : FIR filter length
. Tsymbol: symbol period in number of samples per symbol
. beta : Roll off factor in [0, 1.0]
Return:
. hSrrc : impulse response of the square root raised cosine filter.
. hSrRc : impulse response of the square root raised cosine filter.
"""
# time axis
tIndices = np.arange(Ntaps)
......@@ -166,21 +169,21 @@ def square_root_raised_cosine_response(Ntaps, Tsymbol, beta):
t = tIndices - tCenter
# numerator term, using array assignment
hSrrc = 1 / Tsymbol * (4 * beta * t / Tsymbol * np.cos(np.pi * (1 + beta) * t / Tsymbol) +
hSrRc = 1 / Tsymbol * (np.cos(np.pi * (1 + beta) * t / Tsymbol) * 4 * beta * t / Tsymbol +
np.sin(np.pi * (1 - beta) * t / Tsymbol))
# apply denumerator term, use for loop instead of array assignment, to detect divide by 0
for tI in tIndices:
t = tI - tCenter
if t == 0.0:
hSrrc[tI] = 1 / Tsymbol * (1 + beta * (4 / np.pi - 1))
hSrRc[tI] = 1 / Tsymbol * (1 + beta * (4 / np.pi - 1))
elif np.abs(t) == Tsymbol / (4 * beta):
hSrrc[tI] = 1 / Tsymbol * beta / np.sqrt(2) * \
((1 + 2 / np.pi) * np.sin(np.pi / (4 * beta)) + \
hSrRc[tI] = 1 / Tsymbol * beta / np.sqrt(2) * \
((1 + 2 / np.pi) * np.sin(np.pi / (4 * beta)) +
(1 - 2 / np.pi) * np.cos(np.pi / (4 * beta)))
else:
hSrrc[tI] /= (1 - (4 * beta * t / Tsymbol)**2) * (np.pi * t / Tsymbol)
return hSrrc
hSrRc[tI] /= (1 - (4 * beta * t / Tsymbol)**2) * (np.pi * t / Tsymbol)
return hSrRc
###############################################################################
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment