v04-din+IIR_out to compare with verdi

This commit is contained in:
thfu 2024-11-20 20:27:50 +08:00
parent fda936e228
commit 9f61ed8b68
2 changed files with 37 additions and 23 deletions

View File

@ -1,36 +1,49 @@
%2024-11-09-verify IIR IP core %2024-11-09-verify IIR IP core
clc;clear;close all clc;clear;close all
in = importdata("/home/thfu/work/TailCorr/sim/in.dat"); in = importdata("/home/thfu/work/TailCorr/sim/in.dat");
diff_in = importdata("/home/thfu/work/TailCorr/sim/diff_in.dat"); diff_in = importdata("/home/thfu/work/TailCorr/sim/diff_in.dat");
wave_verdi = importdata("/home/thfu/work/TailCorr/sim/OrgOut.dat"); wave_verdi = importdata("/home/thfu/work/TailCorr/sim/OrgOut.dat");
% imp = [2^15-1; zeros(499,1)]; dout0 = importdata("/home/thfu/work/TailCorr/sim/dout0.dat");
A = [0.025 0.015 0.0002]; dout1 = importdata("/home/thfu/work/TailCorr/sim/dout1.dat");
tau = -[1/250 1/650 1/1600]; dout2 = importdata("/home/thfu/work/TailCorr/sim/dout2.dat");
fs = 2e9; dout3 = importdata("/home/thfu/work/TailCorr/sim/dout3.dat");
for i = 1:3 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
b(i) = exp(1e9/fs/(1-A(i))*tau(i)); 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)); a(i) = A(i)/1/(1-A(i))*exp(1e9/fs/(1-A(i))/2*tau(i));
end
for i = 1:3
h_ideal(:,i) = filter(a(i),[1 -b(i)],diff_in); h_ideal(:,i) = filter(a(i),[1 -b(i)],diff_in);
end end
wave_float = in+ sum(h_ideal,2); wave_float = in+ sum(h_ideal,2);
[wave_float_A,wave_verdi_A] = alignsignals(wave_float,wave_verdi);
N = min(length(wave_float_A),length(wave_verdi_A));
figure()
diff_plot(wave_float_A, wave_verdi_A,'float','verdi',[0 N]);
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]);
%% %%
% signalAnalyzer(h_ideal_A*2^20,out_A,'SampleRate',1); [wave_float_A,wave_verdi_A,Delay] = alignsignals(wave_float,wave_verdi);
% signalAnalyzer(h_ideal_A,floor(out_A/2^20),'SampleRate',1); N = min(length(wave_float_A),length(wave_verdi_A));
signalAnalyzer(wave_float_A,wave_verdi_A,'SampleRate',1); figure(1)
% signalAnalyzer((h_ideal_A(1:N)-out_A(1:N))/2^35,'SampleRate',1); diff_plot(wave_float_A, wave_verdi_A,'float','verdi',[0 N]);
%%
signalAnalyzer(wave_float,wave_verdi,'SampleRate',1);
%% %%
fprintf("a is %.10f\n",a) fprintf("a is %.10f\n",a)
fprintf("b is %.10f\n",b) fprintf("b is %.10f\n",b)

View File

@ -6,7 +6,8 @@ Script_out = Script_out(1:N);
n = 0:1:N-1; n = 0:1:N-1;
diff = iir_out-Script_out; diff = iir_out-Script_out;
subplot(211) tiledlayout(2,1)
ax1 = nexttile;
plot(n,iir_out,n,Script_out) plot(n,iir_out,n,Script_out)
xlabel('n') xlabel('n')
legend(leg1,leg2) legend(leg1,leg2)
@ -14,14 +15,14 @@ xlim(a)
title('time domain') title('time domain')
grid on grid on
subplot(212) ax2 = nexttile;
plot(n,diff) plot(n,diff)
xlabel('n') xlabel('n')
title('diff') title('diff')
grid on grid on
hold on hold on
xlim(a) xlim(a)
linkaxes([ax1,ax2],'x');
[diff_max,R_mpos] = max(abs(diff)); [diff_max,R_mpos] = max(abs(diff));
plot(n(R_mpos),diff(R_mpos),'r*') plot(n(R_mpos),diff(R_mpos),'r*')
text(n(R_mpos), diff(R_mpos), ['(',num2str(n(R_mpos)),',',num2str(diff(R_mpos)),')'],'color','k'); text(n(R_mpos), diff(R_mpos), ['(',num2str(n(R_mpos)),',',num2str(diff(R_mpos)),')'],'color','k');