OpenCores
URL https://opencores.org/ocsvn/cascaded_fir_filter/cascaded_fir_filter/trunk

Subversion Repositories cascaded_fir_filter

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /cascaded_fir_filter
    from Rev 2 to Rev 3
    Reverse comparison

Rev 2 → Rev 3

/trunk/create_IQ_rect.py
0,0 → 1,65
import matplotlib.pyplot
import numpy
import math
out_file_samp = open("IQ_rect_signal.txt", "w")
out_file_ping = open("IQ_rect_ping.txt", "w")
samp_rate = 50000 # Hz
data_duration = 0.05 # s
tone_freq = 5000 # Hz
ping_duration = 0.002 # s
ping_amplitude = 10
echo_position = 0.025 # s
echo_amplitude = 10
 
time_acc = 0
time_delta = 1.0 / samp_rate
tone_omega = 2.0 * math.pi * 5000
ping_length = 0
data_length = 0
 
samps_t = []
samps_I = []
samps_Q = []
 
pings_t = []
pings_I = []
pings_Q = []
 
samp_I = 0
samp_Q = 0
 
while time_acc < data_duration :
if time_acc < ping_duration :
samp_I = ping_amplitude * 1
samp_Q = ping_amplitude * 1
pings_t.append(time_acc);
pings_I.append(samp_I);
pings_Q.append(samp_Q);
out_file_ping.write("{0:04x}\r\n{1:04x}\r\n".format(int(samp_I) & 0xFFFF, int(samp_Q) & 0xFFFF))
ping_length += 1
else :
if (time_acc >= echo_position) and (time_acc < echo_position + ping_duration) :
samp_I = echo_amplitude * 1
samp_Q = echo_amplitude * 1
else :
samp_I = 0
samp_Q = 0
samps_t.append(time_acc);
samps_I.append(samp_I);
samps_Q.append(samp_Q);
out_file_samp.write("{0:04x}\r\n{1:04x}\r\n".format(int(samp_I) & 0xFFFF, int(samp_Q) & 0xFFFF))
data_length += 1
time_acc += time_delta
out_file_ping.close()
out_file_samp.close()
print "ping length = ", ping_length
print "data length = ", data_length
matplotlib.pyplot.figure(1)
matplotlib.pyplot.subplot(3,1,1)
matplotlib.pyplot.plot(samps_t, samps_I)
matplotlib.pyplot.plot(samps_t, samps_Q)
#matplotlib.pyplot.figure(2)
matplotlib.pyplot.subplot(3,1,2)
matplotlib.pyplot.plot(pings_t, pings_I)
matplotlib.pyplot.plot(pings_t, pings_Q)
matplotlib.pyplot.show()
/trunk/IQ_rect_ping.txt
0,0 → 1,200
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
/trunk/IQ_rect_signal.txt
0,0 → 1,5002
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
000a
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
/trunk/convolution_calculation_in_and_out.gtkw
0,0 → 1,35
[*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
[*] Fri May 22 12:55:16 2015
[*]
[dumpfile] "/home/ibragimove/My_Designs/Cascaded_FIR_filter/test.vcd"
[dumpfile_mtime] "Fri May 22 12:54:49 2015"
[dumpfile_size] 20736171
[savefile] "/home/ibragimove/My_Designs/Cascaded_FIR_filter/convolution_calculation_in_and_out.gtkw"
[timestart] 0
[size] 1712 600
[pos] -1 -1
*-21.000000 2887000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[treeopen] FIR_cascaded_tb.
[sst_width] 223
[signals_width] 314
[sst_expanded] 1
[sst_vpaned_height] 160
@8420
FIR_cascaded_tb.FIR_cascaded_DUT.inp_samp_I[13:0]
@20000
-
@8420
FIR_cascaded_tb.FIR_cascaded_DUT.inp_samp_Q[13:0]
@20000
-
@8421
FIR_cascaded_tb.FIR_cascaded_DUT.out_samp_I[17:0]
@20000
-
@8421
FIR_cascaded_tb.FIR_cascaded_DUT.out_samp_Q[17:0]
@20000
-
[pattern_trace] 1
[pattern_trace] 0
/trunk/create_IQ_chirp.py
0,0 → 1,110
import matplotlib.pyplot
import numpy
import math
out_file_samp = open("IQ_chirp_signal.txt", "w")
out_file_ping = open("IQ_chirp_ping.txt", "w")
#mod_list = array('b', [1, 1, -1, 1, -1, 1, -1])
#mod_length = 100
samp_rate = 50000
data_leng = 0.080
pulse_freq_carry = 250000
pulse_freq_sweep = 5000
pulse_leng = 0.001
pulse_amp = 32.0
noise_amp = 4.0
sig_offs = 0.003
sig_amp = 16.0
leak_amp = 4.0
samp_per = 1.0 / samp_rate
print "samp_per: ", samp_per
adc_rate = pulse_freq_carry * 4.0
adc_per = 1.0 / adc_rate
print "adc_per: ", adc_per
samp_div = round(1.0 / (samp_rate * adc_per))
print "samp_div: ", samp_div
samp_per = adc_per * samp_div
time_var = 0
carr_phase_delta = 2.0 * math.pi * (pulse_freq_carry) * adc_per
carr_phase_curr = 0
pulse_phase_mod_start = 2.0 * math.pi * pulse_freq_sweep * ( - pulse_leng)
pulse_phase_mod_step_const = 2.0 * math.pi * pulse_freq_sweep / pulse_leng * adc_per**2
pulse_phase_mod_step_var_c = 4.0 * math.pi * pulse_freq_sweep / pulse_leng * adc_per
 
#print "pulse_phase_delta: ", pulse_phase_delta
pulse_delta_freq = pulse_freq_sweep / pulse_leng / samp_rate
pulse_freq_carry_curr = pulse_freq_carry - pulse_freq_sweep / 2
print "samp_per: ", samp_per
samps_t = []
samps_phi = []
samps_I = []
samps_Q = []
samps_freq = []
adc_I = []
adc_Q = []
adc_t = []
iteration = 0
samp_counter = 0
time_start_mod = 0
while time_var < data_leng and iteration < 100000 or samp_counter % 2 == 1:
iteration += 1
samp_I = 0
samp_Q = 0
if samp_counter == samp_div :
samp_counter = 0
if time_var < pulse_leng :
if time_var == 0 :
time_start_mod = time_var
if samp_counter == 0 :
samp_I = pulse_amp * math.sin(carr_phase_curr)
if samp_counter == 1 :
samp_Q = pulse_amp * math.sin(carr_phase_curr)
carr_phase_curr += pulse_phase_mod_step_const + pulse_phase_mod_step_var_c * (time_var - time_start_mod)
elif time_var >= sig_offs and time_var < sig_offs + pulse_leng :
if samp_counter == 0 :
samp_I = sig_amp * math.sin(carr_phase_curr)
if samp_counter == 1 :
samp_Q = sig_amp * math.sin(carr_phase_curr)
carr_phase_curr += pulse_phase_mod_step_const + pulse_phase_mod_step_var_c * (time_var - time_start_mod)
else :
#pulse_freq_carry_curr = pulse_freq_carry - pulse_freq_sweep / 2
time_start_mod = time_var
if samp_counter == 0 :
samp_I = leak_amp * math.sin(carr_phase_curr)
if samp_counter == 1 :
samp_Q = leak_amp * math.sin(carr_phase_curr)
#carr_phase_curr += carr_phase_delta
adc_I.append(pulse_amp * math.sin(carr_phase_curr))
adc_t.append(time_var);
if samp_counter == 0 :
samps_I.append(samp_I);
if samp_counter == 1 :
samps_Q.append(samp_Q);
samps_t.append(time_var);
samps_phi.append(carr_phase_curr);
carr_phase_curr += carr_phase_delta
time_var += adc_per
samp_counter += 1
samps_I
samps_Q
samps_t
print "len(samps_I) ", len(samps_I)
for i1 in range(len(samps_I)) :
#out_file_samp.write("{0:04x}_{1:04x} {2} {3}\r\n".format(int(samps_I[i]) & 0xFFFF, int(samps_Q[i]) & 0xFFFF, int(samps_I[i]), int(samps_Q[i])))
#print "i1: ", i1, " ", samps_I[i1], " ", samps_Q[i1]
out_file_samp.write("{0:04x}\r\n{1:04x}\r\n".format(int(samps_I[i1]) & 0xFFFF, int(samps_Q[i1]) & 0xFFFF))
for i1 in range(int(pulse_leng/samp_per)) :
#out_file_samp.write("{0:04x}_{1:04x} {2} {3}\r\n".format(int(samps_I[i]) & 0xFFFF, int(samps_Q[i]) & 0xFFFF, int(samps_I[i]), int(samps_Q[i])))
#print "i1: ", i1, " ", samps_I[i1], " ", samps_Q[i1]
out_file_ping.write("{0:04x}\r\n{1:04x}\r\n".format(int(samps_I[i1]) & 0xFFFF, int(samps_Q[i1]) & 0xFFFF))
out_file_samp.close()
matplotlib.pyplot.figure(1)
matplotlib.pyplot.subplot(3,1,1)
matplotlib.pyplot.plot(samps_t, samps_I)
matplotlib.pyplot.plot(samps_t, samps_Q)
#matplotlib.pyplot.figure(2)
matplotlib.pyplot.subplot(3,1,2)
#matplotlib.pyplot.plot(samps_t, samps_freq)
matplotlib.pyplot.plot(samps_t, samps_phi)
matplotlib.pyplot.subplot(3,1,3)
matplotlib.pyplot.plot(adc_t, adc_I)
matplotlib.pyplot.show()
/trunk/create_IQ_tone.py
0,0 → 1,65
import matplotlib.pyplot
import numpy
import math
out_file_samp = open("IQ_tone_signal.txt", "w")
out_file_ping = open("IQ_tone_ping.txt", "w")
samp_rate = 50000 # Hz
data_duration = 0.05 # s
tone_freq = 5000 # Hz
ping_duration = 0.002 # s
ping_amplitude = 15
echo_position = 0.025 # s
echo_amplitude = 10
 
time_acc = 0
time_delta = 1.0 / samp_rate
tone_omega = 2.0 * math.pi * 5000
ping_length = 0
data_length = 0
 
samps_t = []
samps_I = []
samps_Q = []
 
pings_t = []
pings_I = []
pings_Q = []
 
samp_I = 0
samp_Q = 0
 
while time_acc < data_duration :
if time_acc < ping_duration :
samp_I = ping_amplitude * math.cos(tone_omega * time_acc)
samp_Q = ping_amplitude * math.sin(tone_omega * time_acc)
pings_t.append(time_acc);
pings_I.append(samp_I);
pings_Q.append(samp_Q);
out_file_ping.write("{0:04x}\r\n{1:04x}\r\n".format(int(samp_I) & 0xFFFF, int(samp_Q) & 0xFFFF))
ping_length += 1
else :
if (time_acc >= echo_position) and (time_acc < echo_position + ping_duration) :
samp_I = echo_amplitude * math.cos(tone_omega * time_acc)
samp_Q = echo_amplitude * math.sin(tone_omega * time_acc)
else :
samp_I = 0
samp_Q = 0
samps_t.append(time_acc);
samps_I.append(samp_I);
samps_Q.append(samp_Q);
out_file_samp.write("{0:04x}\r\n{1:04x}\r\n".format(int(samp_I) & 0xFFFF, int(samp_Q) & 0xFFFF))
data_length += 1
time_acc += time_delta
out_file_ping.close()
out_file_samp.close()
print "ping length = ", ping_length
print "data length = ", data_length
matplotlib.pyplot.figure(1)
matplotlib.pyplot.subplot(3,1,1)
matplotlib.pyplot.plot(samps_t, samps_I)
matplotlib.pyplot.plot(samps_t, samps_Q)
#matplotlib.pyplot.figure(2)
matplotlib.pyplot.subplot(3,1,2)
matplotlib.pyplot.plot(pings_t, pings_I)
matplotlib.pyplot.plot(pings_t, pings_Q)
matplotlib.pyplot.show()
/trunk/single_port_ram.v
0,0 → 1,24
module single_port_ram
#(
parameter DATA_WIDTH=8,
parameter ADDR_WIDTH=6)
(
input clk,
input we,
input [DATA_WIDTH - 1:0] d_wr,
input [ADDR_WIDTH - 1:0] addr,
output [DATA_WIDTH - 1:0] d_rd
);
 
