此代码的目的是计算和平均从一个特别提款权样本的FFT。为了节省时间,只要阵列中有可用的数据,就使用多线程来平均FFT频谱。代码停留在第二行,而循环在第29行(没有错误)。我确信这一点,因为我已经尝试删除多线程,因此while循环和其余代码都可以正常工作。解决此问题的方法似乎是添加一个print命令,如下所示。为什么?
sdr = RtlSdr()
sdr.sample_rate = 2.4e6
sdr.center_freq = 1420e6
sdr.freq_correction = 1
sdr.gain = 40.2
num_points= 1024
integration_time= 5
block_duration=num_points/sdr.sample_rate
num_spectra=int(integration_time/block_duration)
freq_res=sdr.sample_rate/num_points
start_freq=sdr.center_freq-(sdr.sample_rate/2)
stop_freq=sdr.center_freq+(sdr.sample_rate/2)
raw_spectra=[]
sum_arr=[]
def generate():
for _ in range(num_spectra):
raw_samples=sdr.read_samples(num_points)*np.hamming(num_points)
spectra=(abs(np.fft.fft(raw_samples)))**2
raw_spectra.append(spectra)
def average():
zero_arr=[]
for _ in range(num_points):
zero_arr.append(0)
counter=0
while counter!=num_spectra:
while len(raw_spectra)==0:
continue
zero_arr=zero_arr+raw_spectra[0]
del raw_spectra[0]
counter+=1
sum_arr.append(zero_arr)
p1=threading.Thread(target=generate)
p2=threading.Thread(target=average)
p1.start()
p2.start()
p1.join()
p2.join()
##Solution##
while len(raw_spectra)==0:
print(0)
continue发布于 2021-12-22 18:30:26
average-method中的这个部分是有问题的:
while counter!=num_spectra:
while len(raw_spectra)==0:
continue # infinite-loop right here这里的continue指的是内部循环,所以它只是永远循环。
如果len(raw_spectra)==0发生了,你就会陷入困境:)
https://stackoverflow.com/questions/70451472
复制相似问题