我正在尝试使用 GRC 计算卫星信号的 SNR,但所有 4 个提供的估计器要么有很多-NaN值,要么在整个记录过程中约为 35dB。(我刚刚将文件源连接到 MPSK SNR 估计器探针并将消息重定向到消息调试。)
我已经尝试了适合我输入的示例,M2M4 估计器吐出了一些预期值(所以公司的其他人告诉了我)。
编码:
from sys import argv
from scipy import fromfile, absolute, array_split, mean, sqrt, log10, ceil, linspace, complex64
from matplotlib import pyplot as plt
def snr_est_m2m4(signal):
M2 = mean(absolute(signal)**2)
M4 = mean(absolute(signal)**4)
snr_rat = sqrt(2*M2*M2 - M4) / (M2 - sqrt(2*M2*M2 - M4))
return 10.0*log10(snr_rat)
def chunkify(lst, chunk_size):
return [lst[i * chunk_size : (i+1) * chunk_size] for i in range(int(ceil(len(lst)/chunk_size)))]
def main():
if len(argv) != 2:
return
bits = fromfile(argv[1], dtype=complex64)
m2m4_axis = [absolute(snr_est_m2m4(s)) for s in array_split(bits, 100000)]
f1 = plt.figure(1)
s1 = f1.add_subplot(1,1,1)
chunk_size = 100
smooth_m2m4 = [mean(c) for c in chunkify(m2m4_axis, chunk_size)]
s1.plot(linspace(0, 1000, len(smooth_m2m4)), smooth_m2m4, 'b-', label='m2m4')
s1.grid(True)
s1.set_xlabel('time')
s1.set_ylabel('snr')
s1.legend()
print("Done!")
plt.show()
if __name__ == "__main__":
main()
我知道录音是有效的,因为我们目前实施的 GRC 链给出了地球的图像。我已经在不同的信号上尝试了估计器,但再一次,这些值没有意义;无信号时信噪比较高。
GRC中的参数alpha
和Samples between SNR messages
代表什么?为什么 GRC 中的估算器不能按预期工作?计算 SNR 的建议方法是什么?
我在这里不知所措,请发送帮助。