Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear;
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%% Инициализация %%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- N = 128; % Кол-во точек по условию.
- base = 2; % Основание.
- Ts = 1/N; % Период сигнала (c).
- f0 = 1/Ts; % Частота дискретизации.
- t = 0:Ts/(N-1):Ts; % Временная сетка.
- nAmpl = 1; % Амплитуда шума.
- noise = 1;%randn(1, N).*nAmpl; % Генерация шума.
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%% БПФ с прореживанием по частоте %%%
- %%% по основанию 2 %%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%% Эталонный спектр c 2*f0 %%%
- signal = createSignal(1, 2*f0, t, 0, noise);
- etalon = abs(fftshift(fft(signal)));
- drawStem(t, etalon, 'Эталонный спектр исследуемого сигнала c 2*f0', 'Отсчёты, N', 'Амлитуда');
- set(gca, 'xTick', [0:8:N-1, N-1]);
- legend('Эталонный спектр исходного сигнала c 2*f0');
- %%% Cпектр c 2*f0 %%%
- % signal = createSignal(1, 2*f0, t, 0, noise);
- my = abs(func8v2_FFT(signal));
- %%% Аналог fftshift() %%%
- % my1(1:N/2) = my(N/2+1:end);
- % my1(N/2+1:N) = my(1:N/2);
- drawStem(t, fftshift(my), 'Спектр сигнала c 2*f0', 'Отсчёты, N', 'Амлитуда');
- set(gca, 'xTick', [0:8:N-1, N-1]);
- legend('Спектр сигнала c 2*f0');
- %%% Cпектр c 4*f0 %%%
- signal = createSignal(1, 4*f0, t, 0, noise);
- my = abs(func8v2_FFT(signal));
- drawStem(t, fftshift(my), 'Спектр сигнала с 4*f0', 'Отсчёты, N', 'Амлитуда');
- set(gca, 'xTick', [0:8:N-1, N-1]);
- legend('Спектр сигнала с 4*f0');
- %%% Cумма с f0 и 1.2*f0, fд = 2*f0 %%%
- signal = createSignal(1, 2*f0, t, 0, noise) + createSignal(5, 1.2*2*f0, t, 0, noise);
- my = abs(func8v2_FFT(signal));
- drawStem(t, fftshift(my), 'Спектр суммы с f0 и 1.2*f0, fд = 2*f0', 'Отсчёты, N', 'Амлитуда');
- set(gca, 'xTick', [0:8:N-1, N-1]);
- legend('Спектр суммы с f0 и 1.2*f0, fд = 2*f0');
- %%% Спектр периодической последовательности c 2*f0 %%%
- signalS = repmat(rectpuls(0:Ts/(N-1)*10:Ts, 0.25), 1, 10);
- figure();
- plot(signalS);
- % my = abs(func8v2_FFT(signalS));
- % drawPlot(repmat(t, 1, 10), signalS, '', '', '');
- %%% АЧХ фильтра с отводом БПФ N/2 при 2*f0 %%%
- j = 1;
- for i = 0:f0/9:10*f0
- signal = createSignal(1, i, t, 0, 0);
- ACH(j) = abs(signal(N/2));
- j = j + 1;
- end
- drawStem(0:f0/9:10*f0, ACH, 'АЧХ фильтра с отводом БПФ по номеру N/2', 'Частоты', 'Амлитуда');
- set(gca, 'xTick', [0, f0, 2*f0, 3*f0, 4*f0, 5*f0, 6*f0, 7*f0, 8*f0, 9*f0, 10*f0]);
- set(gca, 'xTickLabel', {'0', 'f0', '2*f0', '3*f0', '4*f0', '5*f0', '6*f0', '7*f0', '8*f0', '9*f0', '10*f0'});
- %%% Сигнал с N1 (N1 < N) %%%
- signal = createSignal(1, 2*f0, t, 0, noise);
- signal(N-30:end) = 0; % Зануляем 30 последних элементов
- my = abs(func8v2_FFT(signal));
- signal = createSignal(1, 2*f0, t, 0, noise);
- signal(N-70:end) = 0; % Зануляем 70 последних элементов
- my1 = abs(func8v2_FFT(signal));
- figure('name', 'Спектр сигнала c 2*f0');
- hold on;
- stem(t, etalon, '-k', 'v', 'LineWidth', 2);
- stem(t, fftshift(my), '-r', 'v', 'LineWidth', 2);
- stem(t, fftshift(my1), '-c', 'v', 'LineWidth', 2);
- title('Спектр сигнала c 2*f0');
- xlabel('Отсчёты, N');
- ylabel('Амлитуда');
- grid on;
- set(gca, 'yTick', [0:5:100]);
- legend('Эталонный спектр сигнала с 2*f0', 'Спектр с занулением 30 последних отсчётов', 'Спектр с занулением 70 последних отсчётов');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement