#include <stdio.h>
#include <string.h>
#include "dspl.h"
/* Размер векторов входных сигналов и огибающей спетра */
#define N 1000
/* Период повторения импульса. Для изменения скважности мы будем менять
* длительность импульса при фиксированном периоде повторения */
#define T 4.0
/* Амплитуда */
#define A 2.0
/* Количество спектральных гармоник разложения в ряд Фурье */
#define M 41
/* длина команды Gnuplot */
#define PLOTCMD_LEN 256
int main(int argc, char* argv[])
{
double t1[N]; /* время (сек) на одном периоде повторения */
double t4[N]; /* время (сек) на четырех периодах повторения */
double s[N]; /* входной сигнал */
complex_t S[M]; /* комплексный спектр периодического сигнала */
double Smag[M]; /* амплитудный спектр периодического сигнала */
double w[M]; /* частота (рад/c) дискретного спектра */
double wc[N]; /* частота (рад/с) огибающей спектра */
double Sc[N]; /* огибающая спектра */
double tau; /* длительность импульса */
/* скважность */
double Q[3] = {5.0, 2.0, 1.25};
int q, m, n;
char fname[64]; /* имя файла данных */
char plotcmd[PLOTCMD_LEN]; /* Команда Gnuplot */
void* hdspl; /* DSPL handle */
void* hplot; /* GNUPLOT handle */
hdspl = dspl_load();
if(!hdspl)
{
printf("Cannot to load libdspl!\n");
return 0;
}
/* Вектор частот непрерывной огибаюхей вида sin(w/2*tau) / (w/2*T) */
linspace(-M_PI*(double)M/(double)T, M_PI*(double)M/(double)T, N, DSPL_SYMMETRIC, wc);
/* заполнение массива временных отсчетов */
/* на одном периоде повторения сигнала */
linspace(-T/2.0, T/2.0, N, DSPL_PERIODIC, t1);
/* заполнение массива временных отсчетов
* на 4-x периодах повторения сигнала
* для отображения на осциллограмме */
linspace(-T*2.0, T*2.0, N, DSPL_PERIODIC, t4);
/* Построение графиков пакетом GNUPLOT */
gnuplot_create(argc, argv, 800, 640, "img/fourier_series_rec.png", &hplot);
gnuplot_cmd(hplot, "unset key");
gnuplot_cmd(hplot, "set multiplot layout 3,2 rowsfirst");
gnuplot_cmd(hplot, "set yrange [0:2.2]");
for(q = 0; q < 3; q++)
{
tau = T/Q[q];
/* 4 периода повторения п-импульса скважности Q[q] */
signal_pimp(t4, N, A, tau, 0.0, T, s);
/* сохранение в текстовый файл временных осциллограмм */
sprintf(fname, "dat/pimp_time_%.2lf.csv", Q[q]);
writetxt(t4, s, N, fname);
/* Построение временнОй осциллограммы */
sprintf(plotcmd, "plot '%s' with lines", fname);
gnuplot_cmd(hplot, plotcmd);
/* один период повторения п-импульса скважности Q[q] */
signal_pimp(t1, N, A, tau, 0.0, T, s);
/* разложение в ряд Фурье */
fourier_series_dec(t1, s, N, T, M, w, S);
/* Рассчет амплитудного спектра */
for(m = 0; m < M; m++)
{
/*printf("S[%d] = %f %f\n", m, RE(S[m]), IM(S[m]));*/
Smag[m] = ABS(S[m]);
}
/* Сохранение в файл амплитудного спетра для скважности Q[q] */
sprintf(fname, "dat/pimp_freq_discrete_%.2lf.csv", Q[q]);
writetxt(w, Smag, M, fname);
/* Построение на график амплитудного спектра для заданной скважности */
sprintf(plotcmd, "plot '%s' with impulses lt 1 ,\\", fname);
printf("%s\n", plotcmd);
gnuplot_cmd(hplot, plotcmd);
sprintf(plotcmd, "'%s' with points pt 7 ps 0.5 lt 1 ,\\", fname);
printf("%s\n", plotcmd);
gnuplot_cmd(hplot, plotcmd);
/* Расчет огибающей */
for(n = 0; n < N; n++)
Sc[n] = (wc[n] == 0.0) ? A/Q[q] : fabs( A * sin(0.5*wc[n]*tau) / (0.5*wc[n] * T));
/* сохранение огибающей в файл для скважности Q[q] */
sprintf(fname, "dat/pimp_freq_cont_%.2lf.csv", Q[q]);
writetxt(wc, Sc, N, fname);
/* Построение на график непрерывной огибающей
амплитудного спектра для заданной скважности */
sprintf(plotcmd, "'%s' with lines", fname);
printf("%s\n", plotcmd);
gnuplot_cmd(hplot, plotcmd);
}
gnuplot_cmd(hplot, "unset multiplot");
gnuplot_close(hplot);
/* remember to free the resource */
dspl_free(hdspl);
return 0;
}
Спектр периодической последовательности прямоугольных импульсов
![]() DSPL-2.0 — свободная библиотека алгоритмов цифровой обработки сигналов Распространяется под лицензией LGPL v3
Страница проекта на SourceForge
|