reg [DATA_WIDTH - 1:0] RAM_array [2**ADDR_WIDTH - 1:0];
reg [ADDR_WIDTH - 1:0] read_addr_reg;
 
always @ (posedge clk)
begin
if (we)
RAM_array[addr] <= d_wr;
read_addr_reg <= addr;
end
 
assign d_rd = RAM_array[read_addr_reg];
endmodule
/trunk/IQ_chirp_ping.txt
0,0 → 1,100
0000
001f
0000
001f
0001
001f
0003
001f
0006
001f
0009
001e
000d
001c
0012
0019
0017
0015
001b
0010
001e
0009
001f
0001
001f
fff8
001b
ffef
0014
ffe7
0009
ffe2
fffe
ffe1
fff1
ffe5
ffe7
ffee
ffe1
fffc
ffe2
000a
ffeb
0018
fffa
001f
000b
001d
001a
0011
0020
ffff
0019
ffed
0008
ffe1
fff3
ffe4
ffe3
fff4
ffe2
000b
fff1
001c
0009
001e
001c
000c
001d
fff3
0009
ffe2
ffef
ffe7
ffe1
0000
ffec
0019
0008
001e
001e
0008
0018
ffeb
fffb
ffe1
ffe2
fff8
ffe9
0017
0009
001d
001f
0001
000f
ffe4
ffec
ffe9
ffe2
000c
/trunk/IQ_chirp_signal.txt
0,0 → 1,8000
0000
001f
0000
001f
0001
001f
0003
001f
0006
001f
0009
001e
000d
001c
0012
0019
0017
0015
001b
0010
001e
0009
001f
0001
001f
fff8
001b
ffef
0014
ffe7
0009
ffe2
fffe
ffe1
fff1
ffe5
ffe7
ffee
ffe1
fffc
ffe2
000a
ffeb
0018
fffa
001f
000b
001d
001a
0011
0020
ffff
0019
ffed
0008
ffe1
fff3
ffe4
ffe3
fff4
ffe2
000b
fff1
001c
0009
001e
001c
000c
001d
fff3
0009
ffe2
ffef
ffe7
ffe1
0000
ffec
0019
0008
001e
001e
0008
0018
ffeb
fffb
ffe1
ffe2
fff8
ffe9
0017
0009
001d
001f
0001
000f
ffe4
ffec
ffe9
ffe2
000c
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
0004
0000
000f
0000
000f
0000
000f
0001
000f
0003
000f
0005
000f
0007
000e
0009
000c
000b
000a
000d
0008
000f
0004
000f
0000
000f
fffc
000d
fff8
0009
fff4
0004
fff1
ffff
fff1
fff9
fff3
fff3
fff8
fff1
fffe
fff1
0005
fff6
000c
fffe
000f
0006
000e
000d
0008
000f
ffff
000c
fff6
0003
fff1
fff9
fff2
fff2
fffb
fff1
0006
fffa
000e
0005
000e
000e
0005
000e
fff9
0004
fff1
fff7
fff4
fff1
0000
fff7
000d
0004
000e
000f
0003
000b
fff5
fffd
fff1
fff1
fffd
fff6
000c
0005
000e
000f
0000
0007
fff2
fff6
fff5
fff2
0006
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
0000
0003
/trunk/IQ_tone_ping.txt
0,0 → 1,200
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
/trunk/IQ_tone_signal.txt
0,0 → 1,5002
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
000f
0000
000c
0008
0004
000e
fffc
000e
fff4
0008
fff1
0000
fff4
fff8
fffc
fff2
0004
fff2
000c
fff8
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0008
0005
0003
0009
fffd
0009
fff8
0005
fff6
0000
fff8
fffb
fffd
fff7
0003
fff7
0008
fffb
000a
0000
0008
0005
0003
0009
fffd
0009
fff8
0005
fff6
0000
fff8
fffb
fffd
fff7
0003
fff7
0008
fffb
000a
0000
0008
0005
0003
0009
fffd
0009
fff8
0005
fff6
0000
fff8
fffb
fffd
fff7
0003
fff7
0008
fffb
000a
0000
0008
0005
0003
0009
fffd
0009
fff8
0005
fff6
0000
fff8
fffb
fffd
fff7
0003
fff7
0008
fffb
000a
0000
0008
0005
0003
0009
fffd
0009
fff8
0005
fff6
0000
fff8
fffb
fffd
fff7
0003
fff7
0008
fffb
000a
0000
0008
0005
0003
0009
fffd
0009
fff8
0005
fff6
0000
fff8
fffb
fffd
fff7
0003
fff7
0008
fffb
000a
0000
0008
0005
0003
0009
fffd
0009
fff8
0005
fff6
0000
fff8
fffb
fffd
fff7
0003
fff7
0008
fffb
000a
0000
0008
0005
0003
0009
fffd
0009
fff8
0005
fff6
0000
fff8
fffb
fffd
fff7
0003
fff7
0008
fffb
000a
0000
0008
0005
0003
0009
fffd
0009
fff8
0005
fff6
0000
fff8
fffb
fffd
fff7
0003
fff7
0008
fffb
000a
0000
0008
0005
0003
0009
fffd
0009
fff8
0005
fff6
0000
fff8
fffb
fffd
fff7
0003
fff7
0008
fffb
000a
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
/trunk/FIR_cascaded.v
0,0 → 1,386
/*
FIR filter with comples samples
convolution computation divided into blocks for parallel processing
then summ of results in blocks is computed
 
filter designed to evaluate convolution of echo-signal
it works in two modes:
1 - echo-signal with ping signal leaked into input assumed. FIR takes first n (loadable runtime) samples in frame into pulse response RAM and convolutes other samples in frame with first n
n is ping signal length
frame begins with inp_ping_start strobe
2 - pulse response RAM loaded through parallel interface (Data, Addres, WR, I/Q)
 
Number of cycles required to compute one sample is determined by formula
block_length + number_of_blocks + 11
it is constant for synthesized filter
 
block_length and number_of_blocks should be power of 2
for example
pulse response RAM depth is 2**11 = 2048
block size is 2**8 = 256
number of blocks is 2048/256 = 2**(11-8) = 8
 
block_length + number_of_blocks + 11 = 256 + 8 + 11 = 275
 
In any case filter yelds output samples after n = 2**PING_ADDR_WIDTH samples
 
*/
module FIR_cascaded
#(
parameter INP_SAMP_WIDTH = 14, // imput samples width
parameter PING_ADDR_WIDTH = 11, // address width of pulse response characteristic samples
parameter CONV_MEM_BLOCK_ADDR_WIDTH = 10, // address width of block
parameter FRAME_ADDR_WIDTH = 18, // address width of counter of samples in frame
parameter OUT_SAMP_WIDTH = 18, // output samples width
parameter CLK_TO_SAMP_ADDR_WIDTH = 11, // clocks in frame counter width
//for debug. out_samp_A_sq is I^2 + Q^2
parameter OUT_SAMP_A_SQ_WIDTH = 8, // width of out_samp_A_sq
parameter OUT_SAMP_A_SQ_OFFS = 8 // downscale for out_samp_A_sq. OUT_SAMP_A_SQ_OFFS and next OUT_SAMP_A_SQ_WIDTH bits goes to the output
)
(
// ping means first n=inp_ping_length samples, which can be loaded into ping RAM, where stores FIR coefficients or pulse response
input clk, // clock
input reset, // reset
input inp_clk, // input samples strobes
input inp_ping_start, // frame strobes
input signed [INP_SAMP_WIDTH - 1:0] inp_samp_I, // input samples Re
input signed [INP_SAMP_WIDTH - 1:0] inp_samp_Q, // input samples Im
input [PING_ADDR_WIDTH - 1:0] inp_ping_length, // ping duration, in samples
input IOB_ping_from_Rx, // 1 - take pulse response from input samles, 0 - do not take pulse response from input samples, assumes load coefficient through parallel interface
input IOB_ping_RAM_CS, // select coefficient RAM
inout signed [INP_SAMP_WIDTH - 1:0] IOB_ping_RAM_D, // coefficient RAM, data
input IOB_ping_RAM_IQ, // coefficient RAM, I/Q select. 0 - I, 1 - Q
input signed [PING_ADDR_WIDTH - 1:0] IOB_ping_RAM_A, // coefficient RAM, address
input IOB_ping_RAM_WR, // coefficient RAM, write enable
input IOB_ping_RAM_RD, // coefficient RAM, read enable
output signed [OUT_SAMP_WIDTH - 1:0] out_samp_I, // output samples, Re
output signed [OUT_SAMP_WIDTH - 1:0] out_samp_Q, // output samples, Im
output signed [OUT_SAMP_A_SQ_WIDTH - 1:0] out_samp_A_sq, // I^2 + Q^2, for debug
output out_samp_strobe, // output sample strobe
output out_frame_strobe // output frame strobe
);
 
