Эксперт по электронике
938 / 838 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
1

Спектры типичных сигналов

31.07.2013, 18:45. Показов 3632. Ответов 4

Давно была идея проиллюстрировать с помощью матлаба спектры типичных сигналов, используемых в радиотехнике, а также свойства преобразования Фурье (ПФ). Вот по тихоньку я к этому и добрался.
Естественно, начало изучения теории спектров стоит начать со знакомством с классическим рядом Фурье и ПФ. Но здесь я не буду разводить демагогию, так как все это есть в учебниках (Зернов, Карпов; Баскаков; Гоноровский; Харкевич и многие другие выдающиеся личности). Буду приводить лишь примеры и обращать Ваше внимание на то, что я хотел проиллюстрировать в том или ином случае.
Я считаю, что программой «Хелоуворлд» в данном случае лучше всего выступит программа вычисления спектра синусоиды. Для плавного перехода от теории к суровым реалиям рассчитаем спектр символьно. Матлаб это делает довольно просто:
Matlab M
1
2
3
4
5
syms t
y = cos(t);
ezplot(y, [-pi, pi])
f = fourier(y);
disp(f)
Получаем:
Код
pi*(dirac(w - 1) + dirac(w + 1))
Небольшая проблемка лишь возникает в визуализации такого спектра.
Но в действительности приборы не считают спектр символьно, т.к. работают в ограниченном времени (нюансы – в литературе). Поэтому большинство примеров построения спектров я приведу с помощью функции быстрого преобразования Фурье – fft. Об этом алгоритме вычисления спектра многое написано, так что обойдусь лишь короткими комментариями в коде. Но, все же, если вопросы возникнут - буду рад ответить.
Итака то же самое, но с помощью fft:
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
clc; clear; close all;
fs = 512; % частота дискретизации
L = 4096; % количество точек сигнала
t = (-L/2:L/2)/fs; % вектор времени
f = 10; % частота синуса
A = 2; % амплитуда синуса
Y = [A*cos(2*pi*f*t); A*sin(2*pi*f*t)]'; % сигнал
nfft = 2^nextpow2(L); % размерность БПФ (количество точек спектра)
S = fft(Y, nfft)/nfft; % расчет комплектсного спектра
f = fs/2*linspace(-1,1, nfft); % массив частот от -fs до fs
Mag = fftshift(abs(S)); % модуль спектра (спектр амплитуд)
Ph = fftshift(unwrap(angle(S))); % аргумент спектра (спектр фаз)
%% Рисуем графики
figure('units', 'normalized', 'position', [.1 .5 .8 .4])
axes('units', 'normalized', 'position', [.075 .1 .9 .8])
subplot(211); plot(f, Mag(:,1), 'or', f, Mag(:,2), 'b'); grid on; hold on;
xlabel('Frecuency, Hz'); ylabel('Amplitude, V')
legend('COS','SIN', 'location', 'best')
subplot(212); plot(f, Ph); grid on
xlabel('Frecuency, Hz'); ylabel('phase, deg')
legend('COS','SIN', 'location', 'best')
[ATTACH][]296144[/][/ATTACH]


Здесь Вы видите спектр синуса и косинуса. Логично, что модули их спектров не отличаются. А вот аргументы (спектры фаз) - очень даже. Что иллюстрирует теоремку о сдвиге во временной области. Прошу заметить, что приведенный спектр фаз не есть реальным спектром фаз синуса и косинуса, а лишь иллюстрирует различие между спектрами этих сигналов.
Следующий сигнал, часто встречающийся в практике – это прямоугольный импульс.
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
clc; clear; close all;
fs = 512; % частота дискретизации
L = 65536; % количество точек сигнала
t = (-L/2:L/2)/fs; % вектор времени
tau = 1;
Y = heaviside(t+tau/2)-heaviside(t-tau/2); % сигнал
nfft = 2^nextpow2(L); % размерность БПФ (количество точек спектра)
S = fft(Y, nfft)/fs; % расчет комплектсного спектра
f = fs/2*linspace(-1,1, nfft); % массив частот от -fs до fs
Mag = fftshift(abs(S)); % модуль спектра (спектр амплитуд)
%% Рисуем графики
figure('units', 'normalized', 'position', [.1 .5 .8 .4])
axes('units', 'normalized', 'position', [.075 .1 .9 .8])
subplot(211); plot(t, Y); grid on; hold on;
xlabel('time, s'); ylabel('Amplitude, V')
xlim([-2*tau 2*tau])
subplot(212); plot(f, Mag); grid on; hold on;
xlabel('Frecuency, Hz'); ylabel('Spectral density, V/Hz')
xlim([-2*pi/tau 2*pi/tau])
Вложение 296145

