Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Методы обработки данных в научных исследованиях. Учебное пособие
.pdf
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФ
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Физический факультет
С. В. Двойнишников
МЕТОДЫОБРАБОТКИДАННЫХ
ВНАУЧНЫХИССЛЕДОВАНИЯХ
Учебное пособие
Новосибирск
2022

УДК 519.688
ББК 20я73
Д241
Рецензент
канд. техн. наук, доц. К. Ф. Лысаков
Двойнишников, С. В.
Д241 Методы обработки данных в научных исследованиях : учеб.
пособие / С. В. Двойнишников ; Новосиб. гос. ун-т. — Новосибирск, 2022. — 76 с.
Пособие предназначено для студентов, аспирантов физического факультета, изучающих цифровые методы обработки
данных в научных исследованиях и прикладных разработках.
УДК 519.688
ББК 20я73
© Новосибирский государственный
университет, 2022

ВВЕДЕНИЕ
Данное учебно-методическое пособие посвящено основным алгоритмам анализа и обработки данных, с которыми чаще всего приходится иметь дело при решении практических задач в области обработки данных в научно-исследовательской работе. Все описанные
алгоритмы рассмотрены с точки зрения их практического применения для того, чтобы читатель лучше понимал физический смысл
и границы эффективного использования тех или иных подходов
в методах обработки данных в научных исследованиях.
Пособие включает 8 разделов: первый посвящен преобразованию Фурье, второй — операции свертки функций, третий — кросскорреляции дискретных сигналов, четвертый — цифровым фильтрам, пятый раздел содержит описание методов передискретизации
цифровых сигналов, шестой раздел включает амплитудную модуляцию и демодуляцию, седьмой раздел знакомит с частотновременным анализом цифровых сигналов, восьмой раздел посвящен
описанию вэйвлет-преобразования цифровых сигналов.
3

1. ПРЕОБРАЗОВАНИЕ ФУРЬЕ
F
Преобразование Фурье — операция, сопоставляющая одной
функции вещественной переменной другую функцию вещественной
переменной. Эта новая функция описывает коэффициенты («амплитуды») при разложении исходной функции на элементарные составляющие — гармонические колебания с разными частотами.
Преобразование Фурье функции вещественной переменной является интегральным и задается следующей формулой:
() () .
1
wfxedx
2
ixw
Преобразование Фурье используется во многих областях науки:
физике, комбинаторике, обработке сигналов и изображений, теории
вероятностей, статистике, криптографии, акустике, оптике и многих
других. В цифровой обработке сигналов преобразование Фурье рассматривают как декомпозицию сигнала на частоты и амплитуды,
т. е. как обратимый переход от временного пространства в частотное. Преобразование Фурье обладает полезными с точки зрения
практического применения свойствами:
– представляет собой линейный оператор;
– является обратимым;
– превращает вычислительно сложную операцию свертки в простое умножение. Таким образом, обеспечивается эффективный способ вычисления операций, основанных на свертке.
В цифровой обработке сигналов и изображений исходные данные представляются в виде конечных дискретных последовательностей. Для обработки таких сигналов применяют дискретное преобразование Фурье.
1.1. Дискретное преобразование Фурье
Дискретное преобразование Фурье (ДПФ) — разновидность преобразований Фурье, широко применяемых в алгоритмах цифровой
обработки сигналов, а также в других областях, связанных с анализом частот в дискретном сигнале. ДПФ требует в качестве входа
дискретную функцию. Такие функции часто создаются путем дискретизации (выборки значений из непрерывных функций). ДПФ
4

