Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы обработки данных в научных исследованиях. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФ
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Физический факультет
С. В. Двойнишников
МЕТОДЫОБРАБОТКИДАННЫХ
ВНАУЧНЫХИССЛЕДОВАНИЯХ
Учебное пособие
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]