python - 使用 Python 和 Numpy 实现根升余弦 (RRC) 滤波器的简单方法

标签 python numpy scipy signal-processing

SciPy/Numpy 似乎支持许多过滤器,但不支持根升余弦过滤器。有没有一种技巧可以轻松创建一个而不是计算传递函数?近似值也可以。

最佳答案

commpy包中包含几个过滤器。返回变量的顺序在较早版本中切换(截至本次编辑,当前版本为 0.7.0)。安装,强调文字说明herehere .
以下是 QAM16 的 1024 个符号的使用示例:

import numpy as np
from commpy.modulation import QAMModem
from commpy.filters import rrcosfilter
N = 1024  # Number of symbols
os = 8 #over sampling factor
# Create modulation. QAM16 makes 4 bits/symbol
mod1 = QAMModem(16)
# Generate the bit stream for N symbols
sB = np.random.randint(0, 2, N*mod1.num_bits_symbol)
# Generate N complex-integer valued symbols
sQ = mod1.modulate(sB)
sQ_upsampled = np.zeros(os*(len(sQ)-1)+1,dtype = np.complex64) 
sQ_upsampled[::os] = sQ
# Create a filter with limited bandwidth. Parameters:
#      N: Filter length in samples
#    0.8: Roll off factor alpha
#      1: Symbol period in time-units
#     24: Sample rate in 1/time-units
sPSF = rrcosfilter(N, alpha=0.8, Ts=1, Fs=over_sample)[1]
# Analog signal has N/2 leading and trailing near-zero samples
qW = np.convolve(sPSF, sQ_upsampled)
下面是对参数的一些解释。 N是波特采样的数量。您需要的位数是样本的 4 倍(在 QAM 的情况下)。我做了 sPSF数组返回 N元素,以便我们可以看到带有前导和尾随样本的信号。见 Wikipedia Root-raised-cosine filter page参数说明 alpha . Ts是以秒为单位的符号周期,Fs是每 Ts 个过滤器样本的数量.我喜欢假装Ts=1为简单起见(单位符号率)。然后Fs是每个波特点的复数波形样本数。
如果您使用来自 rrcosfilter 的返回元素 0要获得采样时间索引,您需要在 Ts 中插入正确的符号周期和过滤采样率。和 Fs以正确缩放索引值。

关于python - 使用 Python 和 Numpy 实现根升余弦 (RRC) 滤波器的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14614966/

相关文章:

python - Netbeans 不允许 Python 2.6 作为默认平台(强制使用 Jython2.5)

python - 按列查找包含 NaN 元素的 pandas DataFrame 的最小值

python - Scipy curve_fit似乎没有改变初始参数

python - Matplotlib,所有子图的一个颜色条,覆盖在纸张大小上

python - 如何统一单个值和序列/元组?

python - 如何在原始源代码中添加自定义NumPy函数?

python - 用numpy保存列表时内存不足

使用 sympylambdaify 和 scipy 的 Python 优化索引总和

python - pandas 与 scipy 中的 skew 和 kurtosis 函数有什么区别?

python - aws-cdk 使用现有负载均衡器和 ECS 服务创建 cloudwatch 仪表板