Вектор амплитуды. Графическое изображение гармонических колебаний

Сложение нескольких колебаний одинакового направления (или, что то же самое, сложение нескольких гармонических функций) значительно облегчается и становится наглядным, если изображать колебания графически в виде векторов на плоскости.

Возьмем ось, которую обозначим “x”. Из точки О, взятой на оси, под углом a, равным начальной фазе колебаний, отложим вектор длины A (рис. 8.3). Спроектируем вектор A на ось x, получим x 0 =Acos a – начальное смещение колеблющейся точки от положения равновесия. Приведем этот вектор во вращение против часовой стрелки с угловой скоростью w 0 . Положение этого вектора в любые моменты времени будет характеризоваться углами, равными:

w 0 t 1 +a; w 0 t 2 +a; w 0 t 3 +a; и т.д.

А проекция этого вектора будет перемещаться по оси «x» в пределах от –А до +А. Причем координата этой проекции будет изменяться со временем по закону:

.

Следовательно, проекция конца вектора на некоторую произвольную ось будет совершать гармоническое колебание с амплитудой равной длине вектора, круговой частотой равной угловой скорости вращения вектора и начальной фазой равной углу, образованному вектором с осью в начальный момент времени.

Итак, гармоническое колебание может быть задано с помощью вектора, длина которого равна амплитуде колебания, а направление вектора образует с осью “x” угол равный начальной фазе колебания.

Рассмотрим сложение двух гармонических колебаний одинакового направления и одинаковой частоты. Смещение колеблющегося тела “x” будет суммой смещений x 1 и x 2 , которые запишутся следующим образом:

Представим оба колебания с помощью векторов и (рис. 8.4) По правилам сложения векторов строим результирующий вектор . Проекция этого вектора на ось X будет равна сумме проекций слагаемых векторов: x=x 1 +x 2 . Следовательно, вектор представляет собой результирующее колебание. Этот вектор вращается с той угловой скоростью w 0 , что и векторы и , так что результирующее движение будет гармоническим колебанием с с частотой w 0 , амплитудой «а» и начальной фазой a. Из построения следует, что

Итак, представление гармонических колебаний посредством векторов дает возможность свести сложение нескольких колебаний к операции сложения векторов. Этот способ отличается большей простотой и наглядностью, чем использование тригонометрических преобразований.

Проанализируем выражение для амплитуды. Если разность фаз обоих колебаний a 2 - a 1 = 0, то амплитуда результирующего колебания равна сумме (а 2 + а 1). Если разность фаз a 2 - a 1 = +p или -p, т.е. колебания находятся в противофазе, то амплитуда результирующего колебания равна .

Если частоты колебаний x 1 и x 2 неодинаковы, векторы и будут вращаться с различной скоростью. В этом случае результирующий вектор пульсирует по величине и вращается с непостоянной скоростью, Следовательно, результирующим движением будет в этом случае не просто гармоническое колебании, а некоторый сложный колебательный процесс.


Гармонические колебания

Т.е. фактически график синуса получается из вращения вектора, который описывается формулой:

F(x) = A sin (ωt + φ),

Где A - длина вектора (амплитуда колебаний), φ - начальный угол (фаза) вектора в нулевой момент времени, ω - угловая скорость вращения, которая равна:

ω=2 πf, где f - частота в Герцах.

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

Магия начинается тогда, когда оказывается, что представление абсолютно любого сигнала можно представить в виде суммы (зачастую бесконечной) различных синусоид. Иначе говоря, в виде ряда Фурье.
Я приведу пример из английской википедии . Для примера возьмём пилообразный сигнал.


Пилообразный сигнал

Его сумма будет представлена следующей формулой:

Если мы будем по очерёдно суммировать, брать сначала n=1, затем n=2 и т.д., то увидим, как у нас гармонический синусоидальный сигнал постепенно превращается в пилу:

Наверное красивее всего это иллюстрирует одна программа, найденная мной на просторах сети. Выше уже говорилось, что график синуса является проекцией вращающегося вектора, а как же быть в случае более сложных сигналов? Это, как ни странно, проекция множества вращающихся векторов, а точнее их суммы, и выглядит это всё так:


Вектора рисуют пилу.

