2024-11-09 17:13:18 +08:00
|
|
|
%2024-11-09-verify IIR IP core
|
|
|
|
clc;clear;close all
|
|
|
|
|
2024-11-14 20:32:29 +08:00
|
|
|
in = importdata("/home/thfu/work/TailCorr/sim/in.dat");
|
|
|
|
diff_in = importdata("/home/thfu/work/TailCorr/sim/diff_in.dat");
|
|
|
|
wave_verdi = importdata("/home/thfu/work/TailCorr/sim/OrgOut.dat");
|
|
|
|
|
|
|
|
dout0 = importdata("/home/thfu/work/TailCorr/sim/dout0.dat");
|
|
|
|
dout1 = importdata("/home/thfu/work/TailCorr/sim/dout1.dat");
|
|
|
|
dout2 = importdata("/home/thfu/work/TailCorr/sim/dout2.dat");
|
|
|
|
dout3 = importdata("/home/thfu/work/TailCorr/sim/dout3.dat");
|
|
|
|
|
|
|
|
N = length(dout0);
|
|
|
|
cs_wave = zeros(4*N,1);
|
|
|
|
cs_wave(1:4:4*N) = dout0;
|
|
|
|
cs_wave(2:4:4*N) = dout1;
|
|
|
|
cs_wave(3:4:4*N) = dout2;
|
|
|
|
cs_wave(4:4:4*N) = dout3;
|
|
|
|
|
|
|
|
A = [0.025 0.015 0.0002 0.2];
|
|
|
|
tau = -[1/250 1/650 1/1600 1/20];
|
|
|
|
fs = 0.375e9;
|
|
|
|
|
|
|
|
coef_len = length(A);
|
|
|
|
for i = 1:coef_len
|
2024-11-09 17:13:18 +08:00
|
|
|
b(i) = exp(1e9/fs/(1-A(i))*tau(i));
|
|
|
|
a(i) = A(i)/1/(1-A(i))*exp(1e9/fs/(1-A(i))/2*tau(i));
|
|
|
|
h_ideal(:,i) = filter(a(i),[1 -b(i)],diff_in);
|
|
|
|
end
|
|
|
|
|
|
|
|
wave_float = in+ sum(h_ideal,2);
|
2024-11-14 20:32:29 +08:00
|
|
|
|
|
|
|
wave_float_len = length(wave_float);
|
|
|
|
wave_float_8 = interp1(1:wave_float_len,wave_float,1:1/8:(wave_float_len+1-1/8),'linear')';
|
|
|
|
|
|
|
|
[cs_wave_A,wave_float_8_A,Delay] = alignsignals(cs_wave,wave_float_8);
|
|
|
|
N = min(length(wave_float_8_A),length(cs_wave_A));
|
|
|
|
figure(2)
|
|
|
|
diff_plot(wave_float_8_A(18:end), cs_wave_A(82:end),'float','verdi',[0 N]);
|
|
|
|
%%
|
|
|
|
[wave_float_A,wave_verdi_A,Delay] = alignsignals(wave_float,wave_verdi);
|
2024-11-09 17:13:18 +08:00
|
|
|
N = min(length(wave_float_A),length(wave_verdi_A));
|
2024-11-14 20:32:29 +08:00
|
|
|
figure(1)
|
2024-11-09 17:13:18 +08:00
|
|
|
diff_plot(wave_float_A, wave_verdi_A,'float','verdi',[0 N]);
|
|
|
|
%%
|
2024-11-14 20:32:29 +08:00
|
|
|
signalAnalyzer(wave_float,wave_verdi,'SampleRate',1);
|
2024-11-09 17:13:18 +08:00
|
|
|
%%
|
|
|
|
fprintf("a is %.10f\n",a)
|
|
|
|
fprintf("b is %.10f\n",b)
|
|
|
|
%%
|
|
|
|
fprintf("a of 32 bit %d\n",round(a*2^31));
|
|
|
|
fprintf("b of 32 bit %d\n",round(b*2^31));
|
|
|
|
|