помогают решать дифференциальные уравнения в частных произ-
X
водных и выполнять такие операции, как свертки. ДПФ также активно используются в статистике, при анализе временных рядов.
Прямое ДПФ определяют выражением:
2
i
1
N
XxekN
kn
0
n
kn
N
,0..1.
Обратное ДПФ:
2
i
1
N
1
xXenN
kk
N
0
k
kn
N
,0..1.
Основные свойства ДПФ:
линейность —
1)
2)
сдвиг по времени —
3)
периодичность —
() () () ();ax n by n aX k bY k
() () ;
xn m Xke
()(),.
krN Xk rZ
2
i
km
N
Очевидно, что вычисления существенно упростятся в случае,
если входные данные будут содержать только вещественные значения.
Пример реализации ДПФ на языке Си для вещественных входных данных:
voidfft(float*Ri,intN,float*Ro,float*Io)
{
constfloatPI=3.14159265;
for(intii=0;ii<N;ii++)
{
Ro[ii]=0.0f;
Io[ii]=0.0f;
for(intind=0;ind<N;ind++)
5

{
Ro[ii]+=Ri[ind]*cos(‐2*PI*ii*ind/N);
Io[ii]+=Ri[ind]*sin(‐2*PI*ii*ind/N);
}
}
}
Для случая, когда мнимая часть входных данных не равна 0, программа может выглядеть следующим образом:
voidfft(float*Ri,float*Ii,intN,
float*Ro,float*Io)
{
constfloatPI=3.14159265;
for(intii=0;ii<N;ii++)
{
Ro[ii]=0.0f;
Io[ii]=0.0f;
for(intind=0;ind<N;ind++)
{
Ro[ii]+=Ri[ind]*cos(‐2*PI*ii*ind/N);
Io[ii]+=Ri[ind]*sin(‐2*PI*ii*ind/N);
Io[ii]+=Ii[ind]*cos(‐2*PI*ii*ind/N);
}
}
}
Ro[ii]‐=Ii[ind]*sin(‐2*PI*ii*ind/N);
Реализация обратного ДПФ выглядит аналогично:
voidifft(float*Ri,float*Ii,intN,
float*Ro,float*Io)
{
constfloatPI=3.14159265;
for(intii=0;ii<N;ii++)
{
Ro[ii]=0.0f;
Io[ii]=0.0f;
for(intind=0;ind<N;ind++)
6

{
x
X
Ro[ii]+=Ri[ind]*cos(2*PI*ii*ind/N);
Ro[ii]‐=Ii[ind]*sin(2*PI*ii*ind/N);
Io[ii]+=Ri[ind]*sin(2*PI*ii*ind/N);
Io[ii]+=Ii[ind]*cos(2*PI*ii*ind/N);
}
Ro[ii]/=N;
Io[ii]/=N;
}
}
Поскольку приведенная реализация — прямое вычисление согласно формуле, очевидно, что вычислительная сложность приведенной программы является О(N²). Существует алгоритм быстрого
преобразования Фурье, который обеспечивает тот же результат, но
его вычислительная сложность O(Nlog(N)).
1.2. Быстрое преобразование Фурье
Быстрое преобразование Фурье (БПФ) — алгоритм быстрого
вычисления ДПФ. Наиболее распространенным алгоритмом БПФ
является алгоритм Кули — Тьюки, при котором ДПФ от
N = N1 + N2 выражается как сумма более малых размерностей N1
и N2.
ДПФ для вектора
, состоящего из N элементов, имеет вид:
ˆ
.
Ax
Элементы матрицы
ˆ
A —
ae
mn
N
2.i
N
mn
Рассмотрим алгоритм вычисления БПФ для размерности исходных данных равных степени 2. ДПФ можно выразить как сумму
четных и нечетных индексов:
1/21 /21
NN N
Xxa xa xa
mnN nN nN
mn nm n m
00 0
nn n
2(21)
221
.
7

Тогда
X
X
E
X
X
2
nm nm
22
2
nm nm
ae e a
NN
ii
NN
(2 1)
nm nm
aea
NN
2
/2
m
i
N
.
/2
Откуда получаем
NN
/2 1 /2 1
Xxae xa
mnN nN
nn
nm nm
2/2 21/2
00
2
m
i
n
Далее, используя свойство периодичности ДПФ
(/2)
mN n nm
aa
/2 /2
NN
и равенство
NNN
eeee
i
/2 2 2
mN im im
2
i
можно получить
2,i
m
Ee O
mm m
mN m m
/2
N
2
i
m
Ee O
N
,
/2
.
,
,
где
— четный индекс ДПФ,
m
Так как
N является степенью 2, то указанное разделение можно
O — нечетный.
m
продолжать рекурсивно до тех пор, пока не дойдем до двухточечного случая:
,
xx
001
.
xx
101
В результате при рекурсивном вычислении за счет повторного
использования промежуточных данных удается достичь сложности
O(Nlog(N)).
Пример программы на С, выполняющей рекурсивный алгоритм
БПФ, представлен ниже.
8

voidFFT(float*Ri,float*Ii,intN,intstart,
intskip,float*Ro,float*Io)
{
constfloatPI=3.14159265;
if(N==1)
{
Ro[0]=Ri[start];
Io[0]=Ii[start];
return;
}
FFT(Ri,Ii,N/2,start,skip*2,R0,Io);
FFT(Ri,Ii,N/2,start+skip,skip*2,R0+N/2,Io+N/2);
for(intj=0;j<length/2;j++)
{
floatrt=Ro[j+N/2]*cos(2*PI*j/N)‐
Io[j+N/2]*sin(2*PI*j/N);
floatit=
Ro[j+N/2]*sin(2*PI*j/N)+Io[j+N/2]*cos(2*PI*j/N);
Ro[j+N/2]=Ro[j]‐rt;
Io[j+N/2]=Io[j]‐it;
Ro[j]=Ro[j]+rt;
Io[j]=Io[j]+it;
}
}
Ниже показана реализация БПФ, которая не использует дополнительный массив для результатов вычисления и рекурсивные вызовы.
voidFFT(float*Rd,float*Id,intN)
{
inti,j,n,k,io,ie,in,nn;
floatru,iu,rtp,itp,rtq,itq,rw,iw,sr;
floatPI=3.14159265;
nn=N/2;
9

ie=N;
intlogN=(int)(log(N)/log(2));
for(n=1;n<=logN;n++)
{
rw=cos(2*PI/ie);
iw=‐sin(2*PI/ie);
in=ie/2;
ru=1.0f;
iu=0.0f;
for(j=0;j<in;j++)
{
for(i=j;i<N;i+=ie)
{
io=i+in;
rtp=Rd[i]+Rd[io];
itp=Id[i]+
rtq=Rd[i]‐Rd[io];
itq=Id[i]‐Id[io];
Rd[io]=rtq*ru‐itq*iu;
Id[io]=itq*ru+rtq*iu;
Rd[i]=rtp;
Id[i]=itp;
}
sr=ru;
ru=ru*rw‐iu*iw;
iu=iu*rw+
}
ie/=2;
}
}
Представленные реализации функции БПФ имеют разные вход-
ные параметры, в зависимости от внутренней реализации.
Id[io];
sr*iw;
10
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
