Результат работы приложения
Калужский филиал
Факультет "Фундаментальных Наук"
Кафедра "Программного обеспечения ЭВМ, информационных технологий и прикладной математики" (ФН1-КФ)
ОТЧЁТ О ЛАБОРАТОРНОЙ РАБОТЕ № 1
НА ТЕМУ «Системы локального позиционирования»
ПО КУРСУ «Управление сложными системами»
Студент: Шабунин А.Ю. ( _____________ )
Группа: ИТД – 82
Преподаватель: Белов Ю.С. ( _____________ )
Калуга – 2012
Вариант №3
Постановка задачи
1) Прочитать данные из файла.
2) Построит графики по каждому из указанных параметров, при этом ось абсцисс – номер итерации получения данных, ординат – значение в соответствующий момент.
3) Реализовать метод «Синхронной фильтрации».
4) Вычислить коэффициенты корреляции сигналов каждого из сенсоров по 3-ем осям измерения.
5) Вычислить коэффициенты автокорреляции сигналов каждого из сенсоров по 3-ем осям измерения.
6) Сохранить данные после применения фильтра в файл, имеющий такой же формат, как и исходный.
Теоретические сведения
На сегодняшний день задача позиционирования собственного местоположения является очень актуальной. Системы такого рода находят применения во многих областях нашей жизнедеятельности. Существующие спутниковые системы глобального позиционирования (СГП), такие как GPS и ГЛОНАСС, хорошо развиты и уже зарекомендовали себя. Однако эти системы неприменимы в закрытых помещениях, или когда требуемая точность больше, чем точность, обеспечиваемая СГП.
Такие условия дали толчок развитию локальным системам позиционирования. Эти системы могут найти широкое применение на больших оптовых складах, выставках, в парках и т.д., и уже имеют спрос.
Для определения местоположения объекта в системах локального позиционирования может быть использовано несколько способов:
1. Угловой метод. При этом методе определяется направление прихода сигнала. Для этого используются антенны с узкими диаграммами направленности, изменяющие свое положение в пространстве.
2. Временной метод основан на измерении времени хода радиоволны (или разности времен от двух источников при разностно-дальномерном методе). Зная время, определяется расстояние до объекта. Таким образом, вычислив расстояния до, как минимум, трех базовых станций, можно вычислить относительно них и координаты объекта.
3. Фазовый метод. Этот метод основан на измерении разности фаз двух сигналов (посланного запросчиком и переданного обратно ответчиком, либо от двух станций при разностно-дальномерном способе). Зная длину волны, можно определить расстояние. Однако определение расстояние неоднозначно. Однозначное измерение будет, если расстояние не превышает длины волны.
Для определения местоположения в локальных системах позиционирования использование углового метода вызывает трудности из-за использования довольно сложных антенн. При использовании метода подсчета времени хода сигнала возникают трудности точного измерения времени.
Поэтому удобнее всего использование фазового разностно-дальномерного метода определения расстояния, с разрешением многозначности при помощи временного метода.
Линейный фильтр — динамическая система, применяющая некий линейный оператор ко входному сигналу для выделения или подавления определённых частот сигнала и других функций по обработке входного сигнала. Линейные фильтры широко применяются в электронике, цифровой обработке сигналов и изображений, в оптике, теории управления и других областях.
Наиболее часто они используются для того, чтобы подавить нежелательные частоты входного сигнала или для того чтобы выделить нужную полосу частот в сигнале. Существует большое количество различных типов и модификаций линейных фильтров, в статье описаны наиболее распространённые.
Несмотря на природу фильтра — механическую, оптическую, электронную, программную или электрическую, а также на частотный диапазон, в котором они работают, математическая теория линейных фильтров универсальна и может быть применена к любому из них.
Линейные фильтры разделяются на два больших класса по виду импульсной переходной функции: фильтр с бесконечной импульсной характеристикой (БИХ-фильтры) и фильтр с конечной импульсной характеристикой (КИХ-фильтры). До недавнего времени практическое использование имели только аналоговые БИХ-фильтры, однако с развитием цифровой техники КИХ-фильтры стали применяться повсеместно.
По виду частотной характеристики фильтры подразделяются на:
· Фильтр низких частот — пропускает низкие частоты сигнала.
· Фильтр высоких частот — пропускает высокие частоты сигнала.
· Полосовой фильтр — пропускает ограниченную полосу частот сигнала.
· Режекторный фильтр пропускает все частоты, кроме определённой полосы.
· Фазовый фильтр пропускает все частоты сигнала, но изменяет его фазу.
Полосовые и режекторные фильтры могут быть сконструированы путём последовательного соединения фильтров низких и высоких частот.
При цифровой обработке сигналов достаточно часто стоит задача определения степени независимости одного процесса от другого или наоборот установления схожести двух процессов. Схожесть (или зависимость друг от друга) данных или процессов может быть выражена и измерена математически – мерой зависимости являетсякорреляция.
Рассмотрим две последовательности данных, представляющие собой выборки двух сигналов, взятых с одинаковой частотой оцифровки, размерностью N – s1(k) и s2(k). Корреляцию двух сигналов можно определить по следующей формуле:
Сумма произведений выборок случайных процессов стремится к исчезающее малому значению с увеличением N. Это объясняется равновероятным возникновением положительных и отрицательных чисел, а соответственно и их произведений, поэтому суммы компенсируются при сложении. Положительная сумма указывает на схожесть процессов, чем она больше по модулю, тем процессы более зависимы друг от друга, отрицательная сумма указывает на отрицательную корреляцию, т.е. увеличение значений отчетов одного процесса связано с уменьшением значений отчетов другого(например, сигналы находятся в противофазе). Множитель 1/N служит для нормировки результата к размеру выборки (делает результат независимым от размера выборки).
Для определения периодичности и статистических характеристик процесса вводят понятие автокорреляции и функции автокорреляции. Пусть имеется процесс s(k), тогда его функция автокорреляции может быть вычислена по следующей формуле:
Корреляция и автокорреляция являются одним из «китов» цифровой обработки сигналов наравне со сверткой и преобразованием Фурье. Корреляция применяется в радарных и гидроакустических установках для дальнометрии и пеленгации (местоопределении), в которых сравниваются переданные и отраженные сигналы и по задержке определяются расстояние и местоположение, при детектировании сигналов в шуме, для синхронизации принимаемых данных (нахождении и детектировании начала посылки), в экономике, социологии, политологии для установления причинно-следственных связей. Функция автокорреляции применяется для оценки периодичности процессов, для выбора кодовых последовательностей для систем с шумоподобными сигналами.
Фильтр Калмана — эффективный (имеющий способ гарантированно достигать результат за конечное число действий)рекурсивный фильтр, оценивающий вектор состояния динамической системы, используя ряд неполных и зашумленных измерений. Назван в честь Рудольфа Калмана.
Фильтр Калмана широко используется в инженерных и эконометрических приложениях: от радаров и систем технического зрения до оценок параметров макроэкономических моделей[1][2]. Калмановская фильтрация является важной частью теории управления, играет большую роль в создании систем управления. Совместно с линейно-квадратичным регулятором фильтр Калмана позволяет решить задачу линейно-квадратичного гауссовского управления. Фильтр Калмана и линейно-квадратичный регулятор — возможное решение большинства фундаментальных задач в теории управления.
В большинстве приложений количество параметров, задающих состояние объекта, больше, чем количество наблюдаемых параметров, доступных для измерения. При помощи модели объекта по ряду доступных измерений фильтр Калмана позволяет получить оценку внутреннего состояния.
Фильтр Калмана предназначен для рекурсивного дооценивания вектора состояния априорно известной динамической системы, то есть для расчёта текущего состояния системы необходимо знать текущее измерение, а также предыдущее состояние самого фильтра. Таким образом, фильтр Калмана, как и множество других рекурсивных фильтров, реализован во временном, а не в частотном представлении.
Наглядный пример возможностей фильтра — получение точных, непрерывно обновляемых оценок положения и скорости некоторого объекта по результатам временного ряда неточных измерений его местоположения. Например, в радиолокациистоит задача сопровождения цели, определения её местоположения, скорости и ускорения, при этом результаты измерений поступают постепенно и сильно зашумлены. Фильтр Калмана использует вероятностную модель динамики цели, задающую тип вероятного движения объекта, что позволяет снизить воздействие шума и получить хорошие оценки положения объекта в настоящий, будущий или прошедший момент времени.
Динамическая система — математическая абстракция, предназначенная для описания и изучения систем, эволюция во времени которых однозначно определяется начальным состоянием.
Фильтр Калмана оперирует понятием вектора состояния системы (набором параметров, описывающих состояние системы на некоторый момент времени) и его статистическим описанием. В общем случае динамика некоторого вектора состояния описывается плотностями вероятности распределения его компонент в каждый момент времени. При наличии определенной математической модели производимых наблюдений за системой, а так же модели априорного изменения параметров вектора состояния (а именно - в качестве марковского формирующего процесса) можно записать уравнение для апостериорной плотности вероятности вектора состояния в любой момент времени. Данное дифференциальное уравнение носит названиеуравнение Стратоновича. Уравнение Стратоновича в общем виде не решается. Аналитическое решение удается получить только в случае ряда ограничений (предположений):
- гауссовости априорных и апостериорных плотностей вероятности вектора состояния на любой момент времени (в т.ч. начальный)
- гауссовости формирующих шумов
- гауссовости шумов наблюдений
- белости шумов наблюдений
- линейности модели наблюдений
- линейности модели формирующего процесса (который, напомним, должен являться марковским процессом)
Классический фильтр Калмана является уравнениями для расчета первого и второго момента апостериорной плотности вероятности (в смысле вектора математических ожиданий и матрицы дисперсий, в том числе взаимных) при данных ограничениях. Ввиду того, что для нормальной плотности вероятности математическое ожидание и дисперсионная матрица полностью задают плотность вероятности, можно сказать, что фильтр Калмана рассчитывает апостериорную плотность вероятности вектора состояния на каждый момент времени. А значит полностью описывает вектор состояния как случайную векторную величину.
Расчетные значения математических ожиданий при этом являются оптимальными оценками по критерию среднеквадратической ошибки, что и обуславливает его широкое применение.
Существует несколько разновидностей фильтра Калмана, отличающихся приближениями и ухищрениями, которые приходится применять для сведения фильтра к описанному виду и уменьшения его размерности:
Расширенный фильтр Калмана (EKF, Extended Kalman filter). Сведение нелинейных моделей наблюдений и формирующего процесса с помощью линеаризации посредством разложения в ряд Тейлора.
Unscented Kalman filter (UKF). Используется в задачах, в которых простая линеаризация приводит к уничтожению полезных связей между компонентами вектора состояния. В этом случае "линеаризация" основана на unscented-преобразовании.
Ensemble Kalman filter (EnKF). Используется для уменьшения размерности задачи.
Возможны варианты с нелинейным дополнительным фильтром, позволяющим привести негауссовские наблюдения к нормальным.
Возможны варианты с "обеляющим" фильтром, позволяющим работать с "цветными" шумами и прочее.
Использокание фильтра Калмана:
- Курсовертикали
- Автопилот
- Навигационные системы:
- Инерциальные
- Рельефометрические (по цифровым картам местности)
- Спутниковые
Результат работы приложения
Листинг приложения
Build.java
package core;
import java.util.ArrayList;
/**
*
* @author wae
*/
public class Build {
private ArrayList<Double> xPoints;
private ArrayList<Double> yPoints;
private ArrayList<Double> xFilter;
private ArrayList<Double> yFilter;
private double xDiff;
private double yDiff;
private double div;
private double minX;
private double maxX;
private double minY;
private double maxY;
public Build(ArrayList<Double> xPoints, ArrayList<Double> yPoints) throws NullPointerException {
this.xPoints = xPoints;
this.yPoints = yPoints;
minX = min(xPoints);
maxX = max(xPoints);
minY = min(yPoints);
maxY = max(yPoints);
xDiff = Math.abs(maxX - minX);
yDiff = Math.abs(maxY - minY);
div = Math.abs(maxY / yDiff); //??
}
private double min(ArrayList<Double> array) throws NullPointerException {
double min = array.get(0);
for (int i = 0; i < array.size(); i++) {
if (min > array.get(i)) {
min = array.get(i);
}
}
return min;
}
public double getMaxX() {
return maxX;
}
public double getMaxY() {
return maxY;
}
public double getMinX() {
return minX;
}
public double getMinY() {
return minY;
}
private double max(ArrayList<Double> array) {
double max = array.get(0);
for (int i = 0; i < array.size(); i++) {
if (max < array.get(i)) {
max = array.get(i);
}
}
return max;
}
public ArrayList<Double> getxPoints() {
return xPoints;
}
public ArrayList<Double> getyPoints() {
return yPoints;
}
public double getxDiff() {
return xDiff;
}
public double getyDiff() {
return yDiff;
}
public double getDiv() {
return div;
}
}
FileAn.java
package core;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Dvein
*/
public class FileAn {
private File file;
private BufferedReader reader;
private int x_G, y_G, z_G, x_A, y_A, z_A, x_M, y_M, z_M;
private ArrayList<Double> sample, x_Gyro, y_Gyro, z_Gyro, x_Acc, y_Acc, z_Acc, x_Magn, y_Magn, z_Magn;
public FileAn(File file) {
this.file = file;
}
public ArrayList<Double> getSample() {
try {
sample=getParam(0);
} catch (FileNotFoundException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
}
return sample;
}
public ArrayList<Double> getX_Magn() {
try {
x_Magn=getParam(position("X Magn"));
} catch (FileNotFoundException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
}
return x_Magn;
}
public ArrayList<Double> getX_Acc() {
try {
x_Acc=getParam(position("X acc"));
} catch (FileNotFoundException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
}
return x_Acc;
}
public ArrayList<Double> getY_Magn() {
try {
y_Magn=getParam(position("Y Magn"));
} catch (FileNotFoundException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
}
return y_Magn;
}
public ArrayList<Double> getY_Acc() {
try {
y_Acc=getParam(position("Y acc"));
} catch (FileNotFoundException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
}
return y_Acc;
}
public ArrayList<Double> getZ_Gyro() {
try {
z_Gyro=getParam(position("Z Gyro"));
} catch (FileNotFoundException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
}
return z_Gyro;
}
public ArrayList<Double> getX_Gyro() {
try {
x_Gyro=getParam(position("X Gryo"));
} catch (FileNotFoundException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
}
return x_Gyro;
}
public ArrayList<Double> getY_Gyro() {
try {
y_Gyro=getParam(position("Y Gyro"));
} catch (FileNotFoundException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
}
return y_Gyro;
}
public ArrayList<Double> getZ_Magn() {
try {
z_Magn=getParam(position("Z Mag"));
} catch (FileNotFoundException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
}
return z_Magn;
}
public ArrayList<Double> getZ_Acc() {
try {
z_Acc=getParam(position("Z acc"));
} catch (FileNotFoundException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileAn.class.getName()).log(Level.SEVERE, null, ex);
}
return z_Acc;
}
private ArrayList<Double> getParam(int i) throws FileNotFoundException, IOException {
ArrayList<Double> param = new ArrayList<Double>();
if(i<0){
return null;
}
reader = new BufferedReader(new FileReader(file));
String line = null;
int n = 0;
while ((line = reader.readLine()) != null) {
if (n > 6) {
String mas[] = line.split(",");
param.add(Double.parseDouble(mas[i]));
}
n++;
}
return param;
}
private int position(String name) throws FileNotFoundException, IOException {
reader = new BufferedReader(new FileReader(file));
String line = null;
int res = -1;
String mas[] = null;
for (int i = 0; i < 6; i++) {
reader.readLine();
}
mas = reader.readLine().split(",");
for (int i = 0; i < mas.length; i++) {
if (mas[i].equals(name)) {
res = i;
}
}
return res;
}
}
Filters.java
package core;
import java.util.ArrayList;
/**
*
* @author Dvein
*/
public class Filters {
private ArrayList<Double> xPoints;
private ArrayList<Double> yPoints;
private ArrayList<Double> xFilter = new ArrayList<Double>();
private ArrayList<Double> yFilter = new ArrayList<Double>();
private double start;
private double end;
private double corel;
public double getCorel(int displacement) {
int n = yPoints.size();
double pr = 0;
double sum = 0; //среднее Y
double sum2 = 0; //среднее Y2
double sum3 = 0; //среднее X
double sum4 = 0; //среднее X2
double sum5 = 0; //среднее YX
for (int i = 0; i < n ; i++){
sum = sum + yPoints.get(i)/n;
sum2 = sum2 + yPoints.get(i)*yPoints.get(i)/n;
sum3 = sum3 + xPoints.get(i)/n;
sum4 = sum4 + xPoints.get(i)*xPoints.get(i)/n;
sum5 = sum5 + yPoints.get(i)*xPoints.get(i)/n;
}
//System.out.println(sum/n);
//System.out.println(sum2/n);
//System.out.println(sum3/n);
//System.out.println(sum4/n);
//System.out.println(sum5/n);
//for (int i = 0; i < n; i++) {
// pr = pr + yPoints.get(i) * yPoints.get(i + displacement)/(1000*1000);
//}
corel = (sum5-sum*sum3)/Math.sqrt((sum2-sum*sum)*(sum4-sum3*sum3))*100;
return corel;
}
public ArrayList<Double> getxFilter() {
return xFilter;
}
public ArrayList<Double> getyFilter() {
return yFilter;
}
public Filters(ArrayList<Double> xPoints, ArrayList<Double> yPoints, double start, double end) {
this.xPoints = xPoints;
this.yPoints = yPoints;
this.start = start;
this.end = end;
}
public void SkSrFilter() {
int k = 2;
for (int i = 0; i <= end - start - 2 * k; i++) {
xFilter.add(start + i + k);
}
double g = (2 * k + 1);
for (int i = (int) (start + k); i <= end - k; i++) {
double sum = 0;
for (int j = -k; j <= k; j++) {
sum = sum + yPoints.get(i + j);
}
yFilter.add(sum / g);
}
/*for (int i = (int) start; i <= end; i++) {
xFilter.add((double) i);
}
for (int i = (int) start; i <= end; i++) {
for (int j = i - k; j < i + k; j++) {
double sum = 0;
double q = 0;
try {
sum = sum + yPoints.get(j);
q++;
} catch (Exception e) {
}
yFilter.add(sum / q);
}
}*/
}
public void PorFilter(double porog) {
SkSrFilter();
int k = 40;
int j = 0;
for (int i = (int) (start + k); i <= end - k; i++) {
if (Math.abs(yPoints.get(i) - yFilter.get(j)) < porog) {
yFilter.set(j, yPoints.get(i));
}
j++;
}
/*for (int i = (int) start; i <= end; i++) {
if (Math.abs(yPoints.get(i) - yFilter.get(j)) < porog) {
yFilter.set(j, yPoints.get(i));
}
j++;
}*/
}
MainForm.java
package ui;
import core.Build;
import core.FileAn;
import core.Filters;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.StyledEditorKit.ItalicAction;
public class MainForm extends javax.swing.JFrame {
private File openFile = null, saveFile = null;
private BufferedReader reader;
private ArrayList<Double> sample, xgND, x_Gryo, ygND, y_Gyro, zgND, z_Gyro, xaND, x_Acc, yaND, y_Acc, zaND, z_Acc, xmND, x_Magn, ymND, y_Magn, zmND, z_Magn;
private FileAn fileAn;
private Build build;
private Filters filter;
/** Creates new form MainForm */
public MainForm() {
initComponents();
this.setTitle("ГИС");
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
buttonGroup2 = new javax.swing.ButtonGroup();
clear_but = new javax.swing.JButton();
paint_but = new javax.swing.JButton();
korel_but = new javax.swing.JButton();
draw_panel = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
z_Gryo_rb = new javax.swing.JRadioButton();
y_Gryo_rb = new javax.swing.JRadioButton();
z_Magn_rb = new javax.swing.JRadioButton();
y_Acc_rb = new javax.swing.JRadioButton();
z_Acc_rb = new javax.swing.JRadioButton();
x_Magn_rb = new javax.swing.JRadioButton();
y_Magn_rb = new javax.swing.JRadioButton();
x_Acc_rb = new javax.swing.JRadioButton();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
x_Gryo_rb = new javax.swing.JRadioButton();
jPanel3 = new javax.swing.JPanel();
sksrfilter_rb = new javax.swing.JRadioButton();
porfilter_rb = new javax.swing.JRadioButton();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
start_text = new javax.swing.JTextField();
end_text = new javax.swing.JTextField();
porog_text = new javax.swing.JTextField();
sm_text = new javax.swing.JTextField();
korel_text = new javax.swing.JTextField();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenuItem2 = new javax.swing.JMenuItem();
jMenuItem3 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
clear_but.setText("Очистить");
clear_but.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clear_butActionPerformed(evt);
}
});
paint_but.setText("Построить");
paint_but.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
paint_butActionPerformed(evt);
}
});
korel_but.setText("Корреляция");
korel_but.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
korel_butActionPerformed(evt);
}
});
draw_panel.setBackground(new java.awt.Color(255, 255, 255));
draw_panel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
javax.swing.GroupLayout draw_panelLayout = new javax.swing.GroupLayout(draw_panel);
draw_panel.setLayout(draw_panelLayout);
draw_panelLayout.setHorizontalGroup(
draw_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 749, Short.MAX_VALUE)
);
draw_panelLayout.setVerticalGroup(
draw_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 335, Short.MAX_VALUE)
);
buttonGroup1.add(z_Gryo_rb);
z_Gryo_rb.setText("Z");
buttonGroup1.add(y_Gryo_rb);
y_Gryo_rb.setText("Y");
buttonGroup1.add(z_Magn_rb);
z_Magn_rb.setText("Z");
buttonGroup1.add(y_Acc_rb);
y_Acc_rb.setText("Y");
buttonGroup1.add(z_Acc_rb);
z_Acc_rb.setText("Z");
buttonGroup1.add(x_Magn_rb);
x_Magn_rb.setText("X");
buttonGroup1.add(y_Magn_rb);
y_Magn_rb.setText("Y");
buttonGroup1.add(x_Acc_rb);
x_Acc_rb.setText("X");
jLabel1.setFont(new java.awt.Font("Tahoma", 0, 13));
jLabel1.setText("Gryo");
jLabel2.setFont(new java.awt.Font("Tahoma", 0, 13));
jLabel2.setText("Acc");
jLabel3.setFont(new java.awt.Font("Tahoma", 0, 13));
jLabel3.setText("Magn");
buttonGroup1.add(x_Gryo_rb);
x_Gryo_rb.setSelected(true);
x_Gryo_rb.setText("X");
x_Gryo_rb.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
x_Gryo_rbActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(y_Magn_rb)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(x_Gryo_rb, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(y_Gryo_rb, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(16, 16, 16))
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(z_Gryo_rb, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(18, 18, 18)))
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(x_Acc_rb)
.addComponent(y_Acc_rb)
.addComponent(z_Acc_rb))
.addGap(11, 11, 11))
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jLabel2)
.addGap(18, 18, 18)))
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel3)
.addComponent(x_Magn_rb)))
.addComponent(z_Magn_rb, javax.swing.GroupLayout.Alignment.TRAILING))))
.addContainerGap(12, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jLabel1)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(x_Acc_rb)
.addComponent(x_Gryo_rb)
.addComponent(x_Magn_rb))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(y_Gryo_rb)
.addComponent(y_Acc_rb))
.addComponent(y_Magn_rb))
.addGap(8, 8, 8)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(z_Magn_rb)
.addComponent(z_Acc_rb)
.addComponent(z_Gryo_rb))
.addGap(17, 17, 17))
);
buttonGroup2.add(sksrfilter_rb);
sksrfilter_rb.setSelected(true);
sksrfilter_rb.setText("Скользящего среднего");
buttonGroup2.add(porfilter_rb);
porfilter_rb.setText("Пороговый");
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(porfilter_rb)
.addComponent(sksrfilter_rb))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(22, 22, 22)
.addComponent(sksrfilter_rb)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(porfilter_rb)
.addContainerGap(52, Short.MAX_VALUE))
);
jLabel4.setText("Итерации:");
jLabel5.setText("Порог:");
jLabel6.setText("Смещение:");
jLabel7.setText("с");
jLabel8.setText("по");
jLabel9.setText("Коэффициент корреляции");
start_text.setText("1");
end_text.setText("9999");
porog_text.setText("10");
sm_text.setText("0");
jMenu1.setText("Файл");
jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
jMenuItem1.setText("Открыть");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenuItem2.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
jMenuItem2.setText("Сохранить");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem2ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem2);
jMenuItem3.setText("Выход");
jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem3ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem3);
jMenuBar1.add(jMenu1);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(clear_but)
.addGap(18, 18, 18)
.addComponent(paint_but)
.addGap(18, 18, 18)
.addComponent(korel_but))
.addGroup(layout.createSequentialGroup()
.addGap(4, 4, 4)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(37, 37, 37)
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 67, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel9)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel4)
.addGap(18, 18, 18)
.addComponent(jLabel7))
.addComponent(jLabel5)
.addComponent(jLabel6))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(start_text, javax.swing.GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE)
.addComponent(porog_text, javax.swing.GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE)
.addComponent(sm_text, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(end_text, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(korel_text, javax.swing.GroupLayout.PREFERRED_SIZE, 156, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(36, 36, 36))))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(draw_panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(26, 26, 26)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(jLabel7)
.addComponent(start_text, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(end_text, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel8))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(porog_text, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(sm_text, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel9)
.addComponent(korel_text, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGap(29, 29, 29)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(draw_panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(clear_but)
.addComponent(paint_but)
.addComponent(korel_but, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
pack();
}// </editor-fold>
private void x_Gryo_rbActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void paint_butActionPerformed(java.awt.event.ActionEvent evt) {
int p = -1;
try {
if (x_Gryo_rb.isSelected()) {
build = new Build(sample, x_Gryo);
filter = new Filters(sample, x_Gryo, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
if (y_Gryo_rb.isSelected()) {
build = new Build(sample, y_Gyro);
filter = new Filters(sample, y_Gyro, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
if (z_Gryo_rb.isSelected()) {
build = new Build(sample, z_Gyro);
filter = new Filters(sample, z_Gyro, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
if (x_Acc_rb.isSelected()) {
build = new Build(sample, x_Acc);
filter = new Filters(sample, x_Acc, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
if (y_Acc_rb.isSelected()) {
build = new Build(sample, y_Acc);
filter = new Filters(sample, y_Acc, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
if (z_Acc_rb.isSelected()) {
build = new Build(sample, z_Acc);
filter = new Filters(sample, z_Acc, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
if (x_Magn_rb.isSelected()) {
build = new Build(sample, x_Magn);
filter = new Filters(sample, x_Magn, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
if (y_Magn_rb.isSelected()) {
build = new Build(sample, y_Magn);
filter = new Filters(sample, y_Magn, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
if (z_Magn_rb.isSelected()) {
build = new Build(sample, z_Magn);
filter = new Filters(sample, z_Magn, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
if (sksrfilter_rb.isSelected()) {
filter.SkSrFilter();
}
if (porfilter_rb.isSelected()) {
filter.PorFilter(Double.parseDouble(porog_text.getText()));
}
p = 1;
} catch (Exception e) {
}
draw(p);
}
private void clear_butActionPerformed(java.awt.event.ActionEvent evt) {
draw_panel.repaint();
}
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
String homeDir = "C:\\";
fileChooser.setCurrentDirectory(new File(homeDir));
fileChooser.showOpenDialog(this); //открывает диалоговое окно открытия
openFile = fileChooser.getSelectedFile(); //файл который будет открываться
fileAn = new FileAn(openFile);
sample = fileAn.getSample();
x_Gryo = fileAn.getX_Gyro();
y_Gyro = fileAn.getY_Gyro();
z_Gyro = fileAn.getZ_Gyro();
x_Acc = fileAn.getX_Acc();
y_Acc = fileAn.getY_Acc();
z_Acc = fileAn.getZ_Acc();
x_Magn = fileAn.getX_Magn();
y_Magn = fileAn.getY_Magn();
z_Magn = fileAn.getZ_Magn();
//JOptionPane.showMessageDialog(this, x_Gryo);
}
private void korel_butActionPerformed(java.awt.event.ActionEvent evt) {
if (x_Gryo_rb.isSelected()) {
if (x_Gryo == null) {
JOptionPane.showMessageDialog(this, "Данные в файле отсутствуют!");
} else {
build = new Build(sample, x_Gryo);
filter = new Filters(sample, x_Gryo, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
}
if (y_Gryo_rb.isSelected()) {
if (y_Gyro == null) {
JOptionPane.showMessageDialog(this, "Данные в файле отсутствуют!");
} else {
build = new Build(sample, y_Gyro);
filter = new Filters(sample, y_Gyro, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
}
if (z_Gryo_rb.isSelected()) {
if (z_Gyro == null) {
JOptionPane.showMessageDialog(this, "Данные в файле отсутствуют!");
} else {
build = new Build(sample, z_Gyro);
filter = new Filters(sample, z_Gyro, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
}
if (x_Acc_rb.isSelected()) {
if (x_Acc == null) {
JOptionPane.showMessageDialog(this, "Данные в файле отсутствуют!");
} else {
build = new Build(sample, x_Acc);
filter = new Filters(sample, x_Acc, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
}
if (y_Acc_rb.isSelected()) {
if (y_Acc == null) {
JOptionPane.showMessageDialog(this, "Данные в файле отсутствуют!");
} else {
build = new Build(sample, y_Acc);
filter = new Filters(sample, y_Acc, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
}
if (z_Acc_rb.isSelected()) {
if (z_Acc == null) {
JOptionPane.showMessageDialog(this, "Данные в файле отсутствуют!");
} else {
build = new Build(sample, z_Acc);
filter = new Filters(sample, z_Acc, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
}
if (x_Magn_rb.isSelected()) {
if (x_Magn == null) {
JOptionPane.showMessageDialog(this, "Данные в файле отсутствуют!");
} else {
build = new Build(sample, x_Magn);
filter = new Filters(sample, x_Magn, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
}
if (y_Magn_rb.isSelected()) {
if (y_Magn == null) {
JOptionPane.showMessageDialog(this, "Данные в файле отсутствуют!");
} else {
build = new Build(sample, y_Magn);
filter = new Filters(sample, y_Magn, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
}
if (z_Magn_rb.isSelected()) {
if (z_Magn == null) {
JOptionPane.showMessageDialog(this, "Данные в файле отсутствуют!");
} else {
build = new Build(sample, z_Magn);
filter = new Filters(sample, z_Magn, Double.parseDouble(start_text.getText()), Double.parseDouble(end_text.getText()));
}
}
double cor = filter.getCorel(Integer.parseInt(sm_text.getText()));
korel_text.setText(Double.toString(cor));
}
private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {
this.dispose();
}
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
String homeDir = "C:\\";
fileChooser.setCurrentDirectory(new File(homeDir));
fileChooser.showSaveDialog(this); //открывает диалоговое окно открытия
saveFile = fileChooser.getSelectedFile();
//System.out.println(saveFile.getName());
try {
saveFile.createNewFile();
try {
String text = new String("");
BufferedWriter out = new BufferedWriter(new FileWriter(saveFile));
BufferedReader in = new BufferedReader(new FileReader(openFile));
for (int i = 0; i <= 6; i++) {
text = in.readLine();
out.write(text);
out.newLine();
}
int n = 0;
if (x_Gryo_rb.isSelected()) {
n = 2;
}
if (y_Gryo_rb.isSelected()) {
n = 4;
}
if (z_Gryo_rb.isSelected()) {
n = 6;
}
if (x_Acc_rb.isSelected()) {
n = 8;
}
if (y_Acc_rb.isSelected()) {
n = 10;
}
if (z_Acc_rb.isSelected()) {
n = 12;
}
if (x_Magn_rb.isSelected()) {
n = 14;
}
if (y_Magn_rb.isSelected()) {
n = 16;
}
if (z_Magn_rb.isSelected()) {
n = 18;
}
ArrayList<Double> yFilters;
yFilters = filter.getyFilter();
String text2[];
int i = 0, j = 0;
while ((text = in.readLine()) != null) {
if (i >= Integer.parseInt(start_text.getText()) + 40) {
if (i <= Integer.parseInt(end_text.getText()) - 40) {
text2 = text.split(",");
//System.out.println(yFilters.get(j) + '\n');
//System.out.println(j);
String d = yFilters.get(j).toString();
text2[n] = d;
text = "";
for (int q = 0; q<text2.length; q++) {
text = text + text2[q] + ",";
}
out.write(text);
out.newLine();
//text = text + text2[2];
//text = text + text[2];
j++;
} else {
out.write(text);
out.newLine();
}
} else {
out.write(text);
out.newLine();
}
i++;
//System.out.println(text+'\n');
}
/*for (int i = 0; i < Integer.parseInt(start_text.getText())+2; i++) {
text = in.readLine();
out.write(text);
out.newLine();
}
try{
//System.out.println(yFilters);
for (int i = Integer.parseInt(start_text.getText()); i < Integer.parseInt(end_text.getText()); i++) {
text = in.readLine();
String[] text2 = text.split(",");
int n = -1;
String text3 = new String("");
//System.out.println(yFilters.size());
if (n == -1) {
out.write(text);
out.newLine();
} else {
for (int j = 0; j < 19; j++) {
if (n != j) {
text3 = text3 + text2[j];
text3 = text3 + ",";
} else {
text3 = text3 + yFilters.get(i);
text3 = text3 + ",";
}
}
out.write(text3);
out.newLine();
}
}
} catch (Exception e){
out.write(text);
out.newLine();
}
out.write("4,1,1.029922,"); out.newLine(); out.write("5,1,0.869934,"); out.newLine(); out.write("6,1,0.659950,"); out.newLine(); out.write("7,1,0.379971,"); out.newLine(); out.write("8,1,-0.179986,"); out.newLine(); out.write("9,1,-1.0699189,"); out.newLine();
for (int i = 0; i <6;i++){
in.readLine();
}
try {
for (int i = Integer.parseInt(end_text.getText())-2; i < 12; i++) {
text = in.readLine();
out.write(text);
out.newLine();
}
} catch (Exception e){
}*/
out.close();
in.close();
} catch (IOException e) {
}
} catch (IOException ex) {
Logger.getLogger(MainForm.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainForm().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.ButtonGroup buttonGroup2;
private javax.swing.JButton clear_but;
private javax.swing.JPanel draw_panel;
private javax.swing.JTextField end_text;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenuItem jMenuItem3;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JButton korel_but;
private javax.swing.JTextField korel_text;
private javax.swing.JButton paint_but;
private javax.swing.JRadioButton porfilter_rb;
private javax.swing.JTextField porog_text;
private javax.swing.JRadioButton sksrfilter_rb;
private javax.swing.JTextField sm_text;
private javax.swing.JTextField start_text;
private javax.swing.JRadioButton x_Acc_rb;
private javax.swing.JRadioButton x_Gryo_rb;
private javax.swing.JRadioButton x_Magn_rb;
private javax.swing.JRadioButton y_Acc_rb;
private javax.swing.JRadioButton y_Gryo_rb;
private javax.swing.JRadioButton y_Magn_rb;
private javax.swing.JRadioButton z_Acc_rb;
private javax.swing.JRadioButton z_Gryo_rb;
private javax.swing.JRadioButton z_Magn_rb;
// End of variables declaration
private void draw(int p) {
//try {
if (p >= 0) {
ArrayList<Double> xPoints = build.getxPoints();
ArrayList<Double> yPoints = build.getyPoints();
ArrayList<Double> xFilter = filter.getxFilter();
ArrayList<Double> yFilter = filter.getyFilter();
double yDiff = build.getyDiff();
double xDiff = build.getxDiff();
double maxY = build.getMaxY();
double minY = build.getMinY();
double maxX = build.getMaxX();
double minX = build.getMinX();
double div = build.getDiv();
//double maxmaxY = build.getMaxMax(x_Gryo, y_Gyro, z_Gyro, x_Acc, y_Acc, z_Acc, x_Magn, y_Magn, z_Magn);
//double minminY = build.getMinMin(x_Gryo, y_Gyro, z_Gyro, x_Acc, y_Acc, z_Acc, x_Magn, y_Magn, z_Magn);
//System.out.println(maxmaxY+" "+minminY+" "+maxX+" "+minX);
Graphics2D gr = (Graphics2D) draw_panel.getGraphics();
Font font = new Font("TimesRoman", Font.BOLD, 14);
gr.setFont(font);
if (yDiff < 10) {
for (int i = 0; i < yPoints.size(); i++) {
yPoints.set(i, yPoints.get(i) * 1000);
}
for (int i = 0; i < yFilter.size(); i++) {
yFilter.set(i, yFilter.get(i) * 1000);
}
yDiff = yDiff * 1000;
}
gr.translate(20, (int) ((draw_panel.getHeight() - 20) * div));
gr.scale((draw_panel.getWidth() - 40) / xDiff, (draw_panel.getHeight() - 40) / yDiff);
/*for (int i = 0; i <= maxY; i = i + 50) {
gr.drawLine((int) minX, -i, (int) maxX, -i);
}*/
/*for (int i = 0; i >= minY; i = i - 50) {
gr.drawLine((int) minX, -i, (int) maxX, -i);
}*/
/*for (int i = (int) minX; i <= maxX; i = i + 100) {
gr.drawLine(i, -(int) minY, i, -(int) maxY);
}*/
gr.setColor(Color.blue);
for (int i = 0; i < xPoints.size() - 1; i++) {
gr.drawLine((int) (double) xPoints.get(i), -(int) (double) yPoints.get(i), (int) (double) xPoints.get(i + 1), -(int) (double) yPoints.get(i + 1));
}
gr.setColor(Color.red);
for (int i = 0; i < xFilter.size() - 1; i++) {
gr.drawLine((int) (double) xFilter.get(i), -(int) (double) yFilter.get(i), (int) (double) xFilter.get(i + 1), -(int) (double) yFilter.get(i + 1));
}
} else {
JOptionPane.showMessageDialog(null, "Файл поврежден, нехватает параметров!", "Ошибка", JOptionPane.ERROR_MESSAGE);
}
//} catch (NullPointerException e) {
// JOptionPane.showMessageDialog(null, "Файл поврежден, нехватает параметров!","Ошибка",JOptionPane.ERROR_MESSAGE);
//}
}
}
Вывод:
В ходе выполнения лабораторной работы был изучен сенсорный комплекс систем локального позиционирования, получены навыки применения различных методов фильтрации а также вычисления коэффициентов корреляции сигналов.