Guest User

Untitled

a guest
Jan 22nd, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. clear all
  2.  
  3. % Generate input data sequence and plot
  4. N = 128;
  5. f1 = 10;
  6. num_cycles = 2;
  7. fs = f1*N/num_cycles;
  8. x_time = 0:1/fs:num_cycles/f1-1/fs;
  9. X = sin(x_time*2*pi*f1);
  10. plot(x_time,X);
  11. title('Input Waveform');
  12.  
  13. % Split inputs into eight channels
  14. X0_0 = X(1:8:N);
  15. X0_1 = X(5:8:N);
  16. X0_2 = X(3:8:N);
  17. X0_3 = X(7:8:N);
  18. X0_4 = X(2:8:N);
  19. X0_5 = X(6:8:N);
  20. X0_6 = X(4:8:N);
  21. X0_7 = X(8:8:N);
  22.  
  23. % Compute FFT of each channel
  24. X1_0 = fft(X0_0);
  25. X1_1 = fft(X0_1);
  26. X1_2 = fft(X0_2);
  27. X1_3 = fft(X0_3);
  28. X1_4 = fft(X0_4);
  29. X1_5 = fft(X0_5);
  30. X1_6 = fft(X0_6);
  31. X1_7 = fft(X0_7);
  32.  
  33. % Generate Twiddle factors
  34. Wn=exp(-1i*2*pi/N);
  35.  
  36. % Produce output of first stage of butterfly
  37.  
  38. for k=0:(N/8)-1
  39. X2_0(k+1) = X1_0(k+1) + (Wn^(k*8)) * X1_1(k+1);
  40. X2_1(k+1) = X1_0(k+1) + (Wn^(k*8+4)) * X1_1(k+1);
  41. X2_2(k+1) = X1_2(k+1) + (Wn^(k*8)) * X1_3(k+1);
  42. X2_3(k+1) = X1_2(k+1) + (Wn^(k*8+4)) * X1_3(k+1);
  43. X2_4(k+1) = X1_4(k+1) + (Wn^(k*8)) * X1_5(k+1);
  44. X2_5(k+1) = X1_4(k+1) + (Wn^(k*8+4)) * X1_5(k+1);
  45. X2_6(k+1) = X1_6(k+1) + (Wn^(k*8)) * X1_7(k+1);
  46. X2_7(k+1) = X1_6(k+1) + (Wn^(k*8+4)) * X1_7(k+1);
  47. end
  48.  
  49. % Produce output of second stage of butterfly
  50.  
  51. for k=0:(N/8)-1
  52. X3_0(k+1) = X2_0(k+1) + (Wn^(k*8)) * X2_2(k+1);
  53. X3_1(k+1) = X2_1(k+1) + (Wn^(k*8+2)) * X2_3(k+1);
  54. X3_2(k+1) = X2_0(k+1) + (Wn^(k*8+4)) * X2_2(k+1);
  55. X3_3(k+1) = X2_1(k+1) + (Wn^(k*8+6)) * X2_3(k+1);
  56. X3_4(k+1) = X2_4(k+1) + (Wn^(k*8)) * X2_6(k+1);
  57. X3_5(k+1) = X2_5(k+1) + (Wn^(k*8+2)) * X2_7(k+1);
  58. X3_6(k+1) = X2_4(k+1) + (Wn^(k*8+4)) * X2_6(k+1);
  59. X3_7(k+1) = X2_5(k+1) + (Wn^(k*8+6)) * X2_7(k+1);
  60. end
  61.  
  62. % Produce output of third stage of butterfly
  63.  
  64. for k=0:(N/8)-1
  65. X4_0(k+1) = X3_0(k+1) + (Wn^(k*8)) * X3_4(k+1);
  66. X4_1(k+1) = X3_1(k+1) + (Wn^(k*8+1)) * X3_5(k+1);
  67. X4_2(k+1) = X3_2(k+1) + (Wn^(k*8+2)) * X3_6(k+1);
  68. X4_3(k+1) = X3_3(k+1) + (Wn^(k*8+3)) * X3_7(k+1);
  69. X4_4(k+1) = X3_0(k+1) + (Wn^(k*8+4)) * X3_4(k+1);
  70. X4_5(k+1) = X3_1(k+1) + (Wn^(k*8+5)) * X3_5(k+1);
  71. X4_6(k+1) = X3_2(k+1) + (Wn^(k*8+6)) * X3_6(k+1);
  72. X4_7(k+1) = X3_3(k+1) + (Wn^(k*8+7)) * X3_7(k+1);
  73. end
  74.  
  75. % Merge X4 into final output
  76.  
  77. c = 1;
  78. for k = 1:N/8
  79. X5(c:c+7) = [X4_0(k);X4_1(k);X4_2(k);X4_3(k);X4_4(k);X4_5(k);X4_6(k);X4_7(k)];
  80. c = c+8;
  81. end
  82.  
  83. % Plot expected FFT and Butterfly FFT
  84. figure
  85. matlab_fft=fft(X);
  86. plot(abs(matlab_fft));
  87. title('Matlab FFT');
  88. figure
  89. plot(abs(X5));
  90. title('Butterfly FFT');
Add Comment
Please, Sign In to add comment