Advertisement
Guest User

Untitled

a guest
Jun 20th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 3.78 KB | None | 0 0
  1. %Sigma Delta E3
  2.  
  3. clear all
  4. close all
  5. pkg load all
  6.  
  7. %sim param
  8. Vr = 10^(4/20)*sqrt(2)*0.5
  9. Vrms = 1*sqrt(2);
  10. Pn = 10^(-92/20)
  11. Pnq = Pn/3
  12. Pnt = Pn*2/3
  13.  
  14. %osr = nthroot(((Vr/2)^2*pi^6)/(Pnq^2*12*7),7)
  15. osr = 37.4;
  16. n_sim = 2^15;
  17. B = 10e6;
  18. fs = osr*2*B
  19. f_sin = fs*20/n_sim;
  20. M = round(3*B/f_sin);
  21.  
  22. Vnq=10^(-102/20);
  23. res_bits = log10((Vr/2)^2/(12*Pnq^2))/(2*log10(2))
  24.  
  25. %vin
  26. Ain = sqrt(2)*0.001;
  27. np = 1:n_sim;
  28.  
  29. vin = Ain*sin(2*pi*np*f_sin*1/fs)+Pnt*rand;
  30.  
  31. x1 = zeros(1,size(vin)(2));
  32. x2 = zeros(1,size(vin)(2));
  33. x3 = zeros(1,size(vin)(2));
  34. x4 = zeros(1,size(vin)(2));
  35. n1 = zeros(1,size(vin)(2));
  36. n2 = zeros(1,size(vin)(2));
  37. n3 = zeros(1,size(vin)(2));
  38. s1 = zeros(1,size(vin)(2));
  39. s2 = zeros(1,size(vin)(2));
  40. s3 = zeros(1,size(vin)(2));
  41. s4 = zeros(1,size(vin)(2));
  42. d1 = zeros(1,size(vin)(2));
  43. d2 = zeros(1,size(vin)(2));
  44. d3 = zeros(1,size(vin)(2));
  45. d4 = zeros(1,size(vin)(2));
  46. dout = zeros(1,size(vin)(2));
  47. dout1 = zeros(1,size(vin)(2));
  48. dout2 = zeros(1,size(vin)(2));
  49. dout1_aux = zeros(1,size(vin)(2));
  50. dout2_aux1 = zeros(1,size(vin)(2));
  51. dout2_aux2 = zeros(1,size(vin)(2));
  52. vfeed = zeros(1,size(vin)(2));
  53.  
  54. b1=1*Vr;
  55. b2=1*Vr;
  56. k=1;
  57.  
  58.  
  59. %2nd order sigma delta sim
  60. %for i=2:size(dout)(2)-2
  61. %  dout(i) = sign(x2(i-1));
  62. %  n1(i) = vin(i)-dout(i)*b2;
  63. %  x1(i) = n1(i) + x1(i-1);
  64. %  n2(i) = x1(i)-dout(i)*b1;
  65. %  x2(i) = n2(i) + x2(i-1);
  66. %endfor
  67.  
  68. %1st order sigma delta sim
  69. %for i=2:size(dout)(2)-2
  70. %  dout(i) = sign(x3(i-1));
  71. %  n3(i) = vin(i)-dout(i)*Vr; %x1[n-1]
  72. %  x3(i) = n3(i) + x3(i-1);
  73. %endfor
  74.  
  75. n_sinad = 2;
  76. SNR_d = zeros(1,n_sinad);
  77. SNR_dec = zeros(1,n_sinad);
  78. amp_in = zeros(1, n_sinad);
  79.  
  80. %MASH 2+1
  81. for n=0:n_sinad-1
  82.  
  83.     Ain = sqrt(2)*((0.1-0.0001)/(n_sinad-1)*(n+1)-((0.1-0.0001)/(n_sinad-1)-0.0001));
  84.  
  85.     vin = Ain*sin(2*pi*np*f_sin*1/fs)+Pnt*rand(1, max(size(vin)));
  86.  
  87.   for i=3:size(dout)(2)
  88.     %2nd order modulator
  89.     dout1(i) = sign(x2(i-1));
  90.     n1(i) = vin(i)-dout1(i)*b2;
  91.     x1(i) = n1(i) + x1(i-1);
  92.     n2(i) = x1(i)-dout1(i)*b1;
  93.     x2(i) = n2(i) + x2(i-1);
  94.    
  95.     vfeed(i) = x2(i-1)-dout1(i)*Vr;
  96.    
  97.     %first order modulator
  98.     dout2(i) = sign(x3(i-1))*k;
  99.     n3(i) = vfeed(i)*Vr-dout2(i)*Vr;
  100.     x3(i) = n3(i) + x3(i-1);
  101.        
  102.     %output  
  103.     dout(i) = dout1(i-1) - (dout2(i)-2*dout2(i-1)+dout2(i-2));
  104.    
  105.     %decimation filter (4th order synk filter)
  106.     if(i>M)
  107.       s1(i) = (dout(i)/M)+s1(i-1);
  108.       d1(i) = s1(i)-s1(i-M);
  109.       s2(i) = (d1(i)/M)+s2(i-1);
  110.       d2(i) = s2(i)-s2(i-M);
  111.       s3(i) = (d2(i)/M)+s3(i-1);
  112.       d3(i) = s3(i)-s3(i-M);
  113.       s4(i) = (d3(i)/M)+s4(i-1);
  114.       d4(i) = s4(i)-s4(i-M);
  115.     endif
  116.   endfor
  117.  
  118.   aux = fft(dout.*blackmanharris(max(size(dout)))')/max(size(dout));
  119.   fft_x = (aux .*conj(aux));
  120.  
  121.   [x, center_d] = max(fft_x(1:100));
  122.  
  123.   Ps_d = sum(fft_x((center_d-3):(center_d+3)));
  124.   Pn_d = sum(fft_x(4:200))-Ps_d;
  125.   SNDR_d(n+1) = 10*log10(Ps_d/Pn_d)
  126.  
  127.   aux1 = fft(dout1.*blackmanharris(max(size(dout1)))')/max(size(dout1));
  128.   fft_x_1 = (aux1 .*conj(aux1));
  129.  
  130.   aux2 = fft(dout2.*blackmanharris(max(size(dout2)))')/max(size(dout2));
  131.   fft_x_2 = (aux2 .*conj(aux2));
  132.  
  133.   aux_dec = fft(d4.*blackmanharris(max(size(d4)))')/max(size(d4));
  134.   fft_x_dec = (aux_dec .*conj(aux_dec));
  135.  
  136.   Ps_dec = sum(fft_x_dec((center_d-5):(center_d+5)));
  137.   Pn_dec = sum(fft_x_dec(1:100))-Ps_dec;
  138.   SNDR_dec(n+1) = 10*log10(Ps_dec/Pn_dec)
  139. endfor
  140.  
  141. figure(1)
  142. semilogx(10*log10(fft_x_1), 'color', 'b')
  143. hold on
  144. semilogx(10*log10(fft_x_2), 'color', 'g')
  145. title('1st and 2nd order modulators FFT')
  146. grid on
  147.  
  148. figure(2)
  149. semilogx(10*log10(fft_x), 'color', 'b')
  150. title('3rd order modulator FFT')
  151. grid on
  152.  
  153. figure(3)
  154. semilogx(10*log10(fft_x_dec), 'color', 'b')
  155. title('Filtered 3rd order modulator FFT')
  156. grid on
  157.  
  158. figure(4)
  159. plot([SNDR_dec' amp_in'])
  160. title('Post filter SINAD')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement