Advertisement
Guest User

Main

a guest
Apr 8th, 2020
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.20 KB | None | 0 0
  1. clear;
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  3. %%%           Инициализация             %%%
  4. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  5.  
  6. N = 128;                        % Кол-во точек по условию.
  7. base = 2;                       % Основание.
  8.  
  9. Ts = 1/N;                       % Период сигнала (c).
  10. f0 = 1/Ts;                      % Частота дискретизации.
  11. t = 0:Ts/(N-1):Ts;              % Временная сетка.
  12. nAmpl = 1;                      % Амплитуда шума.
  13. noise = 1;%randn(1, N).*nAmpl;     % Генерация шума.
  14.  
  15. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  16.  
  17. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  18. %%%   БПФ с прореживанием по частоте    %%%
  19. %%%           по основанию 2            %%%
  20. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  21.  
  22. %%%       Эталонный спектр c 2*f0       %%%
  23. signal = createSignal(1, 2*f0, t, 0, noise);
  24. etalon = abs(fftshift(fft(signal)));
  25. drawStem(t, etalon, 'Эталонный спектр исследуемого сигнала c 2*f0', 'Отсчёты, N', 'Амлитуда');
  26. set(gca, 'xTick', [0:8:N-1, N-1]);
  27. legend('Эталонный спектр исходного сигнала c 2*f0');
  28.  
  29. %%%            Cпектр c 2*f0            %%%
  30. % signal = createSignal(1, 2*f0, t, 0, noise);
  31. my = abs(func8v2_FFT(signal));
  32.  
  33. %%%           Аналог fftshift()         %%%
  34. % my1(1:N/2) = my(N/2+1:end);
  35. % my1(N/2+1:N) = my(1:N/2);
  36.  
  37. drawStem(t, fftshift(my), 'Спектр сигнала c 2*f0', 'Отсчёты, N', 'Амлитуда');
  38. set(gca, 'xTick', [0:8:N-1, N-1]);
  39. legend('Спектр сигнала c 2*f0');
  40.  
  41. %%%            Cпектр c 4*f0            %%%
  42. signal = createSignal(1, 4*f0, t, 0, noise);
  43. my = abs(func8v2_FFT(signal));
  44. drawStem(t, fftshift(my), 'Спектр сигнала с 4*f0', 'Отсчёты, N', 'Амлитуда');
  45. set(gca, 'xTick', [0:8:N-1, N-1]);
  46. legend('Спектр сигнала с 4*f0');
  47.  
  48.  
  49. %%%   Cумма с f0 и 1.2*f0, fд = 2*f0    %%%
  50. signal =  createSignal(1, 2*f0, t, 0, noise) + createSignal(5, 1.2*2*f0, t, 0, noise);
  51. my = abs(func8v2_FFT(signal));
  52. drawStem(t, fftshift(my), 'Спектр суммы с f0 и 1.2*f0, fд = 2*f0', 'Отсчёты, N', 'Амлитуда');
  53. set(gca, 'xTick', [0:8:N-1, N-1]);
  54. legend('Спектр суммы с f0 и 1.2*f0, fд = 2*f0');
  55.  
  56.  
  57.  
  58. %%%   Спектр периодической последовательности c 2*f0   %%%
  59. signalS = repmat(rectpuls(0:Ts/(N-1)*10:Ts, 0.25), 1, 10);
  60. figure();
  61. plot(signalS);
  62. % my = abs(func8v2_FFT(signalS));
  63. % drawPlot(repmat(t, 1, 10), signalS, '', '', '');
  64.  
  65.  
  66. %%%   АЧХ фильтра с отводом БПФ N/2 при 2*f0   %%%
  67. j = 1;
  68. for i = 0:f0/9:10*f0
  69.     signal = createSignal(1, i, t, 0, 0);
  70.    
  71.     ACH(j) = abs(signal(N/2));
  72.     j = j + 1;
  73. end
  74. drawStem(0:f0/9:10*f0, ACH, 'АЧХ фильтра с отводом БПФ по номеру N/2', 'Частоты', 'Амлитуда');
  75. set(gca, 'xTick', [0, f0, 2*f0, 3*f0, 4*f0, 5*f0, 6*f0, 7*f0, 8*f0, 9*f0, 10*f0]);
  76. set(gca, 'xTickLabel', {'0', 'f0', '2*f0', '3*f0', '4*f0', '5*f0', '6*f0', '7*f0', '8*f0', '9*f0', '10*f0'});
  77.  
  78.  
  79. %%%       Сигнал с N1 (N1 < N)          %%%
  80. signal = createSignal(1, 2*f0, t, 0, noise);
  81. signal(N-30:end) = 0; % Зануляем 30 последних элементов
  82. my = abs(func8v2_FFT(signal));
  83.  
  84. signal = createSignal(1, 2*f0, t, 0, noise);
  85. signal(N-70:end) = 0; % Зануляем 70 последних элементов
  86. my1 = abs(func8v2_FFT(signal));
  87.  
  88.     figure('name', 'Спектр сигнала c 2*f0');
  89.     hold on;
  90.     stem(t, etalon, '-k', 'v', 'LineWidth', 2);
  91.     stem(t, fftshift(my), '-r', 'v', 'LineWidth', 2);
  92.     stem(t, fftshift(my1), '-c', 'v', 'LineWidth', 2);
  93.     title('Спектр сигнала c 2*f0');
  94.     xlabel('Отсчёты, N');
  95.     ylabel('Амлитуда');
  96.     grid on;
  97. set(gca, 'yTick', [0:5:100]);
  98. legend('Эталонный спектр сигнала с 2*f0', 'Спектр с занулением 30 последних отсчётов', 'Спектр с занулением 70 последних отсчётов');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement