Complex Multipy

[1]:
%pylab inline
pylab.rcParams['savefig.dpi'] = 400
import numpy as np
from caf_verilog.cpx_multiply import CpxMultiply
%pylab is deprecated, use %matplotlib inline and import the required libraries.
Populating the interactive namespace from numpy and matplotlib

Source Signals

[2]:
fs = 1
n = np.arange(0,10000)
[3]:
x = np.exp(2*np.pi*0.15*n*1j)
[4]:
Pxp, ffp = psd(x,2**10, fs)
plot(ffp, 10*np.log10(Pxp))
ylim([-80, 25])
xlim([0, 0.2])
savefig('cpx_multiply_pos.png')
../_images/nb_examples_CPX_Multiply_5_0.png
[5]:
y = np.exp(-2*np.pi*0.05*n*1j)
[6]:
Pxn, ffn = psd(y,2**10, fs)
plot(ffn, 10*np.log10(Pxn))
ylim([-80, 25])
savefig('cpx_multiply_neg.png')
../_images/nb_examples_CPX_Multiply_7_0.png

Shifted Signal

[7]:
shifted_signal = x * y
Px, ff = psd(shifted_signal,2**10, fs)
plot(ff, 10*np.log10(Px))
ylim([-80, 25])
xlim([0, 0.2])
[7]:
(0.0, 0.2)
../_images/nb_examples_CPX_Multiply_9_1.png

CpxMultiply

[8]:
output_dir = '.'
cpx_multipy = CpxMultiply(x, y, output_dir=output_dir)

Power Loss

[9]:
Px, ff = psd(cpx_multipy.x_quant,2**10, fs)
plot(ff, 10*np.log10(Px))
ylim(bottom=0)
xlim([0, 0.2])
[9]:
(0.0, 0.2)
../_images/nb_examples_CPX_Multiply_13_1.png

Optimal Shifted Signal

[10]:
Px, ff = psd(cpx_multipy.gen_quantized_output(),2**10, fs)
plot(ff, 10*np.log10(Px))
ylim(bottom=0)
xlim([0, 0.2])
[10]:
(0.0, 0.2)
../_images/nb_examples_CPX_Multiply_15_1.png

Module Shifted Output

[11]:
cpx_multipy.gen_tb()
[12]:
from caf_verilog.io_helper import read_complex_output
import os
cpx_output = read_complex_output(os.path.join('.', cpx_multipy.test_output_filename))
cpx_output = array(cpx_output)
[13]:
qt_check = cpx_multipy.gen_quantized_output()
[14]:
assert len(qt_check) == len(cpx_output)
for qt,cpo in zip(qt_check, cpx_output):
    assert qt == cpo
[15]:
Px_out, ff_out = psd(cpx_output.real,2**10, fs)
plot(ff_out, 10*np.log10(Px_out))
ylim(bottom=0)
xlim([0, 0.2])
savefig('cpx_multiply_module_out.png')
../_images/nb_examples_CPX_Multiply_21_0.png