Вообще рекомендую сходить самим по ссылке и попробовать самим поиграться с параметрами, и посмотреть как меняется сигнал. ИМХО более наглядной игрушки для понимания я ещё не встречал.

Ещё следует заметить, что есть обратная процедура, позволяющая получить из данного сигнала частоту, амплитуду и начальную фазу (угол), которое называется Преобразование Фурье.


Разложение в ряд Фурье некоторых известных периодических функций (отсюда)

Я детально на нём останавливаться не буду, но покажу, как это можно применить по жизни. В списке литературы порекомендую то, где можно почитать подробнее о матчасти.

Переходим к практическим упражнениям!

Мне кажется, что каждый студент задаётся вопросом, сидя на лекции, например по матану: зачем мне весь этот бред? И как правило, не найдя ответа в обозримом будущем, к сожалению, теряет интерес к предмету. Поэтому я сразу покажу практическое применение данных знаний, а вы эти знания уже будете осваивать сами:).

Всё дальнейшее я буду реализовывать на сях. Делал всё, конечно, под Linux, но никакой специфики не использовал, по идее программа будет компилироваться и работать под другими платформами.

Для начала напишем программу для формирования звукового файла. Был взят wav-файл, как самый простой. Прочитать про его структуру можно .
Если кратко, то структура wav-файла описывается так: заголовок, который описывает формат файла, и далее идёт (в нашем случае) массив 16-ти битных данных (остроконечник) длиной: частота_дискретизации*t секунд или 44100*t штук.

Для формирования звукового файла был взят пример . Я его немного модифицировал, исправил ошибки, и окончательная версия с моими правками теперь лежит на гитхабе тут

Сгенерируем двухсекундный звуковой файл с чистым синусом частотой 100 Гц. Для этого модифицируем программу таким образом:

#define S_RATE (44100) //частота дискретизации #define BUF_SIZE (S_RATE*10) /* 2 second buffer */ …. int main(int argc, char * argv) { ... float amplitude = 32000; //берём максимальную возможную амплитуду float freq_Hz = 100; //частота сигнала /* fill buffer with a sine wave */ for (i=0; i

Обращаю внимание, что формула чистого синуса соответствует той, о которой мы говорили выше. Амплитуда 32000 (можно было взять 32767) соответствует значению, которое может принимать 16-ти битное число (от минус 32767 до плюс 32767).

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


Чистый ламповый синус

Поглядим спектр этого синуса (Анализ->Построить график спектра)


График спектра

Виден чистый пик на 100 Гц (логарифмический масштаб). Что такое спектр? Это амплитудно-частотная характеристика. Существует ещё фазочастотная характеристика. Если помните, выше я говорил, что для построения сигнала надо знать его частоту, амплитуду и фазу? Так вот, можно из сигнала получить эти параметры. В данном случае у нас график соответствий частот амплитуде, при чём амплитуда у нас не в реальных единицах, а в Децибелах.

Я понимаю, что чтобы объяснить, как работает программа, надо объяснить, что такое быстрое преобразование Фурье, а это как минимум ещё на одну некислую статью.

Для начала алокируем массивы:

C = calloc(size_array*2, sizeof(float)); // массив поворотных множителей in = calloc(size_array*2, sizeof(float)); //входный массив out = calloc(size_array*2, sizeof(float)); //выходной массив

Скажу лишь, что в программе мы читаем данные в массив длиной size_array (которое берём из заголовка wav-файла).

While(fread(&value,sizeof(value),1,wav)) { in[j]=(float)value; j+=2; if (j > 2*size_array) break; }

Массив для быстрого преобразования Фурье должен представлять собой последовательность {re, im, re, im,… re, im}, где fft_size=1<< p - число точек БПФ. Объясняю нормальным языком:
это массив комплексных чисел. Я даже боюсь представить, где используется комплексное преобразование Фурье, но в нашем случае мнимая часть у нас равна нулю, а действительная равна значению каждой точке масива.
Ещё одна особенность именно быстрого преобразования Фурье, что оно обсчитывает массивы, кратные только степени двойки. В результате мы должны вычислить минимальную степень двойки:

Int p2=(int)(log2(header.bytes_in_data/header.bytes_by_capture));