То же самое, но символьно:
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
syms t
tau = 1;
y = heaviside(t+tau/2)-heaviside(t-tau/2);
f = fourier(y);
pretty(simplify(f))
w = -6*pi/tau:1e-3:6*pi/tau;
subplot(211); h = ezplot(y, [-4*tau 4*tau]); grid on
set(h, 'linewidth', 2)
subplot(212)
plot(w, abs(subs(f, w)), 'linewidth', 2); grid on
xlim([min(w) max(w)])
set(gca,'XTick',-6*pi/tau:2*pi/tau:6*pi/tau)
set(gca,'XTickLabel',{'-6*pi/tau', '-4*pi/tau', '-2*pi/tau','0', '2*pi/tau', '4*pi/tau', '6*pi/tau'})
xlabel('\omega, rad/s'); ylabel('Spectral dencity, V/Hz')
Вложение 296143

А вообще можно взять и нагло заставить матлаб посчитать все и сразу:
Matlab M
1
2
3
4
5
syms t
y = [cos(t); sin(t); heaviside(t); dirac(t);
    heaviside(t+0.5)-heaviside(t-0.5); sinc(t); 1; dirac(t-1)];
f = fourier(y);
pretty(simplify([y f]))
Получаем:
Код
+-                                                                                -+ 
  |                   cos(t),                    pi (dirac(w - 1) + dirac(w + 1))    | 
  |                                                                                  | 
  |                   sin(t),                  -pi (dirac(w - 1) - dirac(w + 1)) i   | 
  |                                                                                  | 
  |                                                                    i             | 
  |                heaviside(t),                         pi dirac(w) - -             | 
  |                                                                    w             | 
  |                                                                                  | 
  |                  dirac(t),                                  1                    | 
  |                                                                                  | 
  |                                                              / w \               | 
  |                                                         2 sin| - |               | 
  |                                                              \ 2 /               | 
  |  heaviside(t + 1/2) - heaviside(t - 1/2),               ----------               | 
  |                                                             w                    | 
  |                                                                                  | 
  |                 sin(pi t)                                                        | 
  |                 ---------,                heaviside(pi + w) - heaviside(w - pi)  | 
  |                   pi t                                                           | 
  |                                                                                  | 
  |                     1,                                2 pi dirac(w)              | 
  |                                                                                  | 
  |                dirac(t - 1),                            exp(-w i)                | 
  +-                                                                                -+
Здесь Вы видите проявления сдвига по времени и дуальность ПФ.
3
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2013, 18:45
Ответы с готовыми решениями:

АМ колебания, спектры сигналов
Привет всем, нужна ваша помощь...Если честно я не очень понимаю в этом во всем, поэтому желательно...

Амплитудные и фазовые спектры
Здравствуйте!Прошу помочь с построением амплитудного и фазового спектра гармонического сигнала....

Амплитудный и фазовый спектры
Здравствуйте. Требуется написать функцию, которая используется для построения амплитудной и фазовой...

Как строить амплитудный и фазовый спектры
помогите, пожалуйста. где можно взять подробную информацию про функции? имеется спектральная...

4
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,161
Записей в блоге: 1
01.08.2013, 11:25 2
...в качестве интерактивного средства визуализации и просмотра спектров рекомендую небольшую, но функциональную утилитку - Numeri.
0
453 / 279 / 13
Регистрация: 13.11.2012
Сообщений: 588
Записей в блоге: 1
01.08.2013, 12:02 3
Цитата Сообщение от raxp Посмотреть сообщение
...в качестве интерактивного средства визуализации и просмотра спектров рекомендую небольшую, но функциональную утилитку - Numeri.
где сие можно найти, а то гугл всякий мусор выдаёт?
0
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,161
Записей в блоге: 1
01.08.2013, 12:25 4
https://www.cyberforum.ru/blog... og977.html

Фурье (5), данные (1), создание данных или из файла или по формуле, вычислять БПФ/ДПФ (2, 3) ...в общем, разберетесь.
1
Эксперт по электронике
938 / 838 / 121
Регистрация: 23.11.2012
Сообщений: 2,489
01.08.2013, 18:51  [ТС] 5
Цитата Сообщение от raxp Посмотреть сообщение
читайте мой комментарий по ссылке. Сколько ей лет и сколько матлабу.
Это да. Ну тогда, пожалуй, то, что я наваяю станет (надеюсь) еще одной из вариаций на тему "Спектры".

Добавлено через 5 часов 10 минут
И снова здравствуйте. Сегодня хочу показать Вам пример вычисления спектров периодических последовательностей с помощью матлаба, а также продемонстрировать некие свойства функций в контексте ПФ.
Итак для своих сегодняшних опытов я выбрал два сигнала. Это периодические последовательности прямоугольных и треугольных импульсов. Вот, что из этого получилось:
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
clc; clear all; close all
%% Сигнал
A0   = 1;                                   % Амплитуда, мВ
f0   = 1;                                   % Частота, кГц
T    = 1/f0;                                % Период, мс
fs   = 512;                                 % Частота дискретизации
L    = 2^13;                                % Количество отсчетов по времени
t    = (-L/2:L/2-1)/fs;                     % Вектор времени
a    = 4;                                   % Скважность
tau  = T/a;                                 % Длительность импульса
duty = 1/a*100;                             % Коэфициент заполнения
rpt = -L/2:1/f0:L/2-1;
d = t(1):T:t(end);                          % 3 Hz repetition freq 
% Сигнал
Y    = [A0/2 + A0/2*square(2*pi*f0*t, duty);
        pulstran(t, d, 'tripuls', tau, 0)].';
