close

Вход

Забыли?

вход по аккаунту

?

FreeBASIC11

код для вставкиСкачать
Пособие для начинающих программировать на языке высокого уровня FreeBASIC. Работа состоит из нескольких глав. В главе 11 "Обработка цифровых данных" – продолжение пособия, которое будет интересно для учащихся школ, студентов институтов, а также пре
 1
Евгений Рыжов, инженер
Программирование на языке FreeBASIC
пособие для начинающих
Фрагмент 11. Обработка цифровых данных
Пособие для начинающих программировать на языке высокого уровня FreeBASIC.
Работа состоит из нескольких глав. В главе 11 "Обра
ботка цифровых данных" –
продолжение пособия, которое будет интересно для учащихся школ, студентов
институтов, а также преподавателей.
От лица математиков и поэтов
Познание -
копилка для ума,
От жизни мы, естественно, в экстазе.
Наука помогает понимать
Вещей причинно
-
следственные связи.
2
Из недостатков презираем лесть,
Победы не имеем часто скорой.
Когда в задумках роешься, то весь
Становишься конической рессорой.
Как трудно мир твореньем удивить!
И если получается, то рады.
Любое вдохновенье -
от любви;
Её вкушая, пишем серенады.
Георгий Александров,
14 марта 2005 года
Результаты опроса ВЦИОМ показали, что интерес жителей России к научно
-
техническим открытиям за последние шесть лет значительно снизился:
с 68% в 2007 до 47% в 2013. За эти годы возрос
ло количество безразличных к новым достижениям в науке и технике: с 28% шесть лет назад до 49%. Научные и технические достижения чаще всего входят в сферу интересов мужчин (54%), активных пользователей Интернета (57%), обеспеченных и высокообразованных (по
53%) россиян. Индифферентными к науке оказались женщины (54%), малообразованные (67%), малообеспеченные (54%) и те, кто не пользуется Интернетом (57%).
Печально, но...
Гравюра Альбрехта Дюрера "Меланхолия" -
символ мудрости и печали...
1.
Почтовый ящик.
На этот раз "почтовый ящик" оказался пустым!
Наверное, читателям все нравится, ведь к 23 февраля количество скачиваний
брошюры "Фрагменты 1. Первые шаги к успеху" уже перевалило за 100!
3
2.
Введение.
На начальном этапе развития нового фундамент
ального научного направления –
"вычислительная математика", начал формироваться один из ее разделов "машинные алгоритмы цифровой обработки данных"
. Основной предметной областью теории Цифровой обработки сигналов (ЦОС) стали цифровая фильтрация и спектральн
ый анализ, причем оба направления рассматривались с единой "частотной" позиции. Базовые положения теории ЦОС закладывались и апробировались фактически на теории дискретных систем и теории цепей с использованием известного к тому времени набора машинных алг
оритмов и, прежде всего, алгоритма быстрого преобразования Фурье (БПФ). Дискретизация непрерывной информации во времени и квантование по уровню являются основой ее эффективного кодирования, преобразования, передачи и архивирования. Особое значение в перехо
де от проблем обработки непрерывной информации к проблемам преобразования ее дискретных значений сыграли работы Владимира Александровича Котельникова (1908 —
2005)
—
советского ученого в области радиофизики, радиотехники, электроники, радиоастрономии и инф
орматики.
Оставаясь верным своему детскому и юношескому увлечению радиотехникой, В.А.Котельников хотел поступить на электротехнический факультет Московского высшего технического училища имени Н.Э.Баумана (МВТУ), но туда принимали только "лиц рабоче
-
крест
ьянского происхождения" после рабфака, а в его документах значилось "из дворян". Пришлось год проучиться в техникуме связи, однако в 1926 году в МВТУ объявили "свободный приём", и он с лёгкостью туда поступил. Одновременно с учёбой в МВТУ он слушал интерес
ующие его курсы на физико
-
математическом факультете Московского государственного университета имени М.В.Ломоносова (МГУ). В 1930 году окончил Московский энергетический институт (МЭИ), который в как раз в год окончания выделился из МВТУ и в него вошёл элект
ротехнический факультет, на котором учился В.А.Котельников.
После окончания МЭИ, Котельников работал инженером в Институте связи Красной Армии, затем перешел в Центральный научно
-
исследовательский институт наркомата связи (одновременно работая в Московско
м энергетическом институте). С 1948 по 1953 Котельников директор и главный конструктор Особого конструкторского бюро МЭИ, с 1954 по 1988 год —
директор Института радиотехники и электроники АН СССР. 17 мая 2000 года Котельникову присуждена Золотая медаль им
ени Александра Грэхема Белла за выдающийся вклад в теорию сигналов. Президент IEEE Брюс Айзенштайн так сказал о Котельникове: "Академик Котельников —
выдающийся герой современности. Его заслуги признаются во всем мире. Перед нами гигант радиоинженерной мыс
ли, который внес самый существенный вклад в развитие радиосвязи". Достаточно вспомнить книгу: Котельников В.А. Теории потенциальной помехоустойчивости. 1956.
4
Обычно на радиоприемники, кроме колебаний от принимаемого радиопередатчика (сигналов), воздейств
уют еще колебания от самых разнообразных источников (помехи). Помехи, накладываясь на полезные сигналы, искажают их, это вызывает при телеграфном приеме ошибки, при телефонном —
шумы, трески и т.д. При слишком слабых по сравнению с помехами сигналах прием становится невозможным. Используются следующие способы борьбы с помехами:
1.
Уменьшение силы помех путем воздействия на их источники.
2.
Увеличение отношения силы сигналов к силе помех путем увеличения мощности передатчиков и применения направленных антенн.
3.
Усов
ершенствование приемников.
4.
Изменение формы сигналов при сохранении их мощности с целью облегчить борьбу с помехами в приемнике.
Развитие первых двух методов не связано с применением "вычислительной математики", но она существенным образом влияет на усовер
шенствование передатчиков и приемников, на используемые виды сигналов снижающих влияние помех при вводе, выводе и хранении аудиоданных. Конечно, в брошюре будут рассмотрены вопросы, связанные с преобразованием Фурье, но до этого, в следующей главе, несколь
ко слов о генераторах псевдослучайных чисел.
5
3.
Случайности не случайны.
Давайте верить, что мы живем в мире порядка.
Давайте не разрушать его своими мыслями о хаосе. И если мы, не дай Бог, действительно поскользнулись и повредили себе что
-
то, задумаем
ся: может быть, вынужденная "пауза" уберегла от каких
-
то более серьезных катаклизмов и мы малым злом избежали большого? Но, с другой уж очень соблазнительно иногда воспользоваться случаем, когда "рационально" ничего не решается. Вот тут и нужны случайные ч
исла –
в простейшем случае "Орел или решка", "Heads or tails", "Kopf oder Zahl"...
Для получения случайных чисел используются различные способы. В общем случае все методы генерирования случайных чисел можно разделить на две группы:
аппаратные методы ген
ерирования случайных чисел;
программные методы генерирования случайных чисел.
3.1.
Генераторы псевдослучайных чисел.
Аппаратные ГСЧ представляют собой технические устройства, преобразующие, например, в цифровую форму какой
-
либо параметр окружающей среды или некоторого физического процесса. Параметр и процесс выбираются таким образом, чтобы обеспечить хорошую "случайность" значений при считывании. Очень часто используются паразитные процессы в электронике (токи утечки, туннельный пробой диодов, цифро
вой шум видеокамеры, шумы на микрофонном входе звуковой карты и т.п.). Формируемая таким образом последовательность чисел, как правило, носит абсолютно случайный характер и не может быть воспроизведена заново по желанию пользователя.
К программным ГСЧ отн
осятся различные алгоритмы генерирования единичных чисел или последовательностей чисел, которые по своим характеристикам напоминают случайные, т.е. похожие на результаты некоторого эксперимента. Для формирования очередного числа последовательности использу
ются различные алгебраические преобразования. Одним из первых программных ГСЧ является программа, использующая метод средин квадратов, предложенная в 1946 Дж. фон Нейманом. Этот ГСЧ формирует следующий элемент последовательности на основе предыдущего путем
возведения его в квадрат и выделения средних цифр полученного числа. С тех пор количество используемых генераторов перевалило за сотню! Их множество обусловлено попытками повысить быстродействие и обеспечить "случайность". Однако, любые программные ГСЧ, н
е использующие внешних "источников энтропии" и формирующие очередное число только алгебраическими преобразованиями, не дают чисто случайных чисел. Последовательность на выходе такого ГСЧ выглядит как 6
случайная, но на самом деле подчиняется некоторому закон
у и, как правило, рано или поздно зацикливается. Лучшее, что может произвести компьютер –
это псевдослучайная последовательность.
Такая последовательность может быть "сжата", в отличие от последовательности "настоящих" случайных чисел, которую нельзя сжать
, так как при попытке построения словаря на таких данных его размер совпадает с размером самих данных –
ведь там нет повторяющихся чисел.
Во фрагменте 2 "Все еще впереди" уже была приведена программа, использующая программный генератор псевдослучайных чис
ел Rnd()
для нахождения значения числа Pi. Не будем изобретать "еще один генератор", а будем пользоваться этим, тем более что его характеристики вполне удовлетворяют требованиям со стороны "инженерных задач". Не вдаваясь в подробности теории статистических
методов, примем его на вооружение, хотя понятно, что качество ГСЧ в значительной мере влияет на результаты программ, его использующих -
применяемые генераторы случайных чисел проходят перед работой предварительное тестирование. Ниже приведена программа дл
я первоначального знакомства с генератором Rnd()
, встроенным в компилятор FreeBASIC.
' P R O G R A M "Random0"
' 10.10.2012
'
-------------------------------------------------------------
' Тестиро
вание генератора псевдослучайных чисел
'
-------------------------------------------------------------
' Random number generator
Dim As Integer I, Imax, J, Jmax, K(10), SK Dim As Single X(512), XR, SX, DS, X1
' Определение длины псевдослучайной последоват
ельности I = 1: X1 = -
1 ' Стартовые значения
Open "CON" For Output As #2
'Open "Random.res" For Output As #2
Print #2,
Do ' Выполнять до повтора
XR = Rnd() ' Получить случайное число
If XR = X1 Then Print #2, " Found Repeated !": Exit Do
If I = 1 Then X1 = XR' Запомнить первое число I = I + 1 ' Следующий номер
Loop
Print #2, " Length of the sequence ="; I
' Генерация псевдослучайной последовательности
Imax = 512
For I = 1 To Imax
X(I) = Rnd()
Next I
' Вычисление выборочного среднего
SX = 0
For I = 1 To Imax
SX = SX + X(I)
Next I
SX = SX/Imax
Print #2, " Sample mean value ="; SX
7
' Вычисление выборочной дисперсии
DS = 0
For I = 1 To Imax
DS = DS + (X(I)
-
SX)*(X(I)
-
SX)
Next I
DS = DS/(Imax
-
1)
Print #2, " Sample variance ="; DS
' Распределение частоты появления по интервалам
' Обнуление интервальных счетчиков
Jmax = 10 ' Количество интервалов
For J = 1 To Jmax ' Перебрать все интервалы
K(J) = 0 ' Сбросить счетчик
Ne
xt J ' Следующий интервал
' Подсчет попаданий в интервалы
For I = 1 To Imax ' J = Int(10*X(I))+1
K(J) = K(J) + 1
Next I
' Контрольное суммирование и вывод данных
SK = 0
Print #2,
Print #2, " Distribution on intervals"
For J = 1 To 10 ' Пере
брать все интервалы
SK = SK + K(J) ' Нарастить счетчик
Print #2, Using " K(##) = #####"; J; K(J)
Next J ' Следующий интервал
Print #2, " Sum = "; SK
Close #2
Sleep
Результаты выполнения программы:
' Found Repeated !
' Length of the sequ
ence = 11220613
' Sample mean value = 0.4910385
' Sample variance = 0.08536277
'
' Distribution on intervals
' K( 1) = 57
' K( 2) = 55
' K( 3) = 53
' K( 4) = 38
' K( 5) = 61
' K( 6) = 54
' K( 7) = 39
' K( 8) = 55
' K( 9) = 46
' K(10) = 54
' Sum = 512
Если усовершенствовать (модернизировать, как принято говорить сегодня) генератор псевдослучайных чисел, как это показано на фрагменте:
8
Imax = 512: RNDX = 0.000001: DS = 0.999999/512
For I = 1 To Imax
X(I) = RNDX
RNDX = RNDX + DS
Next I
то результаты выпо
лнения программы будут просто "великолепны":
' Found Repeated !
' Length of the sequence = 11220613
' Sample mean value = 0.4990237
' Sample variance = 0.08349596
'
' Distribution on intervals
' K( 1) = 52
' K( 2) = 51
' K( 3) = 51
' K( 4) = 51
' K( 5) = 51
' K( 6) = 52
' K( 7) = 51
' K( 8) = 51
' K( 9) = 51
' K(10) = 51
' Sum = 512
и изобретатель "генератора" должен быть поощрен за работу, как это можно наблюдать в реальности! Но есть еще показатель
последовательности –
теснота связи...
3.2.
А теперь добавим время...
Временной ряд
—
это множество наблюдений, генерируемых последовательно во времени. Если время непрерывно, временной ряд называется непрерывным. Если время изменяется дискретно, време
нной ряд дискретен. Далее будем рассматривать только дискретные временные ряды, в которых наблюдения делаются через фиксированный интервал (шаг наблюдения
\
измерения). Если будущие значения временного ряда точно определены какой
-
либо математической зависимо
стью, то временной ряд называют детерминированным. Если будущие значения могут быть охарактеризованы только с помощью распределения вероятностей, временной ряд называют недетерминированным, или просто случайным. Анализируя такой временной ряд, его рассматр
ивают как реализацию некоторого стохастического процесса. Специальный класс стохастических процессов, называемых стационарными процессами, основывается на предположении, что процесс находится в определенном статистическом равновесии. Стохастический процесс
называется строго стационарным, если его свойства не зависят от изменения начала отсчета времени.
В рассмотренной выше программе мы оценили среднее значение стохастического процесса с помощью выборочного среднего временного ряда, а дисперсию стохастическ
ого процесса —
с помощью выборочной дисперсии. Характеристикой взаимосвязи двух случайных величин служит ковариация. В литературе термины "автокорреляция" и "автоковариация" часто используются как 9
синонимы, но строго идентичны они только для процессов с ну
левым средним значением. На практике, имея конечный временной ряд из N наблюдений, можно найти только выборочную оценку автокорреляции. В статистике имеется несколько оценок автокорреляционной функции, их свойства в деталях рассмотрены в специальной литера
туре. Ниже приведена достаточно простая программа, которая будет понятна без лишних комментариев.
Но, видимо уже пора указать книгу, интересную в рамках обсуждаемой темы:
Марпл С.Л. Цифровой спектральный анализ и его приложения. М., 1990, 584 с.
Книга до
ступна в сети и содержит богатейший материал по различным методам одномерного и многомерного спектрального оценивания, приводимый в основном по публикациям в научных журналах. Спектральный анализ —
это один из методов обработки сигналов, который позволяет охарактеризовать частотный состав измеряемого сигнала. Преобразование Фурье является математической основой, которая связывает временной или пространственный сигнал (или же некоторую модель этого сигнала) с его представлением в частотной области. Достоинст
во книги -
наличие в ней машинных программ реализации этих методов, но она, пожалуй, слишком "заумная" для школьников.
Для решения задач связанных с анализом временных рядов (time
-
series analysis) кроме спектральных используются также параметрические мето
ды
, которые более экономно относятся к расходованию данных наблюдения (оценка меньшего числа параметров). Параметрический метод заключается в подборе гладкой функции, которая описывала бы тенденцию ряда: линейный тренд, полином и т.д. Временная последовате
льность может быть удачно описана, например, моделью авторегрессии скользящего среднего (АРСС) и моделью авторегрессии проинтегрированного скользящего среднего (АРПСС). Для представления большинства промышленных данных вполне подходит авторегрессионная мод
ель второго порядка. Эта модель лучше соответствует данным, чем модель первого порядка...
' P R O G R A M "Random1"
' 10.10.2012
'
-------------------------------------------------------------
' Выч
исление автокорреляционной функции
'
-------------------------------------------------------------
'
Dim As Integer I, Imax, K, Kmax, J, Jmax Dim As Single X(512), SX, XC(20), DS, X1
Open "CON" For Output As #2
'Open "Random.res" For Output As #2
Print #2,
' Генерация псевдослучайной последовательности
Imax = 512
For I = 1 To Imax
X(I) = Rnd()
Next I
' Вычисление выборочного среднего
SX = 0
For I = 1 To Imax
SX = SX + X(I)
Next I
10
SX = SX/Imax
Print #2, " Sample mean value ="; SX
' Вычисление выборочной дисперсии
DS = 0
For I = 1 To Imax
DS = DS + (X(I)
-
SX)*(X(I)
-
SX)
Next I
DS = DS/(Imax
-
1)
Print #2, " Sample variance ="; DS
' Вычисление автокорреляционной функции
Kmax = 20 ' Максимальный сдвиг
For K = 0 To Kmax
XC(K) = 0
For I = 1 To Imax -
K
XC(K) = XC(K) + (X(I) -
SX)*(X(I+K) -
SX)
Next I
XC(K) = XC(K) / (DS*(IMax -
K))
Next K
Print #2,
Print #2, " Autocorrelation Function"
For K = 0 To Kmax
Print #2, Using " XC(##) = ##.#####"; K; XC(K)
Next K
Close #2
Sleep
Результаты выполнения программы:
' Sample mean value = 0.5137525
' Sample variance = 0.08222542
'
' Autocorrelation Function
' XC( 0) = 0.99805
' XC( 1) = -
0.05231
' XC( 2) = 0.02162
' XC( 3) = -
0.03760
' XC( 4) = 0.03766
' X
C( 5) = -
0.06648
' XC( 6) = 0.07300
' XC( 7) = -
0.04271
' XC( 8) = -
0.06207
' XC( 9) = -
0.05059
' XC(10) = 0.07582
' XC(11) = -
0.01463
' XC(12) = 0.08264
' XC(13) = -
0.00776
' XC(14) = 0.01582
' XC(15) = 0.00016
' XC(16) = 0.00632
' XC(17) = -
0.07148
' XC(18) = -
0.03094
' XC(19) = 0.00354
' XC(20) = -
0.05419
11
3.3.
И не забудем про частоты...
Во многих областях науки и техники перед исследователем возникает задача, как на основе данных, полученных на конечном интервале времени или пространства (в неп
рерывной или дискретной форме), сформировать максимально достоверное представление об исходном образе сигнала, с которым связаны эти данные, т.е. о его основных характеристиках. Бурное развитие цифровой вычислительной техники значительно расширило сферы пр
иложения спектральных методов к обработке данных, сформировав направление цифрового спектрального анализа, который в свою очередь оказывает стимулирующее влияние на дальнейший прогресс вычислительных методов и средств их реализации.
Этот особый способ
представления и анализа временного ряда основан на предположении, что он образован синусоидами и косинусоидами различных частот. Способ реализации этой идеи, предложенный в 1898 Артуром Шустером, основан на применении периодограммы. Шустер применил период
ограмму для отыскания периодичностей в записях метеорологических наблюдений, записях магнитного склонения и ряда чисел солнечных пятен. Периодограмма вначале использовалась для обнаружения и оценок амплитуды синусоидальной компоненты, скрытой шумом. Другое
ее применение -
контроль случайности ряда (обычно ряда из "остаточных ошибок" после подгонки какой
-
либо модели), в котором периодические компоненты неизвестной частоты могут еще сохраниться.
12
Артур Шустер
(Franz Arthur Friedrich Schuster, 1851
-
1934), родился во Франкфурте
-
на
-
Майне, учился в Женеве, в 1875 переехал с родителями в Великобританию, дополнительно стажировался в Германии у Вебера и Гельмгольца. В 1876
—
1881 годах работал в Кавендишской лаборатории Кембриджского университета сначала с Дж. Макс
ееллом, затем —
с Дж. Рэлеем, в 1881
—
1907 годах —
профессор университета.
Великолепные немецкие ученые:
Вильгельм Эдуард Вебер (Wilhelm Eduard Weber; 1804 —
1891)
Герман Людвиг фон Гельмгольц (Hermann von Helmholtz; 1821 —
1894)
наверное, еще не раз бу
дут упоминаться в брошюрах...
Шустеру принадлежат труды по оптике, спектроскопии, изучению прохождения тока через газы. В 1882 году он получил первую фотографию спектра солнечной короны. Доказал, что проводимость газа обусловлена его ионами. Показал, что отношение заряда к массе электрона можно определить по отклонению катодных лучей в магнитном поле.
Но вернемся к нашим проблемам. Учитывая, что выборочный спектр мощности —
это косинус
-
преобразование Фурье выборочной автоковариационной функции, можно напи
сать небольшую программу (дописать предыдущую), так как это показано ниже.
' P R O G R A M "Random2"
' 10.10.2012
'
-------------------------------------------------------------
' Вычисление спектр
альной плотности
'
-------------------------------------------------------------
'
Dim As Integer I, Imax, K, Kmax, J, Jmax Dim As Single X(512), SX, XC(20), DS, X1, F, IX(16), IXS
Const Pi As Single = 3.14159265
Open "CON" For Output As #2
'Open "Random.r
es" For Output As #2
Print #2,
' Генерация псевдослучайной последовательности
Imax = 512
For I = 1 To Imax
X(I) = Rnd()
Next I
13
' Вычисление выборочного среднего
SX = 0
For I = 1 To Imax
SX = SX + X(I)
Next I
SX = SX/Imax
Print #2, " Sample mean value ="; SX
' Вычисление выборочной дисперсии
DS = 0
For I = 1 To Imax
DS = DS + (X(I)
-
SX)*(X(I)
-
SX)
Next I
DS = DS/(Imax
-
1)
Print #2, " Sample variance ="; DS
' Вычисление автокорреляционной функции
Kmax = 20 ' Максимальный сдвиг
For K = 0
To Kmax
XC(K) = 0
For I = 1 To Imax -
K
XC(K) = XC(K) + (X(I) -
SX)*(X(I+K) -
SX)
Next I
XC(K) = XC(K) / (DS*(IMax -
K))
Next K
Print #2,
Print #2, " Autocorrelation Function"
For K = 0 To Kmax
Print #2, Using " XC(##) = ##.#####"; K; XC
(K)
Next K
' Вычисление спектральной плотности мощности
Print #2,
Jmax = 16: F = 0
Print #2, " Power spectral density"
For J = 0 To Jmax
IXS = 0
For K = 1 To Kmax
IXS = IXS + 2*XC(K)*Cos(2*Pi*F*K)
Next K
IX(J) = 2*(XC(0) + 2*IXS)
Print #
2, Using " IX(##) = ##.#####"; J; IX(J)
F = F + 0.5 / Jmax
Next J
Close #2
Sleep
Результаты выполнения программы:
' Sample mean value = 0.5137525
' Sample variance = 0.08222542
'
'
14
' Power spectral density
' IX( 0) = 0.60251
' IX( 1) = 1.96952
' IX( 2) = 1.63424
' IX( 3) = 2.57709
' IX( 4) = 0.48932
' IX( 5) = 2.07801
' IX( 6) = 2.96500
' IX( 7) = 1.50617
' IX( 8) = 0.83645
' IX( 9) = 1.96334
' IX(10) = 3.73167
' IX(11) = 1.44224
' IX(12) = 1.55307
' IX(13) = 1.47632
' IX(14
) = 1.84215
' IX(15) = 2.55149
' IX(16) = 6.04033
Проведем небольшой эксперимент
–
заменим блок программы:
' Генерация псевдослучайной последовательности
Imax = 512
For I = 1 To Imax
X(I) = Rnd()
Next I
на блок вычисления не совсем псевдослучайной пос
ледовательности:
' Генерация комбинированной последовательности
Imax = 512
For I = 1 To Imax
X(I) = 0.75*Rnd()+0.25*Sin(64*Pi*I/Imax)
Next I
Результат выполнения программы предсказуемый –
спектр мощности получает заметный всплеск в области частоты наложе
нного сигнала:
' Power spectral density
' IX( 0) = 7.63306
' IX( 1) = -
6.98558
' IX( 2) = 32.03241
' IX( 3) = -
3.98149
' IX( 4) = 2.34878
' IX( 5) = -
0.80977
' IX( 6) = 1.04063
' IX( 7) = 0.68696
' IX( 8) = -
1.01350
' IX( 9) = 0.81118
' IX(10) = 1.40
142
' IX(11) = -
0.25299
' IX(12) = 0.54062
' IX(13) = -
0.20650
' IX(14) = 0.30809
' IX(15) = 0.97919
' IX(16) = 2.44305
15
4.
Преобразование Фурье.
Преобразование Фурье вычисляется всякий раз, когда мы слышим звук. Ухо автоматически выполняет вычисление
, проделать которое наш сознательный ум способен лишь после нескольких лет обучения математике. Наш орган слуха строит преобразование
, представляя звук —
колебательное движение частиц упругой среды, распространяющееся в виде волн в газообразной, жидкой или
твёрдых средах —
в виде спектра последовательных значений громкости для тонов различной высоты. Мозг превращает эту информацию в воспринимаемый звук. Некоторые подробности из "мира звуков" уже упоминались во Фрагменте 10... Осталось только напомнить, что такое Преобразование Фурье.
Преобразование Фурье —
это интегральное преобразование
, которое раскладывает исходную функцию на базисные функции, в качестве которых выступают синусоидальные функции, то есть представляет исходную функцию в виде интеграла сину
соид различной частоты, амплитуды и фазы. Иными словами, преобразование позволяет вычислить значение амплитуды и фазы, соответствующие каждой частоте. Недостаток преобразования Фурье в том, что он "работает" только с непрерывной функцией, что не всегда воз
можно и целесообразно. В большинстве случаев, имеют дело лишь с дискретной функцией (данными) или вообще ограниченным набором данных, для которых нельзя применить преобразование Фурье, для этого можно провести интерполяцию данных. Однако для дискретного на
бора данных, было придумано так называемое дискретное преобразование Фурье (ДПФ). Дискретное преобразование Фурье —
это одно из преобразований Фурье, широко применяемых в алгоритмах цифровой обработки сигналов (его модификации применяются в сжатии звука в MP3, сжатии изображений в JPEG
и др.), а также в других областях, связанных с анализом частот в дискретном (к примеру, оцифрованном аналоговом) сигнале.
Упрощенная схема замкнутой системы управления
16
Н
а рисунке приведена упрощенная схема замкнутой сис
темы управления –
это на тот случай, если, Бог даст, доберемся до программирования алгоритмов управления промышленного назначения. К сожалению, эта область инженерной деятельности почти полностью отдана на откуп "модных" западных фирм.
В систему обработки данных сигналы поступают, как правило, в непрерывном виде. Если в системе используются компьютеры, то далее они преобразуются к дискретному виду, более удобному для обработки. При этом выполняются операции дискретизации (по времени) и квантования (по уровн
ю). Н
а рисунке приведена упрощенная схема замкнутой системы управления –
это на тот случай, если, Бог даст, доберемся до программирования алгоритмов управления промышленного назначения
. К сожалению, эта область инженерной деятельности почти полностью отдан
а на откуп "модных" западных фирм.
На схеме обозначено:
x(t) –
выходной сигнал с объекта управления;
y(t) –
желаемое значение выходного сигнала;
z(t) –
рассогласование сигналов;
u(t) –
управляющее воздействие.
Алгоритм БПФ был впервые опубликован в 1965 году в статье Кули (Cooly) и Тьюки (Tukey)
. На самом деле БПФ неоднократно изобреталось до этого, но важность его в полной мере не осознавалась до появления современных компьютеров. Некоторые исследователи приписывают открытие БПФ Рунге (Runge) и Кёнигу (K
onig) в 1924. Наконец, открытие этого метода приписывается ещё Гауссу (Gauss) в 1805 году. Быстрое преобразование Фурье (БПФ) -
это вариант дискретного преобразования Фурье (ДПФ), достаточно сложный алгоритм и его детали обычно изучают те, кто занимается в
опросами цифровой обработки сигналов.
Наверное, все знают один из технически сложных и утомительных стилей плавания -
Баттерфляй
(англ. butterfly —
"бабочка"). Но также "Бабочка" носит название элементарный шаг в алгоритме быстрого преобразования Фурье Ку
ли
-
Тюки. Время выполнения шага "Бабочка" определяет длительность всего процесса преобразования Фурье.
Использование интегральных преобразований, переводящих рассмотрение динамики системы из пространства оригиналов в пространство изображений, снижает в ряд
е случаев трудоемкость анализа и синтеза систем управления. Наиболее распространенными являются следующие преобразования:
F -
преобразование (по Фурье);
L -
преобразование (по Лапласу);
Z -
преобразование (по Лорану).
17
З
абавно, что все преобразования связан
ы с именами великих французских математиков: Жан Батист Фурье (1768
-
1830), Пьер Симон Лаплас (1749
-
1827), Пьер Альфонс Лоран (1813
-
1854), хотя это лишь подчеркивает первенство французской школы в области обработки сигналов). Но, достаточно "лирики", посмот
рите на текст программы, приведенный ниже.
' P R O G R A M "FFTR_Smith"
' 24.0
2
.
2013
'
-------------------------------------------------------------
' Быстрое преобразование Фурье (БПФ) дискретной
функции '
-------------------------------------------------------------
' N -
количество точек последовательности;
' При выходе:
' REX -
действительная часть сигнала;
' IMX -
мнимая часть сигнала;
' При выходе:
' REX -
действительная
часть спектра Фурье;
' IMX -
мнимая часть спектра Фурье;
' XA -
амплитуда гармоник сигнала;
' XF -
фаза гармоник сигнала.
'
#Lang "FB" ' Совместимость с FreeBASIC
' Текст основного модуля программы
Declare Sub FFTR(N As Integer, REX() As
Single, IMX() As Single)
Dim As Integer N, J
N = 128 ' Количество точек последовательности Dim As Single REX(N), IMX(N), XA(N), XP(N), Pi, XAmax
Pi = 3.1415926536
' Заполнение массивов исходных данных:
For J = 0 To N
-
1 ' Перебор все
х точек
REX(J) = Sin(Pi*J/10) ' Действительная часть сигнала
IMX(J) = 0.0 ' Мнимая часть сигнала отсутствует
Next J
Open "CON" For Output As #2 ' Вывод
на
консоль
'Open "FFTP.res" For Output As #2 ' Вывод
в
файл
FFTR(N, REX(), IMX())
Print
#2, " Direct conversion:"
Print #2, " J Re(X) Im(X) Am(X) Ph(X)"
XAmax = -
1E38 ' Начальное "максимальное" значение
For J = 1 To N
-
1
XA(J) = Sqr(REX(J)*REX(J)+IMX(J)*IMX(J))
XP(J) = -
(180*Atn(IMX(J)/REX(J)))/Pi
If XAmax < XA(J) Th
en XAmax = XA(J)
Print #2, Using " ### #####.##### #####.##### #####.##### #####.#####"; J; REX(J); IMX(J); XA(J); XP(J)
Next J
Print #2,: Print #2, " Continue ?";
Close #2 ' Закрыть файл вывода
Sleep ' Ждать ввода
18
' Выво
д графика амплитуды
Screen 12 ' Графический экран 640x480
View (1, 1)
-
(478, 478), , 15 ' Квадратное "физическое" окно
Window (0, 0)
-
(128, XAmax) ' "Логическое" окно вывода
For J = 0 To 128 ' Перебор аргумента
PSet(J, XA(J))
, 15 ' Вывод точек графика
Next J ' Следующая точка
Sleep ' Ждать ввода
'
'
-------------------------------------------------------------
'
Sub FFTR(N As Integer, REX() As Single, IMX() As Single)
'
Dim
As Integer I, J, K, L, M, NM1, ND2, JM1
Dim As Single Pi, TR, TI, LE, LE2, UR, UI, SR, SI, IP Pi = 3.14159265 ' Значение константы
NM1 = N
-
1: ND2 = N/2
M = CINT(LOG(N)/LOG(2))
J = ND2
'
For I = 1 To N
-
2 ' Выполнение сорти
ровки
If I >= J Then GoTo L1190
TR = REX(J): TI = IMX(J)
REX(J) = REX(I): IMX(J) = IMX(I)
REX(I) = TR: IMX(I) = TI
L1190: K = ND2
L1200: If K > J Then GoTo L1240
J = J
-
K: K = K/2
GoTo L1200
L1240: J = J+K
Next I
'
For L = 1 To M ' Петля для каждого этапа
LE = 2^L: LE2 = LE/2
UR = 1: UI = 0
SR = Cos(Pi/LE2) ' Вычисление
COS и
SIN
SI = -
Sin(Pi/LE2)
For J = 1 To LE2 ' Петля для каждого преобразования
JM1 = J
-
1
For I = JM1 To NM1 Step LE '
Петля
для
каждой
"
бабо
чки
"
IP = I+LE2
TR = REX(IP)*UR -
IMX(IP)*UI ' "
Бабочка
" рассчета
TI = REX(IP)*UI + IMX(IP)*UR
REX(IP) = REX(I)
-
TR: IMX(IP) = IMX(I)
-
TI
REX(I) = REX(I)+TR: IMX(I) = IMX(I)+TI Next I
TR = UR
UR = TR*SR -
UI*SI: U
I = TR*SI + UI*SR
Next J
Next L
End Sub
19
Результаты выполнения программы (с сокращениями):
' Direct conversion:
' J Re(X) Im(X) Am(X) Ph(X)
' 1 5.56105 -
0.30207 5.56925 3.10922
' 2 6.04012 -
0.65279 6.0
7529 6.16833
' 3 7.03844 -
1.13124 7.12877 9.13070
' 4 9.10806 -
1.92862 9.31002 11.95571
' 5 14.43667 -
3.76342 14.91914 14.61098
' 6 47.21069 -
14.49949 49.38709 17.07293
' 7 -
29.67734 10
.40839 31.44963 19.32671
' 8 -
10.57865 4.13834 11.35930 21.36533
' 9 -
6.23239 2.66970 6.78012 23.18827
' 10 -
4.33681 2.00389 4.77740 24.80000
...
' 20 -
1.00064 0.61788 1.17603 31.69466
...
'
60 -
0.43858 0.02968 0.43958 3.87145
...
' 80 -
0.46246 -
0.12533 0.47914 -
15.16313
...
' 100 -
0.66363 -
0.38129 0.76537 -
29.87987
...
' 120 -
10.57865 -
4.13834 11.35930 -
21.36532
' 121 -
29.67734 -
10.40839
31.44963 -
19.32670
' 122 47.21069 14.49948 49.38708 -
17.07291
' 123 14.43666 3.76342 14.91913 -
14.61097
' 124 9.10806 1.92862 9.31001 -
11.95570
' 125 7.03844 1.13124 7.12877 -
9.13068
' 126 6.040
11 0.65279 6.07529 -
6.16836
' 127 5.56104 0.30207 5.56924 -
3.10917
'
' Continue ?
'
после нажатия любой клавиши на экран монитора выводится график зависимости амплитуды от номера точки. Немного скучновато, но для начала работы, ду
маю, будет достаточно. Ведь цель этих "Фрагментов" просто расширить кругозор...
На этом позвольте закруглиться.
До новых встреч!
Пишите: eugene_r@mail.ru
Документ
Категория
Информатика
Просмотров
123
Размер файла
574 Кб
Теги
программа, freebasic, преобразование, сигнал
1/--страниц
Пожаловаться на содержимое документа