Получение числовой зависимости критической частоты f0F2 ионосферного слоя F2 от времени t из динамического спектра f0F2(t) с помощью языка программирования C#
статья
Скачать:
Предварительный просмотр:
Получение числовой зависимости критической частоты f0F2 ионосферного слоя F2 от времени t из динамического спектра f0F2(t) с помощью языка программирования C#
Для изучения физических явлений зачастую используются спектральные анализ данных.
Спектр (лат. spectrum «видение») в физике – это распределение значений физической величины (обычно энергии, частоты или массы).
По характеру распределения значений физической величины спектры могут быть:
- дискретными (линейчатыми),
- непрерывными (сплошными),
- а также представлять комбинацию (наложение) дискретных и непрерывных спектров.
В своей работе мы часто используем зависимость частоты f0F2 (Гц) от времени T (часы, минуты) (изменение концентрации электронов в ионосфере).
Примерно это выглядит следующим образом.
Данные зависимости достаточно удобно использовать только в том случае если временной интервал частот лежит в больших временных масштабах, в противном случае провести анализ будет достаточно сложно. Но как правило, изучение зависимости f0F2(t), на больших временных масштабах не дает точного результата.
Для более точного прогнозирование космической погоды и крупномасштабных событий в Солнечно-Земной физике нам необходимо использовать в своих работах зависимости критической частоты f0F2 ионосферного слоя F2 от наименьшего временного интервала (минуты).
Станции вертикального зондирования ионосферного слоя F2, выдают максимум пятиминутные данные, что очень грубо влияют на расчеты.
В своей работе мы решили использовать динамическую зависимость критической f0F2 от времени T.
И в связи с этим у нас возник вопрос.
Как из данной спектральной зависимости получить числовые значения?
С появлением цифровых технологий все больше и больше приборов стали работать в режиме RGB.
RGB (аббревиатура английских слов red, green, blue красный, зелёный, синий) или КЗС — аддитивная цветовая модель, как правило, описывающая способ кодирования цвета для цветовоспроизведения с помощью трёх цветов, которые принято называть основными.
Выбор основных цветов обусловлен особенностями физиологии восприятия цвета сетчаткой человеческого глаза. Цветовая модель RGB нашла широкое применение в технике.
Аддитивной она называется потому, что цвета получаются путём добавления (англ. addition) к чёрному цвету. Иначе говоря, если цвет экрана, освещённого цветным прожектором, обозначается в RGB как (r1, g1, b1), а цвет того же экрана, освещённого другим прожектором, — (r2, g2, b2), то при освещении двумя прожекторами цвет экрана будет обозначаться как (r1+r2, g1+g2, b1+b2).
Изображение в данной цветовой модели состоит из трёх каналов. При смешении основных цветов, например, синего (B) и красного (R), получается пурпурный (M, magenta), зелёного (G) и красного (R) — жёлтый (Y, yellow), зелёного (G) и синего (B) — циановый (С, cyan). При смешении всех трёх основных цветов получается белый цвет (W, white).
- Для решения данной задачи данную зависимость f0F2(t), привели в безразмерный вид.
- Учитывая разрешение изображения и количество пикселей по вертикали 565 и горизонтали 167 нашли зависимость пикселей по высоте изображения к его ширине, что позволило получить нам 1440 точек по оси времени. На один пиксель по вертикале приходится примерно 0, 3 пикселя по горизонтали. А это значит, что 1440 пикселей соответствует 24 (часа в сутках) умножить на 60 (минут в часе). Таким образом мы получили минутные данные.
- Конвертировав изображение из jpg формата в bmp и инвертировав его в черно – белый цвет, мы пропустили полученное изображение через ранее нами написанный код на языке программирования C# и нашли максимальное значение критической частоты, а именно максимальные значения пикселей на данном диапазоне h(высоты) от l(длинны) изображения, записав их в виде матрицы зависимости частоты f0f2 (Герц) от времени t(минутах).
Код программы для оцифровки динамического спектра f0F2(t) в число представлен ниже:
namespace _Работа_с_изображением
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Bitmap bmp;
private int Gray;
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
// Загружаем изображение из выбранного файла
Image image = Image.FromFile(dialog.FileName);
int width = image.Width;
int height = image.Height;
pictureBox1.Width = width; // Подстраивается pictureBox под размер изображения
pictureBox1.Height = height;
// Создаем и загружаем изображение в формате bmp
bmp = new Bitmap(image, width, height);
// Записываем изображение в pictureBox1
pictureBox1.Image = bmp;
}
}
private void button2_Click(object sender, EventArgs e)
{
// Циклы для перебора всех пикселей на изображении
for (int i = 0; i < bmp.Width; i++)
for (int j = 0; j < bmp.Height; j++)
{
// Извлекаем в R значение красного цвета
int R = bmp.GetPixel(i, j).R;
// Извлекаем в G значение зеленого цвета
int G = bmp.GetPixel(i, j).G;
// Извлекаем в B значение синего цвета
int B = bmp.GetPixel(i, j).B;
// Высчитываем среднее арифметическое
int Gray = (R = G + B) / 3;
// Переводим число в значение цвета.
// 255 – показывает степень прозрачности.
// Остальные значения одинаковы
Color p = Color.FromArgb(255, Gray, Gray, Gray);
// Записываем цвет в текущую точку
bmp.SetPixel(i, j, p);
}
// Вызываем функцию перерисовки окна
Refresh();
}
private void button3_Click(object sender, EventArgs e)
{
Int32 n;
Int32 a;
n = pictureBox1.Width; // Длинна изображения
a = pictureBox1.Height; //Высота изображения
double Imin=255;
double t=0, v=0;
//-------------------------------------
System.IO.StreamWriter textFile = new System.IO.StreamWriter(@"D:\Частота.txt");
System.IO.StreamWriter textFile1 = new System.IO.StreamWriter(@"D:\Время.txt");
for (int i = 0; i < n; i++ )
{
Imin = 255;
for (int j = i; j <= i; j++)
{
//--------------------------------------
for (int k = 0; k < a; k++)
{
Gray = 0;
int R = bmp.GetPixel(j, k).R;
int G = bmp.GetPixel(j, k).G;
int B = bmp.GetPixel(j, k).B;
// Gray = (R = G + B) / 3;
Gray = R + G + B;
if (Gray < Imin)
{
Imin = Gray;
t = ((j * 1440) / pictureBox1.Width); // Взяты минуты
v = (16000 - ((16000 * k) / pictureBox1.Height));
}
}
Console.Write(v);
textFile.WriteLine(v);
Console.Write(t);
textFile1.WriteLine(t);
//-----------------------------------------
}
}
textFile.Close();
textFile1.Close();
textBox1.Text = Convert.ToString(t);
textBox2.Text = Convert.ToString(v);
//System.IO.StreamWriter textFile = new System.IO.StreamWriter(@"D:\Частота.txt");
//Console.Write(v);
//textFile.WriteLine(v);
//textFile.Close();
}
}
}
Таким образом мы научились получать зависимость критической частоты f0F2 от времени на малых интервалах времени, данная технология обработки динамических jpg спектров, полученных со станций вертикального зондирования ионосферного слоя F2, в дальнейшем позволит нам более точно прогнозировать космическую погоду и другие крупномасштабные события в Солнечно Земной физике.