1768–1830


В данном разделе мы рассмотрим спектр периодической последовательности прямоугольных импульсов, как одного из важнейших сигналов, используемого в практических приложениях.
Пусть входной сигнал представляет собой периодическую последовательность
прямоугольных импульсов амплитуды
, длительности
секунд следующих с
периодом
секунд, как это показано на рисунке 1

Единица измерения амплитуды сигнала зависит от
физического процесса, который описывает сигнал
.
Это может быть напряжение, или, сила тока,
или любая другая физическая величина со своей единицей измерения,
которая меняется во времени как
.
При этом, единицы измерения амплитуд спектра
,
,
будут совпадать с единицами
измерения амплитуды
исходного сигнала.
Тогда спектр ,
,
данного сигнала может быть представлен как:


Рассмотрим некоторые свойства огибающей спектра периодической последовательности прямоугольных импульсов.

1661–1704




Таким образом, значение огибающей на нулевой частоте равно амплитуде импульса деленной на скважность. При увеличении скважности (т.е. при уменьшении длительности импульса при фиксированном периоде повторения) значение огибающей на нулевой частоте уменьшается.
Используя скважность импульсов выражение (1) можно переписать в виде:


Нули огибающей спектра последовательности прямоугольных импульсов можно получить из уравнения:









1707–1783




Из рисунка 2 можно заметить, что фазовый спектр принимает значения
когда огибающая
имеет отрицательные значения.
Заметим, что
и
соответствуют одной и
той же точке комплексной плоскости равной
.
Пусть входной сигнал представляет собой периодическую последовательность
прямоугольных импульсов амплитуды
, следующих с периодом
секунды
и различной скважностью
.
На рисунке 3а показаны временные осциллограммы указанных сигналов,
их амплитудные спектры
(рисунок 3б),
а также непрерывные огибающие
спектров (пунктирная линия).

а — временные осциллограммы; б — амплитудный спектр
Как можно видеть из рисунка 3, при увеличении скважности сигнала, длительность импульсов уменьшается,
огибающая спектра
расширяется и уменьшается по амплитуде (пунктирная линия).
В результате, в пределах главного лепестка увеличивается количество гармоник спектра
.
Выше мы подробно изучили спектр периодической последовательности прямоугольных
импульсов для случая, когда исходный сигнал являлся симметричным относительно
.
В результате спектр такого сигнала
является вещественным и задается выражением (1).
Теперь мы рассмотрим, что произойдет со спектром сигнала
если мы сместим сигнал
во времени,как это показано на рисунке 4 .

Смещенный сигнал можно представить как сигнал
,
задержанный на половину длительности импульса
.
Спектр
смещенного сигнала
можно представить
согласно свойству
циклического временного сдвига
как:





Из рисунка 5 следует, что сдвиг периодического сигнала во времени не изменяет амплитудный спектр сигнала, но добавляет линейную составляющую к фазовому спектру сигнала.
В данном разделе мы получили аналитическое выражение для спектра периодической последовательности прямоугольных импульсов.
Мы рассмотрели свойства огибающей спектра периодической последовательности прямоугольных импульсов и привели примеры спектров при различном значении скважности.
Также был рассмотрен спектр при смещении во времени последовательности прямоугольных импульсов и показано, что смещение во времени изменяет фазовый спектр и не влияет на амплитудный спектр сигнала.
Данные для построения рисунков данного раздела были просчитаны при использовании библиотеки DSPL-2.0
Ниже приведён исходный код программы расчета данных для построения рисунка 3:
Некоторые свойства разложения периодических сигналов в ряд Фурье
Преобразование Фурье непериодических сигналов
Свойства преобразования Фурье