FFTTest.m 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. FormatSpec = '%d';
  2. N = 3;
  3. R = 1;
  4. B = 14;
  5. M = 3;
  6. PointsNum = 100;
  7. Bmax = ceil(log2(((R*M)^N)/R)+B);
  8. MaxWidthR2 = ceil(log2(((2*M)^N)/2)+B);
  9. MaxWidthR4 = ceil(log2(((4*M)^N)/4)+B);
  10. K = N*20*log10(M);
  11. BitGrowth = ceil(2^(K/20));
  12. Bnew = B+BitGrowth;
  13. x = 1:1:PointsNum;
  14. xDecim = 1:1:PointsNum/R;
  15. Fc = 3;
  16. Fs = 50;
  17. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  18. ReadInDataId = fopen('C:/S5243_FFT_REPO/src/src/Sim/InputSignal.txt','r');
  19. InDataSignal = fscanf(ReadInDataId,FormatSpec);
  20. fclose(ReadInDataId);
  21. ReadFilteredDataId = fopen('C:/S5243_FFT_REPO/src/src/Sim/FilteredData.txt','r');
  22. FilteredData = fscanf(ReadFilteredDataId,FormatSpec);
  23. fclose(ReadFilteredDataId);
  24. ReadImpulseRestId = fopen('C:\S5243_FFT_REPO\src\src\Sim\ImpResp.txt','r');
  25. ImpulseResp = fscanf(ReadImpulseRestId,FormatSpec);
  26. fclose(ReadImpulseRestId);
  27. ReadFilterCoefsId = fopen('C:\S5243_FFT_REPO\src\src\Sim\CorrFilterCoefs.txt','r');
  28. FilterCoefs = fscanf(ReadFilterCoefsId,FormatSpec);
  29. fclose(ReadFilterCoefsId);
  30. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  31. FreqBandOrig = Fs*(1:(PointsNum))/PointsNum;
  32. FreqbandDecim = (Fs/2*R)*(1:(PointsNum))/PointsNum;
  33. InDataFft = abs(fft(InDataSignal+randn(size(InDataSignal)))/PointsNum);
  34. InDataFftDb = 20*log10(InDataFft);
  35. FilteredDataFft = abs(fft(FilteredData+randn(size(FilteredData)))/PointsNum);
  36. % FilteredDataFft = abs(fft(FilteredData)/PointsNum);
  37. FilteredDataFftDb = 20*log10(FilteredDataFft);
  38. FilteredDataFftDb = FilteredDataFftDb-max(FilteredDataFftDb);
  39. ImpuseRespFft = abs(fft(ImpulseResp));
  40. ImpuseRespFftDb = 20*log10(ImpuseRespFft);
  41. ImpuseRespFftDb = ImpuseRespFftDb-max(ImpuseRespFftDb);
  42. Fband = 0:(Fs/R)/(PointsNum/R):(Fs/R)-1/(PointsNum/R);
  43. FbandOrig = 0:Fs/PointsNum:Fs-1/PointsNum;
  44. %InDataFftDb = InDataFftDb(1:length(Fband));
  45. %FilteredDataFftDb = FilteredDataFftDb(1:length(Fband));
  46. %ImpuseRespFftDb = ImpuseRespFftDb(1:length(Fband));
  47. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  48. % figure('name','In Data Time/Freq', 'Numbertitle', 'off')
  49. % subplot(2,1,1)
  50. % plot(InDataSignal)
  51. % grid on;
  52. % grid minor;
  53. % title('In Signal')
  54. % xlabel('Time')
  55. % ylabel('Amp')
  56. %
  57. % subplot(2,1,2)
  58. % plot(FilteredData)
  59. % grid on;
  60. % grid minor;
  61. % title('Filtered Data')
  62. % xlabel('Time')
  63. % ylabel('Amp')
  64. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  65. figure('name','Frequency compare', 'Numbertitle', 'off')
  66. subplot(3,1,1)
  67. plot(FbandOrig,InDataFftDb)
  68. grid on;
  69. grid minor;
  70. title('Single-Sided Amplitude Spectrum of Data before filter')
  71. xlabel('Time')
  72. ylabel('Amp')
  73. subplot(3,1,2)
  74. plot(FbandOrig,ImpuseRespFftDb)
  75. grid on;
  76. grid minor;
  77. title('Cic Frequency response')
  78. xlabel('f (Hz)')
  79. ylabel('Amp')
  80. subplot(3,1,3)
  81. plot(Fband,FilteredDataFftDb)
  82. grid on;
  83. grid minor;
  84. title('Single-Sided Amplitude Spectrum of Data after filter')
  85. xlabel('f (Hz)')
  86. ylabel('Amp')
  87. figure('name','Impulse Response Time/Freq', 'Numbertitle', 'off')
  88. subplot(2,1,1)
  89. plot(FbandOrig,ImpulseResp)
  90. grid on;
  91. grid minor;
  92. title('In Signal')
  93. xlabel('Time')
  94. ylabel('Amp')
  95. subplot(2,1,2)
  96. plot(FbandOrig,ImpuseRespFftDb)
  97. grid on;
  98. grid minor;
  99. title('Single-Sided Amplitude Spectrum of InData')
  100. xlabel('f (Hz)')
  101. ylabel('Amp')