//wire signed [INP_SAMP_WIDTH - 1:0] IOB_ping_RAM_D;
//wire signed [PING_ADDR_WIDTH - 1:0] IOB_ping_RAM_A;
parameter CONV_BLOCK_ADDR_WIDTH = PING_ADDR_WIDTH - CONV_MEM_BLOCK_ADDR_WIDTH; // address width for blocks counting
reg [2**CONV_BLOCK_ADDR_WIDTH - 1:0] IOB_ping_RAM_A_bank_sel; // one-hot block select for WR coefficients through parallel bus
reg [PING_ADDR_WIDTH - 1:0] inp_ping_length_reg; // inp_ping_length store register
reg [FRAME_ADDR_WIDTH - 1:0] sample_counter; // sample in frame counter
reg inp_ping_start_str; // frame begins strobe
reg inp_ping_start_catch; // for generating inp_ping_start_catch
reg inp_clk_str; // sample begins strobe
reg inp_clk_catch; // for generating inp_clk_str
reg ping_to_store; // set to 1 from frame begining to the end of ping. While 1 and if should take input samples to coefficients, to store input samples into coefficient RAM
reg [2**CONV_BLOCK_ADDR_WIDTH:0] ping_to_store_n; // one-hot to select block in coefficients RAM to store sample
reg [CLK_TO_SAMP_ADDR_WIDTH - 1:0] clk_to_samp_counter; // clock between samples counter, used to calculation of output samples
reg signed [OUT_SAMP_WIDTH - 1:0] out_samp_I_reg; // register to store output Re samples
reg signed [OUT_SAMP_WIDTH - 1:0] out_samp_Q_reg; // register to store output Im samples
reg signed [OUT_SAMP_WIDTH - 1:0] samp_mult_II[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // multipliers for output sample calculation, Re*Re
reg signed [OUT_SAMP_WIDTH - 1:0] samp_mult_QQ[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // multipliers for output sample calculation, Im*Im
reg signed [OUT_SAMP_WIDTH - 1:0] samp_mult_QI[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // multipliers for output sample calculation, Im*Re
reg signed [OUT_SAMP_WIDTH - 1:0] samp_mult_IQ[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // multipliers for output sample calculation, Re*Im
reg signed [OUT_SAMP_WIDTH - 1:0] out_samp_acc_I[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // accumulators for calculation summ in block Re
reg signed [OUT_SAMP_WIDTH - 1:0] out_samp_acc_Q[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // accumulators for calculation summ in block Im
wire signed [OUT_SAMP_WIDTH - 1:0] out_samp_acc_Q_selected; // accumulators for calculation summ in block Im
//reg signed [OUT_SAMP_WIDTH - 1:0] out_samp_acc_result_I[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // регистр хранения результата вычисления отсчёта свёртки канала I
//reg signed [OUT_SAMP_WIDTH - 1:0] out_samp_acc_result_Q[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // регистр хранения результата вычисления отсчёта свёртки канала Q
reg signed [OUT_SAMP_WIDTH - 1:0] blocks_acc_I; // summ of summs in blocks accumulator, Re
reg signed [OUT_SAMP_WIDTH - 1:0] blocks_acc_Q; // summ of summs in blocks accumulator, Re
reg signed [OUT_SAMP_WIDTH*2 :0] out_samp_A_sq_reg; // Re^2 + Im^2 register, for debug
reg [CONV_MEM_BLOCK_ADDR_WIDTH - 1:0] addr_ping; // coefficient address register for convolution calculation
reg [CLK_TO_SAMP_ADDR_WIDTH:0] addr_echo; // TODO: width CONV_BLOCK_ADDR_WIDTH + CONV_MEM_BLOCK_ADDR_WIDTH
reg proc_store_samp; // sets for saving samples
reg proc_count_blocks; // sets when reading data from coefficient RAM and samples RAM
reg proc_count_blocks_acc; // sets for summs in blocks calculating
reg proc_count_blocks_sum; // sets for summs of summs in block calculating
reg [CONV_BLOCK_ADDR_WIDTH - 1:0] blocks_sum_counter; // block number counter for summs of summs in block calculating
 
reg signed [INP_SAMP_WIDTH - 1:0] multiplier_ping_I[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // Re coefficient register for multiplication
reg signed [INP_SAMP_WIDTH - 1:0] multiplier_ping_Q[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // Im coefficient register for multiplication
reg signed [INP_SAMP_WIDTH - 1:0] multiplier_echo_I[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // Re sample register for multiplication
reg signed [INP_SAMP_WIDTH - 1:0] multiplier_echo_Q[2**CONV_BLOCK_ADDR_WIDTH - 1:0]; // Im sample register for multiplication
 
// Buses of RAM for storing coefficients and data samples
// address bus is shared, data and control buses are separated for Re and Im
wire signed [INP_SAMP_WIDTH - 1:0] ping_RAM_D_I [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire signed [INP_SAMP_WIDTH - 1:0] ping_RAM_D_Q [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire [CONV_MEM_BLOCK_ADDR_WIDTH - 1:0] ping_RAM_A [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
//wire [CONV_MEM_BLOCK_ADDR_WIDTH - 1:0] ping_RAM_A_buf;
wire signed [INP_SAMP_WIDTH - 1:0] ping_RAM_Q_I [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire signed [INP_SAMP_WIDTH - 1:0] ping_RAM_Q_Q [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire ping_RAM_W_I [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire ping_RAM_W_Q [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire signed [INP_SAMP_WIDTH - 1:0] samp_RAM_D_I [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire signed [INP_SAMP_WIDTH - 1:0] samp_RAM_D_Q [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire [CONV_MEM_BLOCK_ADDR_WIDTH - 1:0] samp_RAM_A [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire signed [INP_SAMP_WIDTH - 1:0] samp_RAM_Q_I [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire signed [INP_SAMP_WIDTH - 1:0] samp_RAM_Q_Q [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
wire samp_RAM_W [2**CONV_BLOCK_ADDR_WIDTH - 1:0];
 
reg out_samp_strobe_reg; // register for generating out_samp_strobe
reg out_frame_strobe_reg; // register for generating out_frame_strobe
// RAM for coefficients - ping and for data - samp
// number of blocks is 2**CONV_BLOCK_ADDR_WIDTH * 2 (ping, samp) * 2 (I, Q)
generate
genvar i_ram;
for (i_ram = 0; i_ram < 2**CONV_BLOCK_ADDR_WIDTH; i_ram = i_ram + 1) begin : gen_ram
single_port_ram
#(
.DATA_WIDTH (INP_SAMP_WIDTH),
.ADDR_WIDTH (CONV_MEM_BLOCK_ADDR_WIDTH))
ping_RAM_I
(
.clk (~clk),
.d_wr (ping_RAM_D_I[i_ram]),
.addr (ping_RAM_A[i_ram]),
.we (ping_RAM_W_I[i_ram]),
.d_rd (ping_RAM_Q_I[i_ram])
);
single_port_ram
#(
.DATA_WIDTH (INP_SAMP_WIDTH),
.ADDR_WIDTH (CONV_MEM_BLOCK_ADDR_WIDTH))
ping_RAM_Q
(
.clk (~clk),
.d_wr (ping_RAM_D_Q[i_ram]),
.addr (ping_RAM_A[i_ram]),
.we (ping_RAM_W_Q[i_ram]),
.d_rd (ping_RAM_Q_Q[i_ram])
);
single_port_ram
#(
.DATA_WIDTH (INP_SAMP_WIDTH),
.ADDR_WIDTH (CONV_MEM_BLOCK_ADDR_WIDTH))
samp_RAM_I
(
.clk (~clk),
.d_wr (samp_RAM_D_I[i_ram]),
.addr (samp_RAM_A[i_ram]),
.we (samp_RAM_W[i_ram]),
.d_rd (samp_RAM_Q_I[i_ram])
);
single_port_ram
#(
.DATA_WIDTH (INP_SAMP_WIDTH),
.ADDR_WIDTH (CONV_MEM_BLOCK_ADDR_WIDTH))
samp_RAM_Q
(
.clk (~clk),
.d_wr (samp_RAM_D_Q[i_ram]),
.addr (samp_RAM_A[i_ram]),
.we (samp_RAM_W[i_ram]),
.d_rd (samp_RAM_Q_Q[i_ram])
);
end // for
endgenerate
 
// strobes for frame start ang sample start
always @ (negedge clk or posedge reset) begin
if (reset) begin
inp_ping_start_catch <= 0;
inp_ping_start_str <= 0;
inp_clk_catch <= 0;
inp_clk_str <= 0;
end else begin
inp_ping_start_catch <= inp_ping_start;
inp_ping_start_str <= inp_ping_start & ~inp_ping_start_catch;
inp_clk_catch <= inp_clk;
inp_clk_str <= inp_clk & ~inp_clk_catch;
end
end //always
 
// one-hot for ping_RAM block selecting for access from parallel interface
always @(IOB_ping_RAM_A) begin
IOB_ping_RAM_A_bank_sel = {2**CONV_BLOCK_ADDR_WIDTH{1'b0}};
IOB_ping_RAM_A_bank_sel[IOB_ping_RAM_A[CONV_MEM_BLOCK_ADDR_WIDTH + CONV_BLOCK_ADDR_WIDTH - 1 : CONV_MEM_BLOCK_ADDR_WIDTH]] = 1'b1;
end //always
 
// sample number "sample_counter", ping present signal "ping_to_store" and ping_RAM block number to store ping "ping_to_store_n"
always @ (negedge clk)
begin
if (inp_ping_start_str) begin
inp_ping_length_reg <= inp_ping_length;
sample_counter <= 0;
ping_to_store <= 1;
ping_to_store_n = 1;
end else begin
if (inp_clk_str) begin
sample_counter <= sample_counter + 1;
if (sample_counter[PING_ADDR_WIDTH - 1:0] == inp_ping_length_reg) begin // ping ends, stop storing samples to coefficients RAM
ping_to_store <= 0;
end
if (sample_counter[CONV_MEM_BLOCK_ADDR_WIDTH - 1 : 0] == {CONV_MEM_BLOCK_ADDR_WIDTH{1'b1}}) begin // addres goes to the next bank
ping_to_store_n = ping_to_store_n << 1;
end
end
end
end
 
// clock counter, counts clocks in frame, used to convolution calculating
always @ (negedge clk)
begin
clk_to_samp_counter <= inp_clk_str ? 0 : (clk_to_samp_counter + 1);
end
// clk_to_samp_counter
// 0 registers initialization
// 1 store sample into RAM
// 2 /summands calculation (II, IQ, QI, QQ)
// 5 | 2**CONV_MEM_BLOCK_ADDR_WIDTH + 3 такта /summs in blocks calculation
// 2**CONV_MEM_BLOCK_ADDR_WIDTH + 5 \ |
// 2**CONV_MEM_BLOCK_ADDR_WIDTH + 6 / summs of summs in blocks calculation \
// 2**CONV_MEM_BLOCK_ADDR_WIDTH + 6 |
// + 2**CONV_BLOCK_ADDR_WIDTH \
// 2**CONV_MEM_BLOCK_ADDR_WIDTH + 7 output result, sample strobe and frame strobe
// + 2**CONV_BLOCK_ADDR_WIDTH
always @ (negedge clk)
begin
if (inp_clk_str) begin
proc_store_samp <= 0;
proc_count_blocks <= 0;
proc_count_blocks_acc <= 0;
proc_count_blocks_sum <= 0;
end else begin
proc_store_samp = clk_to_samp_counter == 0;
if (clk_to_samp_counter == 2) begin
proc_count_blocks <= 1; // begin to calculate convolution in blocks
end else if (clk_to_samp_counter == 2**CONV_MEM_BLOCK_ADDR_WIDTH + 5) begin
proc_count_blocks <= 0; // finish
end
if (clk_to_samp_counter == 5) begin
proc_count_blocks_acc <= 1; // begin to calculate summs in blocks
end else if (clk_to_samp_counter == 2**CONV_MEM_BLOCK_ADDR_WIDTH + 7) begin
proc_count_blocks_acc <= 0; // finish
end
if (clk_to_samp_counter == 2**CONV_MEM_BLOCK_ADDR_WIDTH + 6) begin
proc_count_blocks_sum <= 1; // begin to count summs of summs
end else if (clk_to_samp_counter == 2**CONV_MEM_BLOCK_ADDR_WIDTH + 7 + 2**CONV_BLOCK_ADDR_WIDTH) begin // continue for 2**CONV_BLOCK_ADDR_WIDTH times
proc_count_blocks_sum <= 0; // finish
end
end
end
 
assign out_samp_acc_Q_selected = out_samp_acc_Q[blocks_sum_counter];
// coefficient address counter, sample address counter
always @ (negedge clk or posedge proc_store_samp)
begin
if (proc_store_samp) begin
addr_ping <= 0;
addr_echo <= sample_counter - (2**PING_ADDR_WIDTH - 1);
end else if (proc_count_blocks) begin
addr_ping <= addr_ping + 1;
addr_echo <= addr_echo + 1;
end
end
 
// bidirectional bus for coefficient RAM
assign IOB_ping_RAM_D = (IOB_ping_RAM_RD & IOB_ping_RAM_CS) ? // Data bus, Z if read not selected
(IOB_ping_RAM_IQ ? // if read, then I or Q
ping_RAM_D_Q[IOB_ping_RAM_A[CONV_MEM_BLOCK_ADDR_WIDTH + CONV_BLOCK_ADDR_WIDTH - 1 : CONV_MEM_BLOCK_ADDR_WIDTH]]
: ping_RAM_D_I[IOB_ping_RAM_A[CONV_MEM_BLOCK_ADDR_WIDTH + CONV_BLOCK_ADDR_WIDTH - 1 : CONV_MEM_BLOCK_ADDR_WIDTH]]
) : {INP_SAMP_WIDTH{1'bZ}};
wire [2**CONV_BLOCK_ADDR_WIDTH - 1 : 0] block_num_buf[2**CONV_BLOCK_ADDR_WIDTH - 1 : 0]; // block number for coefficient
reg [2**CONV_BLOCK_ADDR_WIDTH - 1 : 0] block_num_buf_reg[2**CONV_BLOCK_ADDR_WIDTH - 1 : 0]; // delayed for using in convolution calculation pipe
// convolution calculating blocks
genvar mac_block;
generate
for (mac_block = 0; mac_block < 2**CONV_BLOCK_ADDR_WIDTH; mac_block = mac_block + 1)
begin : mac_blocks
// RAM buses
// coefficient RAM buses
// Data bus: if IOB_ping_from_Rx = 0 - coefficient RAM loaded from parallel bus and CS set then here is data from parallel bus
// else if flag ping is present is set, then here is input samples
assign ping_RAM_D_I[mac_block] = (IOB_ping_RAM_CS & ~IOB_ping_from_Rx) ? IOB_ping_RAM_D : (ping_to_store ? inp_samp_I : 0);
assign ping_RAM_D_Q[mac_block] = (IOB_ping_RAM_CS & ~IOB_ping_from_Rx) ? IOB_ping_RAM_D : (ping_to_store ? inp_samp_Q : 0);
// address bus: if IOB_ping_from_Rx = 0 - coefficient RAM loaded from parallel bus and CS set then here is address from parallel bus
// else if inp_clk_str is set - here is address for storing input samples
// else here is coefficient address for convolution calculation
assign ping_RAM_A [mac_block] = (IOB_ping_RAM_CS & ~IOB_ping_from_Rx) ? IOB_ping_RAM_A[CONV_MEM_BLOCK_ADDR_WIDTH - 1:0] : (proc_store_samp ? sample_counter[CONV_MEM_BLOCK_ADDR_WIDTH - 1:0] : addr_ping[CONV_MEM_BLOCK_ADDR_WIDTH - 1:0]);
// write strobe
// if coefficient RAM loading from parallel bus selected, then with WE on parallel bus generated WE for appropriate block of coefficient RAM
// else WE generated with input samples while ping is present
assign ping_RAM_W_I[mac_block] = (IOB_ping_RAM_CS & ~IOB_ping_from_Rx & IOB_ping_RAM_WR & ~IOB_ping_RAM_IQ & IOB_ping_RAM_A_bank_sel[mac_block]) | (IOB_ping_from_Rx & proc_store_samp & ping_to_store_n[mac_block]);
assign ping_RAM_W_Q[mac_block] = (IOB_ping_RAM_CS & ~IOB_ping_from_Rx & IOB_ping_RAM_WR & IOB_ping_RAM_IQ & IOB_ping_RAM_A_bank_sel[mac_block]) | (IOB_ping_from_Rx & proc_store_samp & ping_to_store_n[mac_block]);
// samples RAM buses
assign samp_RAM_D_I[mac_block] = inp_samp_I;
assign samp_RAM_D_Q[mac_block] = inp_samp_Q;
// with new sample address for storing new sample then address for reading for convolution calculation
assign samp_RAM_A[mac_block] = proc_store_samp ? sample_counter[CONV_MEM_BLOCK_ADDR_WIDTH - 1:0] : addr_echo[CONV_MEM_BLOCK_ADDR_WIDTH - 1:0];
// with new sample WE for appropriate block of samples RAM is set
assign samp_RAM_W[mac_block] = proc_store_samp & (sample_counter[CONV_MEM_BLOCK_ADDR_WIDTH + CONV_BLOCK_ADDR_WIDTH - 1:CONV_MEM_BLOCK_ADDR_WIDTH] == mac_block);
// block number for reading sample for convolution calculating is evaluated as summ of its number and address offset counted in blocks, floor(addr/sizeof(block))
assign block_num_buf[mac_block] = (mac_block + addr_echo[CONV_MEM_BLOCK_ADDR_WIDTH + CONV_BLOCK_ADDR_WIDTH - 1:CONV_MEM_BLOCK_ADDR_WIDTH]) & {CONV_BLOCK_ADDR_WIDTH{1'b1}};
always @ (negedge clk or negedge proc_count_blocks) begin
block_num_buf_reg[mac_block] <= block_num_buf[mac_block];
// registers initialization if convolution not processed
if (~proc_count_blocks) begin
multiplier_ping_I[mac_block] <= 0;
multiplier_ping_Q[mac_block] <= 0;
multiplier_echo_I[mac_block] <= 0;
multiplier_echo_Q[mac_block] <= 0;
samp_mult_II[mac_block] <= 0;
samp_mult_QQ[mac_block] <= 0;
end else begin
// multipiers are read from its block with no offset
multiplier_ping_I[mac_block] <= ping_RAM_Q_I[mac_block];
multiplier_ping_Q[mac_block] <= ping_RAM_Q_Q[mac_block];
// multipliers of samples are read with offset
multiplier_echo_I[mac_block] <= samp_RAM_Q_I[block_num_buf_reg[mac_block]];
multiplier_echo_Q[mac_block] <= samp_RAM_Q_Q[block_num_buf_reg[mac_block]];
// summands of convolution Si + jSq = Ai*Bi-Aq*Bq + j(Ai*Bq + Aq*Bi)
samp_mult_II[mac_block] <= multiplier_ping_I[mac_block] * multiplier_echo_I[mac_block];
samp_mult_QQ[mac_block] <= multiplier_ping_Q[mac_block] * multiplier_echo_Q[mac_block];
samp_mult_QI[mac_block] <= multiplier_ping_Q[mac_block] * multiplier_echo_I[mac_block];
samp_mult_IQ[mac_block] <= multiplier_ping_I[mac_block] * multiplier_echo_Q[mac_block];
end
end // always
always @ (negedge clk ) begin
if (inp_clk_str) begin
out_samp_acc_I[mac_block] <= 0;
out_samp_acc_Q[mac_block] <= 0;
end else if (proc_count_blocks_acc) begin
// use II - QQ and QI + IQ to get complex FIR or use II and QQ to get real FIR
out_samp_acc_I[mac_block] <= out_samp_acc_I[mac_block] + samp_mult_II[mac_block] + samp_mult_QQ[mac_block];
//out_samp_acc_I[mac_block] <= out_samp_acc_I[mac_block] + samp_mult_II[mac_block];
out_samp_acc_Q[mac_block] <= out_samp_acc_Q[mac_block] - samp_mult_QI[mac_block] + samp_mult_IQ[mac_block];
//out_samp_acc_Q[mac_block] <= out_samp_acc_Q[mac_block] + samp_mult_QQ[mac_block];
end
end
end // for
endgenerate
 
always @ (negedge clk)
begin
if (inp_clk_str) begin
blocks_sum_counter <= 0;
blocks_acc_I <= 0;
blocks_acc_Q <= 0;
end else begin
if (proc_count_blocks_sum) begin // here is summ of summs calculation
blocks_sum_counter <= blocks_sum_counter + 1;
blocks_acc_I <= blocks_acc_I + out_samp_acc_I[blocks_sum_counter];
blocks_acc_Q <= blocks_acc_Q + out_samp_acc_Q[blocks_sum_counter];
end
if (clk_to_samp_counter == 2**CONV_MEM_BLOCK_ADDR_WIDTH + 7 + 2**CONV_BLOCK_ADDR_WIDTH) begin // convolution sample ready, move result to output register
out_samp_I_reg <= blocks_acc_I;
out_samp_Q_reg <= blocks_acc_Q;
end
end //if
end // always
 
// sample strobe, frame strobe and |output|^2 for debug
always @ (negedge clk ) begin
// output strobes outputs with output sample
out_samp_strobe_reg <= clk_to_samp_counter == 2**CONV_MEM_BLOCK_ADDR_WIDTH + 7 + 2**CONV_BLOCK_ADDR_WIDTH;
out_frame_strobe_reg <= (clk_to_samp_counter == 2**CONV_MEM_BLOCK_ADDR_WIDTH + 7 + 2**CONV_BLOCK_ADDR_WIDTH) & (sample_counter == 0) & ping_to_store_n[0];
out_samp_A_sq_reg <= out_samp_I_reg * out_samp_I_reg + out_samp_Q_reg * out_samp_Q_reg;
end
 
assign out_samp_strobe = out_samp_strobe_reg;
assign out_frame_strobe = out_frame_strobe_reg;
assign out_samp_I = out_samp_I_reg;
assign out_samp_Q = out_samp_Q_reg;
assign out_samp_A_sq = out_samp_A_sq_reg[OUT_SAMP_A_SQ_WIDTH + OUT_SAMP_A_SQ_OFFS - 1:OUT_SAMP_A_SQ_OFFS];
endmodule
/trunk/How_to.txt
0,0 → 1,13
How to run simulation with Icarus and GTKWave
 
iverilog -o dsn FIR_cascaded_tb.v FIR_cascaded.v single_port_ram.v
vvp dsn
gtkwave test.vcd --save=convolution_calculation_in_and_out.gtkw &
 
create_IQ_*.py creates IQ_*_ping.py and IQ_*_signal.py files
it used by testbench. _ping contains coefficients loaded through parallel interface and _signal contains input signal
to run *.py script should be installed
python - python interpreter
matplotlib - plot modelled signals
numpy - arrays
math - thrigonometric functions

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.