%% Преобразование Фурье
nfft    = 2^nextpow2(L);                    % Количество отсчетов по частоте
F       = fft(Y, nfft)/nfft;                % БПФ с нормировкой по амплитуде
spec    = fftshift(abs(F));                 % Модуль БПФ
f       = fs/2*linspace(-1,1,nfft);         % Вектор частот
%% Графики
figure('units', 'normalized', 'position', [.2 .1 .7 .8])
axes('units', 'normalized', 'position', [.075 .1 .9 .8])
 
subplot(311); plot(t, Y, 'linewidth', 2)
xlim([-2*T 2*T]); ylim([1.1*min(min(Y)) 1.1*max(max(Y))]);
xlabel('t, ms'); ylabel('U(t), mV'); grid on
 
subplot(312); stem(f, spec(:,2), 'o'); grid on; hold on;
h(2) = ezplot('1/f', [0 4/tau]);
k = -4:4;
plot(k/tau, zeros(9,1), 'or', 'linewidth', 3,...
    'markerfacecolor', 'w', 'markersize', 8)
title('Спектр последовательности прямоугольных импульсов')
xlabel('Frequency, kHz'); ylabel('|S(j*f)|');
xlim([-4/tau 4/tau]); ylim([0 A0*tau/T+0.5*A0*tau/T])
 
text(0, A0*tau/T+0.25*A0*tau/T, '$\frac{A_0*\tau}{T}$',...
    'interpreter', 'latex', 'fontsize', 20,...
    'horizontalalignment', 'center', 'backgroundcolor', [.8 1 .8])
text(1/tau, 0.25*A0*tau/T, '$\frac{1}{\tau}$',...
    'interpreter', 'latex', 'fontsize', 20,...
    'horizontalalignment', 'center', 'backgroundcolor', [.8 1 .8])
 
subplot(313); stem(f, spec(:,1), 'o'); grid on; hold on;
h(1) = ezplot('1/f^2', [0 4/tau]);
plot(k(1:2:end)/tau, zeros(5,1), 'or', 'linewidth', 3,...
    'markerfacecolor', 'w', 'markersize', 8)
title('Спектр последовательности треугольных импульсов')
xlabel('Frequency, kHz'); ylabel('|S(j*f)|');
xlim([-4/tau 4/tau]); ylim([0 A0*tau/(2*T)+0.5*A0*tau/(2*T)])
 
text(2/tau, 0.125*A0*tau/T, '$\frac{2}{\tau}$',...
    'interpreter', 'latex', 'fontsize', 20,...
    'horizontalalignment', 'center', 'backgroundcolor', [.8 1 .8])
 
set(h, 'color', [.3 1 .3])
Спектры типичных сигналов

К Вы можете видеть форма огибающих спектра у этих сигналов одинакова. НО! Расстояние между узлами (точками, где спектральные составляющие зануляются) у этих функций разное! Также разная и амплитуда на нулевой (да и остальных следственно) частоте (чему эта амплитуда равна для треугольных импульсов я не помню, так что не написал да бы не врать ). Также на рисунке для сравнения привел две кривые, которые показывают пропорциональность убывания спектра с ростом частоты. Можно наблюдать известную (надеюсь ) закономерность, которая в первом приближении звучит так:
Чем больше у функции непрерывных производных - тем быстрее убывает ее спектр.
Или:
Спектр убывает пропорционально 1/N, где N - количество непрерывных производных.
С двумя крайними случаями этого правила Вы можете ознакомится выше, а именно:
Косинус можно дифференцировать до бесконечности - его спектр убывает бесконечно быстро и наоборот:
продифференцировать дельта-импульс (функция Дирака) под силу лишь этому парню, поэтому спектр его не убывает вообще.
Вот пожалуй и все на сегодня. Надеюсь, что кому то это было хоть чуть-чуть интересно . С радостью отвечу на вопросы (если смогу ).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2013, 18:51

Амплитудный и фазовый спектры аудио сигнала
Здравствуйте. Необходимо построить графики АЧХ и ФЧХ wav - файла. Можно ли это сделать с помощью...

Амплитудный и частотно-фазовый спектры. Мучаюсь уже месяц или около того
Дан код. clc syms wk bk ck arg k Cabs bk = (2 - 2 * (-1)^k) / pi / k; Cabs = abs(bk); arg...

Как можно получить амплитудный и фазовый спектры, коэффициенты разложения бпф без стандартной функции fft
Зосима, если тебя не затруднит, не мог бы ты показать как можно получить амплитудный и фазовый...

Обработка ЧМ сигналов(спектры ЧМ сигналов)
Доброго времени суток! Ранее задавала вопрос: "Алгоритм обработки ЧМ сигналов, основанный на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.