Логарифм от количество байт в данных, делённых на количество байт в одной точке.

После этого считаем поворотные множители:

Fft_make(p2,c);// функция расчёта поворотных множителей для БПФ (первый параметр степень двойки, второй алокированный массив поворотных множителей).

И скармливаем наш считанный массив в преобразователь Фурье:

Fft_calc(p2, c, in, out, 1); //(единица означает, что мы получаем нормализованный массив).

На выходе мы получаем комплексные числа вида {re, im, re, im,… re, im}. Для тех, кто не знает, что такое комплексное число, поясню. Я не зря начал эту статью с кучи вращающихся векторов и кучи гифок. Так вот, вектор на комплесной плоскости определяется действительной координатой a1 и мнимой координатой a2. Или длиной (это у нас амплитуда Am) и углом Пси (фаза).


Вектор на комплексной плоскости

Обратите внимание, что size_array=2^p2. Первая точка массива соответствует частоте 0 Гц (постоянная), последняя точка соответствует частоте дискретизации, а именно 44100 Гц. В результате мы должны рассчитать частоту, соответствующей каждой точке, которые будут отличаться на частоту дельта:

Double delta=((float)header.frequency)/(float)size_array; //частота дискретизации на размер массива.

Алокируем массив амплитуд:

Double * ampl; ampl = calloc(size_array*2, sizeof(double));

И смотрим на картинку: амплитуда - это длина вектора. А у нас есть его проекции на действительную и мнимую ось. В результате у нас будет прямоугольный треугольник, и тут мы вспоминаем теорему Пифагора, и считаем длину каждого вектора, и сразу пишем её в текстовый файл:

For(i=0;i<(size_array);i+=2) { fprintf(logfile,"%.6f %f\n",cur_freq, (sqrt(out[i]*out[i]+out*out))); cur_freq+=delta; }
В результате получаем файл примерно такого вида:

… 11.439514 10.943008 11.607742 56.649738 11.775970 15.652428 11.944199 21.872342 12.112427 30.635371 12.280655 30.329171 12.448883 11.932371 12.617111 20.777617 ...

Пробуем!

Теперь скармливаем получившейся программе тот звуковой файл синуса

./fft_an ../generate_wav/sin\ 100\ Hz.wav format: 16 bits, PCM uncompressed, channel 1, freq 44100, 88200 bytes per sec, 2 bytes by capture, 2 bits per sample, 882000 bytes in data chunk=441000 log2=18 size array=262144 wav format Max Freq = 99.928 , amp =7216.136

И получаем текстовый файл АЧХ. Строим его график с помощью гнуплота

Скрипт для построения:

#! /usr/bin/gnuplot -persist set terminal postscript eps enhanced color solid set output "result.ps" #set terminal png size 800, 600 #set output "result.png" set grid xtics ytics set log xy set xlabel "Freq, Hz" set ylabel "Amp, dB" set xrange #set yrange plot "test.txt" using 1:2 title "AFC" with lines linestyle 1

Обратите внимание на ограничение в скрипте на количество точек по X: set xrange . Частота дискретизации у нас 44100, а если вспомнить теорему Котельникова, то частота сигнала не может быть выше половины частоты дискретизации, следовательно сигнал выше 22050 Гц нас не интересует. Почему так, советую прочитать в специальной литературе.
Итак (барабанная дробь), запускаем скрипт и лицезреем:


Спектр нашего сигнала

Обратите внимание на резкий пик на частоте 100 Гц. Не забывайте, что по осям - логарифмический масштаб! Шерсть справа, как я думаю, ошибки преобразования Фурье (тут на память приходят окна).

А давайте побалуем?

А давайте! Давайте поглядим спектры других сигналов!

Вокруг шум…
Для начала построим спектр шума. Тема про шумы, случайные сигналы и т.п. достойна отдельного курса. Но мы её коснёмся слегка. Модифицируем нашу программу генерации wav-файла, добавим одну процедуру:

Double d_random(double min, double max) { return min + (max - min) / RAND_MAX * rand(); }

Она будет генерировать случайное число в заданном диапазоне. В результате main будет выглядеть так:

Int main(int argc, char * argv) { int i; float amplitude = 32000; srand((unsigned int)time(0)); //инициализируем генератор случайных чисел for (i=0; i

Сгенерируем файл , (рекомендую к прослушиванию). Поглядим его в audacity.


Сигнал в audacity

Поглядим спектр в программе audacity.


Спектр

И поглядим спектр с помощью нашей программы:


Наш спектр

Хочу обратить внимание на очень интересный факт и особенность шума - он содержит в себе спектры всех гармоник. Как видно из графика, спектр вполне себе ровный. Как правило, белый шум используется для частотного анализа пропускной способности, например, аудиоаппаратуры. Существуют и другие виды шумов: розовый, синий и другие . Домашнее задание - узнать, чем они отличаются.

А компот?

А теперь давайте посмотрим другой интереснейший сигнал - меандр. Я там выше приводил табличку разложений различных сигналов в ряды Фурье, вы поглядите как раскладывается меандр, выпишите на бумажку, и мы продолжим.

Для генерации меандра с частотой 25 Гц мы модифицируем в очередной раз наш генератор wav-файла:

Int main(int argc, char * argv) { int i; short int meandr_value=32767; /* fill buffer with a sine wave */ for (i=0; i

В результате получим звуковой файл (опять же, советую послушать), который сразу надо посмотреть в audacity


Его величество - меандр или меандр здорового человека

Не будем томиться и поглядим его спектр:


Спектр меандра

Пока не очень что-то понятно, что такое… А давайте поглядим несколько первых гармоник:


Первые гармоники

Совсем другое дело! Ну-ка поглядим табличку. Смотрите-ка, у нас есть только 1, 3, 5 и т.д., т.е. нечётные гармоники. Мы так и видим, что у нас первая гармоника 25 Гц, следующая (третья) 75 Гц, затем 125 Гц и т.д., при этом у нас амплитуда постепенно уменьшается. Теория сошлась с практикой!
А теперь внимание! В реальной жизни сигнал меандра у нас имеет бесконечную сумму гармоник всё более и более высокой частоты, но как правило, реальные электрические цепи не могут пропускать частоты выше какой-то частоты (в силу индуктивности и ёмкости дорожек). В результате на экране осциллографа можно часто увидеть вот такой сигнал:


Меандр курильщика

Эта картинка прям как картинка из википедии , где для примера меандра берутся не все частоты, а только первые несколько.


Сумма первых гармоник, и как меняется сигнал

Меандр так же активно используется в радиотехнике (надо сказать, что - это основа всей цифровой техники), и стоит понимать что при длинных цепях его может отфильтровать так, что, родная мама не узнает. Его так же используют для проверки АЧХ различных приборов. Ещё интересный факт, что глушилки телевизоров работали именно по принципу высших гармоник, когда сама микросхема генерировала меандр десятки МГц, а его высшие гармоники могли иметь частоты сотни МГц, как раз на частоте работы телевизора, и высшие гармоники успешно глушили сигнал вещания телевизора.

Вообще тема подобных экспериментов бесконечная, и вы можете теперь сами её продолжить.


Книга

Для тех, кто нифига не понял, что мы тут делаем, или наоборот, для тех, кто понял, но хочет разобраться ещё лучше, а так же для студентам, изучающим ЦОС, крайне рекомендую эту книгу. Это ЦОС для чайников, которым является автор данного поста. Там доступным даже для ребёнка языком рассказываются сложнейшие понятия.

Заключение

В заключении хочу сказать, что математика - царица наук, но без реального применения многие люди теряют к ней интерес. Надеюсь, данный пост подстегнёт вас к изучению такого замечательного предмета, как обработка сигналов, и вообще аналоговой схемотехнике (затыкайте уши, чтобы не вытекали мозги!). :)
Удачи!

Теги:

Добавить метки

Гармоническое колебание x = a Cos (wt + a) геометрически может быть представлено проекцией на произвольное направление x вектора , вращающегося вокруг неподвижной оси с угловой скоростью w. Длина этого вектора равна амплитуде колебания, а его первоначальное направление образует с осью x угол, равный начальной фазе колебания - a. Используя это геометрическое толкование, решим задачу о сложении двух гармонических колебаний одинаковой частоты и направления.

x = x 1 + x 2 = a 1 Cos (wt + a 1) + a 2 Cos (wt + a 2).

Построим вектор (под углом a 1 к оси x ), изображающий первое колебание. Прибавим к нему векторно вектор , образующий угол a 2 с осью x (рис. 12.8). Сумма проекций этих векторов на ось x равна проекции на эту ось вектора , равного сумме и .

x = x 1 + x 2 .

Рис. 12.8

Приведем эту векторную диаграмму во вращение с угловой скоростью w вокруг оси, проходящей через начало координат - точку О. При этом равенство x = x 1 + x 2 сохранится неизменным во времени, хотя сами проекции x , x 1 и x 2 будут теперь пульсировать по гармоническому закону с одинаковой частотой w и с начальными фазами a, a 1 и a 2 - соответственно. В результате сложения двух колебаний:

x 1 = a 1 Cos (wt + a 1) и x 2 = a 2 Cos (wt + a 2) возникает новое колебание x = x 1 + x 2 =

= a Cos (wt + a), частота которого - w – совпадает с частотой складываемых колебаний. Его амплитуда равна модулю вектора , а начальная фаза a, как следует из рис. 12.8, равна:

.

Для подсчета амплитуды «а » суммарного колебания, воспользуемся теоремой косинусов:

Величина амплитуды результирующего колебания зависит не только от амплитуд складываемых колебаний а 1 и а 2 , но и от разности их начальных фаз. Колебание с максимальной амплитудой, а = a max = a 1 + a 2 возникает при сложении синфазных колебаний, то есть когда их начальные фазы совпадают: a 1 = a 2 .

Если разность фаз (a 2 – a 1) = p, то амплитуда суммарного колебания будет минимальной a = a min = |a 1 – a 2 |. Если амплитуды таких колебаний, происходящих в противофазе, равны (a 1 = a 2), то амплитуда суммарного колебания окажется равной нулю.

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

Лекция 13 «Механические колебания»

План лекции

1. Энергия гармонического осциллятора.

2. Собственные затухающие колебания.

3. Вынужденные колебания. Резонанс. Амплитуда и фаза вынужденных колебаний.

Решение ряда вопросов, в частности сложение нескольких колебаний одинакового направления (или, что то же самое, сложение нескольких гармонических функций), значительно облегчается и становится наглядным, если изображать колебания графически в виде векторов на плоскости. Полученная таким способом схема называется векторной диаграммой.

Возьмем ось, которую обозначим буквой х (рис. 55.1). Из точки О, взятой на оси, отложим вектор длины а, образующий с осью угол а.

Если привести этот вектор во вращение с угловой скоростью , то проекция конца вектора будет перемещаться по оси х в пределах от -а до +а, причем координата этой проекции будет изменяться со временем по закону

Следовательно, проекция конца вектора на ось будет совершать гармоническое колебание с амплитудой, равной длине вектора, с круговой частотой, равной угловой скорости вращения вектора, и с начальной фазой, равной углу, образуемому вектором с осью в начальный момент времени.

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

Рассмотрим сложение двух гармонических колебаний одинакового направления и одинаковой частоты. Смещение х колеблющегося тела будет суммой смещений , которые запишутся следующим образом:

Представим оба колебания с помощью векторов (рис. 55.2). Построим по правилам сложения векторов результирующий вектор а.

Легко видеть, что проекция этого вектора на ось х равна сумме проекций слагаемых векторов:

Следовательно, вектор а представляет собой результирующее колебание. Этот вектор вращается с той же угловой скоростью как и векторы так что результирующее движение будет гармоническим колебанием с частотой амплитудой а и начальной фазой а. Из построения видно, что

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

Формулы (55.2) и (55.3) можно, конечно, получить, сложив выражения (55.1) и произведя соответствующие тригонометрические преобразования. Но примененный нами способ получения этих формул отличается большей простотой и наглядностью.

Проанализируем выражение (55.2) для амплитуда. Если разность фаз обоих колебаний равна нулю, амплитуда результирующего колебания равна сумме а и . Если разность фаз равна или , т. е. оба колебания находятся в противофазе, то амплитуда результирующего колебания равна

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



Понравилась статья? Поделитесь с друзьями!