Форум химиков
Как преобразовать интерферограму в ИК-спектр с Origin 8.5.1?
обсуждение вопросов физической химии и химической физики
physical chemistry and chemical physics: discussions for professionals
10 сообщений • Страница 1 из 1
Phenolphtalein Сообщения: 4 Зарегистрирован: Сб мар 17, 2012 1:31 am
Как преобразовать интерферограму в ИК-спектр с Origin 8.5.1?
Сообщение Phenolphtalein » Сб мар 17, 2012 1:41 am
Вопрос очень простой, имеется обычная интерферограмма с FTIR спектрометра, мне нужно перевести ее в ИК спектр с помощью Origin 8.5.1, но не могу понять как это сделать.
Поможете?
duke2003 Сообщения: 237 Зарегистрирован: Вс апр 30, 2006 6:03 pm
Re: Как преобразовать интерферограму в ИК-спектр с Origin 8.
Сообщение duke2003 » Сб мар 17, 2012 10:31 pm
Попробуйте сохранить (экспортировать) спектр программой в которой вы его обычно открываете в текстовой формат (на пример, *.csv), грубо говоря, 2 столбца данных. Полученный фаил вы сможете импортровать в Ориджин. Проверте, чтобы обе программы правильно определяли смысл точки и/или запятой в записи дробных чисел.
ЗЫ. Используя софт от OMNIC такого рода операции проходят без проблем.
MONSTA Сообщения: 2073 Зарегистрирован: Вт фев 20, 2007 11:36 am
Re: Как преобразовать интерферограму в ИК-спектр с Origin 8.
Сообщение MONSTA » Пн мар 19, 2012 12:16 pm
Эти FTIR спектрометры иногда спектры выдают не в виде двух колонок данных, а в виде одной Просто частота при съемке меняется с заданным шагом, вот они в начале пишут интервал частот и шаг приращения, а потом — только колонка оптической плотности. В Ёкселе такие данные легко разгоняются в стандартные два столбца, но там графика кошмарная. Столбцы данных Ёкселя можно скопипастить почти куда угодно, хоть в Ориджин, чтобы нормальный график построить. Проблем с таким копированием обычно нет, а если возникнут, то надо выбирать данные только по одному столбику. А еще лучше не весь столбик, щелкая по буковке, его обозначающей, а конкретно выделять именно ячейки с данными.
Вейвлет-анализ. Часть 3
При проведении CWT анализа средствами библиотеки PyWavelets (бесплатное программное обеспечение с открытым исходным кодом, выпущенное по лицензии MIT) возникают проблемы с визуализацией результата. Предложенная разработчиками тестовая программа по визуализации приведена в следующем листинге:
Листинг
import pywt import numpy as np import matplotlib.pyplot as plt t = np.linspace(-1, 1, 200, endpoint=False) sig = np.cos(2 * np.pi * 7 * t) + np.real(np.exp(-7*(t-0.4)**2)*np.exp(1j*2*np.pi*2*(t-0.4))) widths = np.arange(1, 31) cwtmatr, freqs = pywt.cwt(sig, widths, 'cmor1-1.5') plt.imshow(cwtmatr, extent=[-1, 1, 1, 31], cmap='PRGn', aspect='auto', vmax=abs(cwtmatr).max(), vmin=-abs(cwtmatr).max()) # doctest: +SKIP plt.show() # doctest: +SKIP
При работе с комплексными вейвлетами, например с ‘cmor1-1.5’, программа выдаёт ошибку:
File"C:\Users\User\AppData\Local\Programs\Python\Python36\lib\site-packages\matplotlib\image.py", line 642, in set_data raise TypeError("Image data cannot be converted to float") TypeError: Image data cannot be converted to float
Указанная ошибка, а так же сложности с выбором масштаба (widths) для обеспечения необходимого временного разрешения, затрудняют, особенно для начинающих пользователей, изучение CWT анализа, что и побудило меня к написанию данной статьи учебного характера.
Целью настоящей публикации является рассмотрение применения нового модуля визуализации scaleogram для анализа простых и специальных сигналов, а так же при использовании методов нормализации, логарифмического масштабирования и синтеза, которые позволяют получить дополнительную информацию при анализе временных рядов.
В статье использована информация из публикации “A gentle introduction to wavelet for data analysis”. В приведенных в указанной публикации листингах примеров исправлены ошибки, и каждый листинг примера приведен к законченному виду, что позволяет его использовать без ознакомления с предыдущими. Для вейвлет – анализа специальных сигналов использованы данные из базы примеров PyWavelets.
Вейвлет-скалограмма — это двумерное представление одномерных данных. На ось X наносится время, а на ось Y — шкала – результат вейвлет — преобразования сигнала соответствующее значению амплитуды сигнала в момент времени X. Аналитическое значение такого графического отображения сигнала состоит в том, что разрешение по времени отображается на оси Y, что даёт дополнительную информацию о динамических свойствах сигнала.
Вейвлет — скалограммы простых сигналов
1. Косинусоида с гауссовой огибающей (Заменяя вейвлеты. можно исследовать зависимость временного разрешения от масштаба):
Листинг
from numpy import* from pylab import* import scaleogram as scg import pywt # Заменяя вейвлеты, можно исследовать зависимость временного разрешения от масштаба # Без указания вейвлета программа использует вейвлет 'cmor1-1.5' #scg.set_default_wavelet('cmor1-1.5') #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') #Рассмотрим временную шкалу с 1 периодом / секунду ns = 1024 time =arange(ns) scales = scg.periods2scales( arange(1, 40) ) p1=10; periodic1 = cos(2*pi/p1*time) * exp(-((time-ns/2)/200)**2) fig1, ax1 = subplots(1, 1, figsize=(6.9,2.9)); lines = ax1.plot(periodic1); ax1.set_xlim(0, len(time)) ax1.set_title("Косинусоида с гаусовой огибающей") fig1.tight_layout() ax2 = scg.cws(periodic1, scales=scales, figsize=(6.9,2.9)); txt = ax2.annotate("p1=%s"%p1, xy=(100, 10), bbox=dict(boxstyle="round4", fc="w")) tight_layout() print("Вейвлет функция для преобразования сигнала:", scg.get_default_wavelet(), "(", pywt.ContinuousWavelet(scg.get_default_wavelet()).family_name, ")") show()
Вейвлет функция для преобразования сигнала: cmor1-1.5 ( Complex Morlet wavelets )


Периодический сигнал теперь появляется в виде горизонтальной непрерывной полосы в точке Y = p1, интенсивность которой изменяется в зависимости от амплитуды периодического сигнала.
Наблюдается некоторая нечеткость в обнаружении, поскольку ширина полосы не равна нулю, это связано с тем, что вейвлеты не обнаруживают одну частоту, а скорее полосу. Данный эффект связан с полосой пропускания вейвлета.
2. Последовательно добавляются три импульса с возрастающим периодом (Для рассмотрения периодических вариации в разных масштабах: анализ мульти разрешения):
Листинг
from numpy import* import pandas as pd from pylab import* import scaleogram as scg # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба # Без указания вейвлета программа использует вейвлет 'cmor1-1.5' #scg.set_default_wavelet('cmor1-1.5') #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') ##Рассмотрим временную шкалу с 1 периодом / секунду ns = 1024 time = arange(ns) scales = scg.periods2scales(arange(1, 40)) pulses = zeros(ns, dtype=float32) steps = linspace(0, ns, 8) periods = [10, 20, 40] for i in range(0,3): step_mask = (time > steps[i*2+1]) & (time < steps[i*2+2]) pulses += cos(2*pi/periods[i]*time) * step_mask fig1, ax1 = subplots(1, 1, figsize=(7,3)); lines = ax1.plot(pulses); ax1.set_xlim(0, len(time)); ax1.set_title("Три импульса запускаются в разное время"); ax1.set_xlabel("Time") fig1.tight_layout() ax2 = scg.cws(pulses, scales=scales, figsize=(7,3)) for i in range(0, 3): txt = ax2.annotate("p%d=%ds"%(i+1,periods[i]), xy=(steps[i*2]+20, periods[i]), bbox=dict(boxstyle="round4", fc="w")) ax2.plot(steps[i*2+1]*np.ones(2), ax2.get_ylim(), '-w', alpha=0.5) ax2.plot(steps[i*2+2]*np.ones(2), ax2.get_ylim(), '-w', alpha=0.5) tight_layout() show()


Импульсы появляются в ожидаемом месте Y, соответствующем их периодичности, они локализованы по частоте и во времени. Начало полосы и конец соответствуют импульсу.
Ширина полосы масштабируется с длиной периода. Это известное свойство вейвлет-преобразования: когда масштаб увеличивается, разрешение по времени уменьшается. Это также известно как компромисс между временем и частотой. Когда вы смотрите на спектрограмму такого типа, вы проводите много разрешающий анализ.
3. Три периодических колебания разной частоты одновременно (Вейвлет — анализ способен различить составляющие сигнала по частотам, если их отличия существенны):
Листинг
from numpy import* import pandas as pd from pylab import* import scaleogram as scg scg.set_default_wavelet('cmor1-1.5') # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') ##Рассмотрим временную шкалу с 1 периодом / секунду ns = 1024 time = arange(ns) scales = scg.periods2scales(arange(1, 40)) allwaves = np.zeros(ns, dtype=np.float32) periods = [10, 20, 40] for i in range(0,3): allwaves += cos(2*np.pi/periods[i]*time) fig1, ax1 = subplots(1, 1, figsize=(6.5,2)); lines = ax1.plot(allwaves); ax1.set_title("Три колебания одновременно") ax1.set_xlim(0, len(time)); ax1.set_xlabel("Время") fig1.tight_layout() ax2 = scg.cws(allwaves, scales=scales, figsize=(7,2)) tight_layout() show()


4. Периодический сигнал не синусоидальной формы (Рассматривается отличие в вейвлет — преобразованиях сигнала треугольной формы с периодом 30 секунд от ранее рассмотренных):
Листинг
from numpy import* from pylab import* import scipy.signal import scaleogram as scg scg.set_default_wavelet('cmor1-1.5') # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') ##Рассмотрим временную шкалу с 1 периодом / секунд ns = 1024 time = arange(ns) scales = scg.periods2scales(arange(1, 40)) ptri = 30.0 # period in samples raising = 0.8 # fraction of the period raising triangle = scipy.signal.sawtooth(time/ptri*2*pi, raising) # plot the signal fig1, ax1 = subplots(1, 1, figsize=(7,3)); lines = ax1.plot(triangle); ax1.set_xlim(0, len(time)) ax1.set_title("triangle wave increasing 80% of the time with a 30s period") fig1.tight_layout() # and the scaleogram ax2 = scg.cws(triangle, scales=scales, figsize=(7,3)); txt = ax2.annotate("first harmonic", xy=(100, 30), bbox=dict(boxstyle="round4", fc="w")) txt = ax2.annotate("second harmonic", xy=(100, 15), bbox=dict(boxstyle="round4", fc="w")) tight_layout() show()


Большая полоса — это первая гармоника. Вторая гармоника видна ровно в половине значения периода первой гармоники. Это ожидаемый результат для периодических несинусоидальных сигналов. Нечеткие вертикальные элементы появляются вокруг второй гармоники, которая слабее и имеет амплитуду 1/4 от первой для сигнала треугольной формы.
5. Гладкие импульсы (гауссианы) схожи с реальными структурами данных. (В этом примере показано, как использовать вейвлет — анализ для обнаружения локализованных изменений сигнала во времени):
Серия гладких импульсов с различными значениями сигмы:
Листинг
from numpy import* from pylab import* import scaleogram as scg scg.set_default_wavelet('cmor1-1.5') # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') ##Рассмотрим временную шкалу с 1 периодом / секунд ns = 1024 time = arange(ns) scales = scg.periods2scales(arange(1, 40)) # несколько гауссовских импульсов с учетом сигмы s1=1; s2=5; s3=10 events = [ns*0.1, ns*0.3, ns*0.7] bumps = exp(-((time-events[0])/s1)**2) + exp(-((time-events[1])/s2)**2) + \ exp(-((time-events[2])/s3)**2) # несколько шагов с учетом полуширины w1=1; w2=5; w3= 50 steps = ((time > events[0]-w1) & (time < events[0]+w1)) + \ ((time >events[1]-w2) & (time < events[1]+w2)) + \ ((time >events[2]-w3) & (time < events[2]+w3)) # график импульсов fig1, (ax1, ax2) = subplots(1, 2, figsize=(11, 2)); ax1.set_title("Bumps"); ax2.set_title("Steps") lines = ax1.plot(bumps); ax1.set_xlim(0, len(time)) lines = ax2.plot(steps); ax2.set_xlim(0, len(time)) fig1.tight_layout() # и скалограмма scales_bumps = scg.periods2scales(arange(1, 120, 2) ) fig2, (ax3, ax4) = subplots(1, 2, figsize=(14,3)); ax3 = scg.cws(bumps, scales=scales_bumps, ax=ax3) ax4 = scg.cws(steps, scales=scales_bumps, ax=ax4) for bmpw, stepw in [(2*s1, 2*w1), (2*s2,2*w2), (2*s3, 2*w3)]: ax3.plot(ax3.get_xlim(), bmpw*ones(2), 'w-', alpha=0.5) ax4.plot(ax4.get_xlim(), stepw*ones(2), 'w-', alpha=0.5) fig2.tight_layout() show()


Дискретные импульсы создают конусообразные структуры на сиалограмме, которые также известны как конус влияния. Гладкие импульсы (гауссианы) схожи с реальными структурами данных и создают конусы, расширяющиеся в сторону больших масштабов. Горизонтальные направляющие линии приблизительно соответствуют периодам времени (2 с, 10 с, 20 с). Следовательно, импульс похож на периодический сигнал с одним периодом.
6. Шум (Отображение шума на сиалограмме):
Листинг
from numpy import* from pylab import* import scaleogram as scg import random scg.set_default_wavelet('cmor1-1.5') # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') #Рассмотрим временную шкалу с 1 периодом / секунду ns = 1024 time =arange(ns) scales = scg.periods2scales( arange(1, 40) ) noise =random.sample(range(ns), ns) fig1, ax1 = plt.subplots(1, 1, figsize=(6.2,2)); ax1.set_title("Последовательность псевдослучайных чисел") lines = ax1.plot(time, noise) ax1.set_xlim(0, ns) fig1.tight_layout() ax2 = scg.cws(noise, scales=scales, figsize=(7,2)) tight_layout() show()


Шум обычно отображается в виде набора элементов, а некоторые неровности могут выглядеть как объекты реальных данных, поэтому при использовании реальных данных необходимо соблюдать осторожность, и, при необходимости, проверить уровень шума. Верхний график будет отличатся при каждом запуске программы.
Вейвлет скалограммы специальных сигналов
В базе данных PyWavelets содержаться двадцать специальных сигналов вейвлет преобразования которых будут полезны как для изучения, так и для разработки. Поэтому приведу листинг позволяющий провести вейвлет анализ всех двадцати сигналов:
Листинг
#!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as np from pylab import* import scaleogram as scg import pywt signals = pywt.data.demo_signal('list') signal_length=1024 for signal in signals: if signal in ['Gabor', 'sineoneoverx']: x = pywt.data.demo_signal(signal) else: x = pywt.data.demo_signal(signal, signal_length) times=[] signals=[] for time, sig in enumerate(x.real): times.append(time) signals.append(sig) scg.set_default_wavelet('cmor1-1.5') scales = scg.periods2scales( arange(1, 40) ) fig1, ax1 = subplots(1, 1, figsize=(6.9,2.9)); lines = ax1.plot(signals); ax1.set_xlim(0, len(times)) ax1.set_title("%s"%signal) fig1.tight_layout() ax2 = scg.cws(signals, scales=scales, figsize=(6.9,2.9)); tight_layout() show()
Приведу только один результат вейвлет преобразования Доплеровского сигнала:


Рассмотрены наиболее распространённые разновидности простых и специальных сигналов, что позволяет перейти к использованию скалограммы для решения некоторых задач анализа временных рядов.
Вейвлет скалограммы временных рядов
1. CDC данные о рождаемости в США 1969-2008 (Данные о рождаемости содержат периодические особенности, как в годовом масштабе так и в меньшем):
Листинг
import pandas as pd import numpy as np from pylab import* import scaleogram as scg from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #По умолчанию используется вейвлет 'cmor1-1.5' #scg.set_default_wavelet('cmor1-1.5') #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') #удалить аномальные данные df = df[(df.day>=1) & (df.day <=31) & (df.births.values >1000)] # преобразование дат datetime = pd.to_datetime(df[['year', 'month', 'day']], errors='coerce') df.insert(0, 'datetime', datetime) datetime_lim = [ df.datetime.min(), df.datetime.max() ] years_lim = [ df.datetime.min().year, df.datetime.max().year ] births = df[['datetime', 'births']].groupby('datetime').sum().squeeze() def set_x_yearly(ax, days, start_year=1969): xlim = (np.round([0, days]) / 365).astype(np.int32) ticks = np.arange(xlim[0], xlim[1]) ax.set_xticks(ticks*365) ax.set_xticklabels(start_year + ticks) fig = figure(figsize=(12,2)) lines = plot(births.index, births.values/1000, '-') xlim(datetime_lim) ylabel("Nb of birthes [k]"); title("Total births per day in the US (CDC)"); xlim = xlim() ax = scg.cws(births, figsize=(13.2, 4), xlabel="Year", ylabel="Nb of Day") set_x_yearly(ax, len(births)) show()


Горизонтальная линия появляется с периодичностью около 7 дней. Высокие значения появляются вблизи границ шкалы, что является нормальным поведением вейвлет — обработки. Эти эффекты хорошо известны как конус влияния, именно поэтому (необязательная) маска накладывается на эту область.
2. Нормализация (Удаление среднего значения -births_normed = births-births.mean() является обязательным, в противном случае границы данных рассматриваются как этапы, которые создают много ложных конусовидных обнаружений):
Листинг
import pandas as pd import numpy as np from pylab import* import scaleogram as scg from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #По умолчанию используется вейвлет 'cmor1-1.5' #scg.set_default_wavelet('cmor1-1.5') #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') df = pd.read_csv("births.csv") #удалить аномальные данные df = df[(df.day>=1) & (df.day <=31) & (df.births.values >1000)] # преобразование дат datetime = pd.to_datetime(df[['year', 'month', 'day']], errors='coerce') df.insert(0, 'datetime', datetime) datetime_lim = [ df.datetime.min(), df.datetime.max() ] years_lim = [ df.datetime.min().year, df.datetime.max().year ] births = df[['datetime', 'births']].groupby('datetime').sum().squeeze() def set_x_yearly(ax, days, start_year=1969): xlim = (np.round([0, days]) / 365).astype(np.int32) ticks = np.arange(xlim[0], xlim[1]) ax.set_xticks(ticks*365) ax.set_xticklabels(start_year + ticks) births_normed = births-births.mean() ax = scg.cws(births_normed, figsize=(13.2, 4), xlabel="Year", ylabel="Nb of Day") set_x_yearly(ax, len(births)) show()

3. Cмена масштаба по амплитуде (Чтобы увидеть годовые объекты, с помощью period2scales () уточняется масштаб по оси Y.):
Листинг
import pandas as pd import numpy as np from pylab import* import scaleogram as scg from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #По умолчанию используется вейвлет 'cmor1-1.5' #scg.set_default_wavelet('cmor1-1.5') #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') df = pd.read_csv("births.csv") #удалить аномальные данные df = df[(df.day>=1) & (df.day <=31) & (df.births.values >1000)] # преобразование дат datetime = pd.to_datetime(df[['year', 'month', 'day']], errors='coerce') df.insert(0, 'datetime', datetime) datetime_lim = [ df.datetime.min(), df.datetime.max() ] years_lim = [ df.datetime.min().year, df.datetime.max().year ] births = df[['datetime', 'births']].groupby('datetime').sum().squeeze() def set_x_yearly(ax, days, start_year=1969): xlim = (np.round([0, days]) / 365).astype(np.int32) ticks = np.arange(xlim[0], xlim[1]) ax.set_xticks(ticks*365) ax.set_xticklabels(start_year + ticks) births_normed = births-births.mean() scales = scg.periods2scales(np.arange(1, 365+100, 3)) ax = scg.cws(births_normed, scales=scales, figsize=(13.2, 5), xlabel="Year", ylabel="Nb of Day", clim=(0, 2500)) set_x_yearly(ax, len(births)) show()

Диапазон амплитуд цветовой карты (ось Y) теперь задается параметром clim = (0,2500). Точное значение для амплитуды колебаний зависит от вейвлета, но будет оставаться близко к порядку действительного значения. Это намного лучше, теперь мы очень хорошо видим годовую вариацию, а также примерно 6 месяцев!
4. Использование логарифмической шкалы (Чтобы можно было видеть маленькие и большие периоды одновременно, лучше использовать логарифмическую шкалу на оси Y. Это достигается с помощью опции xscale = log.)
Листинг
import pandas as pd import numpy as np from pylab import* import scaleogram as scg from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #По умолчанию используется вейвлет 'cmor1-1.5' #scg.set_default_wavelet('cmor1-1.5') #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') df = pd.read_csv("births.csv") #удалить аномальные данные df = df[(df.day>=1) & (df.day <=31) & (df.births.values >1000)] # преобразование дат datetime = pd.to_datetime(df[['year', 'month', 'day']], errors='coerce') df.insert(0, 'datetime', datetime) datetime_lim = [ df.datetime.min(), df.datetime.max() ] years_lim = [ df.datetime.min().year, df.datetime.max().year ] births = df[['datetime', 'births']].groupby('datetime').sum().squeeze() def set_x_yearly(ax, days, start_year=1969): xlim = (np.round([0, days]) / 365).astype(np.int32) ticks = np.arange(xlim[0], xlim[1]) ax.set_xticks(ticks*365) ax.set_xticklabels(start_year + ticks) births_normed = births-births.mean() scales = scg.periods2scales(np.arange(1, 365+100, 3)) ax = scg.cws(births_normed, scales=scales, figsize=(13.2, 4), xlabel="Year", ylabel="Nb of Day", clim=(0,2500), yscale='log') set_x_yearly(ax, len(births)) print("Number of available days:", len(births_normed)) show()

Результат намного лучше, но теперь пиксели при низких значениях периодов вытянуты вдоль оси Y.
5. Равномерное распределение по логарифмической шкале( Чтобы получить однородное распределение по шкале, значения периода должно быть равномерно распределено, а затем преобразовано в значения шкалы, как показано ниже:):
Листинг
import pandas as pd import numpy as np from pylab import* import scaleogram as scg from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #По умолчанию используется вейвлет 'cmor1-1.5' #scg.set_default_wavelet('cmor1-1.5') #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') df = pd.read_csv("births.csv") #удалить аномальные данные df = df[(df.day>=1) & (df.day <=31) & (df.births.values >1000)] # преобразование дат datetime = pd.to_datetime(df[['year', 'month', 'day']], errors='coerce') df.insert(0, 'datetime', datetime) datetime_lim = [ df.datetime.min(), df.datetime.max() ] years_lim = [ df.datetime.min().year, df.datetime.max().year ] births = df[['datetime', 'births']].groupby('datetime').sum().squeeze() def set_x_yearly(ax, days, start_year=1969): xlim = (np.round([0, days]) / 365).astype(np.int32) ticks = np.arange(xlim[0], xlim[1]) ax.set_xticks(ticks*365) ax.set_xticklabels(start_year + ticks) births_normed = births-births.mean() # использовать значения логарифмических интервалов при использовании оси log-Y-axis :-) scales = scg.periods2scales(np.logspace(np.log10(2), np.log10(365*3), 200)) # сохранить CWT в объекте, чтобы избежать пересчета для следующих участков cwt = scg.CWT(births_normed, scales=scales) ax = scg.cws(cwt, figsize=(13.2, 4), xlabel="Year", ylabel="Nb of Day", clim=(0,2500), yscale='log') set_x_yearly(ax, len(births)) bboxf = dict(boxstyle="round", facecolor="y", edgecolor="0.5") arrowpropsf = dict(facecolor='yellow', shrink=0.05) text = ax.annotate("unusual\nfeature", xy=(365*6, 15), xytext=(365*3, 50), bbox=bboxf, arrowprops=arrowpropsf) show()

Мы можем видеть изменения сигнала на всех масштабах. Сиалограмма показывает каждый год в одинаковых периодах.
6. Выделение части шкалы времени (Проверка наличия промежуточных данных между отметками шкалы времени в поисках артефактов или отсутствующих данных.):
Листинг
import pandas as pd import numpy as np from pylab import* import scaleogram as scg import pywt from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #По умолчанию используется вейвлет 'cmor1-1.5' #scg.set_default_wavelet('cmor1-1.5') #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') df = pd.read_csv("births.csv") #удалить аномальные данные df = df[(df.day>=1) & (df.day <=31) & (df.births.values >1000)] # преобразование дат datetime = pd.to_datetime(df[['year', 'month', 'day']], errors='coerce') df.insert(0, 'datetime', datetime) datetime_lim = [ df.datetime.min(), df.datetime.max() ] years_lim = [ df.datetime.min().year, df.datetime.max().year ] births = df[['datetime', 'births']].groupby('datetime').sum().squeeze() def set_x_yearly(ax, days, start_year=1969): xlim = (np.round([0, days]) / 365).astype(np.int32) ticks = np.arange(xlim[0], xlim[1]) ax.set_xticks(ticks*365) ax.set_xticklabels(start_year + ticks) births_normed = births-births.mean() # использовать значения логарифмических интервалов при использовании оси log-Y-axis :-) scales = scg.periods2scales(np.logspace(np.log10(2), np.log10(365*3), 200)) # использовать значения логарифмических интервалов при использовании оси log-Y-axis :-) cwt = scg.CWT(births_normed, scales=scales) # увеличить на два года: 1974-1976 fig = figure(figsize=(12,4)) lines =plot(births.index, births.values/1000, '-') xlim(pd.to_datetime("1974-01-01"), pd.to_datetime("1976-01-01")) ylabel("Nb of birthes [k]"); title("Total births per day bw 1974 and 1976"); # перерисовать предыдущую масштабограмму с увеличением ax = scg.cws(cwt, figsize=(13.2, 4), xlabel="Year", ylabel="Nb of Day", clim=(0,2500), yscale='log') set_x_yearly(ax, len(births)) xlim = ax.set_xlim( (1974-1969)*365, (1976-1969)*365 ) show()

На первый взгляд, еженедельные модели выглядят очень равномерно, но что-то происходит на Рождество, давайте еще раз рассмотрим этот период:
Листинг
import pandas as pd import numpy as np from pylab import* import scaleogram as scg import pywt from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #По умолчанию используется вейвлет 'cmor1-1.5' #scg.set_default_wavelet('cmor1-1.5') #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') df = pd.read_csv("births.csv") #удалить аномальные данные df = df[(df.day>=1) & (df.day <=31) & (df.births.values >1000)] # преобразование дат datetime = pd.to_datetime(df[['year', 'month', 'day']], errors='coerce') df.insert(0, 'datetime', datetime) datetime_lim = [ df.datetime.min(), df.datetime.max() ] years_lim = [ df.datetime.min().year, df.datetime.max().year ] births = df[['datetime', 'births']].groupby('datetime').sum().squeeze() def set_x_yearly(ax, days, start_year=1969): xlim = (np.round([0, days]) / 365).astype(np.int32) ticks = np.arange(xlim[0], xlim[1]) ax.set_xticks(ticks*365) ax.set_xticklabels(start_year + ticks) births_normed = births-births.mean() # использовать значения логарифмических интервалов при использовании оси log-Y-axis :-) scales = scg.periods2scales(np.logspace(np.log10(2), np.log10(365*3), 200)) # использовать значения логарифмических интервалов при использовании оси log-Y-axis :-) cwt = scg.CWT(births_normed, scales=scales) #Изменить масштабы: декабря 1975 года и января 1976 года fig = figure(figsize=(12,4)) lines = plot(births.index, births.values/1000, '.-') xlim(pd.to_datetime("1974-12-01"), pd.to_datetime("1975-02-01")) ylabel("Nb of birthes [k]"); title("Total births per day : 2 monthes zoom"); # перерисовать предыдущую масштабограмму с увеличением ax = scg.cws(cwt, figsize=(13.2, 4), xlabel="Year", ylabel="Nb of Day", clim=(0,2500), yscale='log') set_x_yearly(ax, len(births)) xlim = ax.set_xlim( (1975-1969)*365-30, (1975-1969)*365+30 ) show()


Теперь ясно, что это эффект конца года:
- Рождество: 23/24/25 декабря показывает аномально низкое число рождений, и эти дни отклоняются от недельного графика;
- Есть данные за декабрь, что согласуется с наличием некоторого значения для затронутых дат 1-е и 2-е января, в эти даты обычно меньше личных событий
Листинг
import pandas as pd import numpy as np from pylab import* import scaleogram as scg import pywt from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() # Заменяя вейвлеты можно исследовать зависимость временного разрешения от масштаба #По умолчанию используется вейвлет 'cmor1-1.5' #scg.set_default_wavelet('cmor1-1.5') #scg.set_default_wavelet('cgau5') #scg.set_default_wavelet('cgau1') #scg.set_default_wavelet('shan0.5-2') #scg.set_default_wavelet('mexh') df = pd.read_csv("births.csv") #удалить аномальные данные df = df[(df.day>=1) & (df.day <=31) & (df.births.values >1000)] # преобразование дат datetime = pd.to_datetime(df[['year', 'month', 'day']], errors='coerce') df.insert(0, 'datetime', datetime) datetime_lim = [ df.datetime.min(), df.datetime.max() ] years_lim = [ df.datetime.min().year, df.datetime.max().year ] births = df[['datetime', 'births']].groupby('datetime').sum().squeeze() def set_x_yearly(ax, days, start_year=1969): xlim = (np.round([0, days]) / 365).astype(np.int32) ticks = np.arange(xlim[0], xlim[1]) ax.set_xticks(ticks*365) ax.set_xticklabels(start_year + ticks) births_normed = births-births.mean() # использовать значения логарифмических интервалов при использовании оси log-Y-axis :-) scales = scg.periods2scales(np.logspace(np.log10(2), np.log10(365*3), 200)) # использовать значения логарифмических интервалов при использовании оси log-Y-axis :-) cwt = scg.CWT(births_normed, scales=scales) ax = scg.cws(cwt, figsize=(13.2, 4), xlabel="Year", ylabel="Nb of Day", clim=(0,2500), yscale='log') set_x_yearly(ax, len(births)) bbox = dict(boxstyle="round", facecolor="w", edgecolor="0.5") bbox2 = dict(boxstyle="round", facecolor="y", edgecolor="0.5") arrowprops = dict(facecolor='white', shrink=0.05) arrowprops2 = dict(facecolor='yellow', shrink=0.05) for period, label in [ (3.5, "half a week"), (7, "one week"), (365/2, "half a year"), (365, "one year"), (365*2.8, "long trends")]: text = ax.annotate(label, xy=(365*5.5, period), xytext=(365*2, period), bbox=bbox, arrowprops=arrowprops) text = ax.annotate("end of year\neffect", xy=(365*6, 15), xytext=(365*3, 50), bbox=bbox2, arrowprops=arrowprops2) text = ax.annotate("increase in\nvariations *amplitude*", xy=(365*18.5, 7), xytext=(365*14, 50), bbox=bbox2, arrowprops=arrowprops2) show()

CWT раскрывает много информации за короткий промежуток времени:
Еженедельная вариация, показывающая привычки в больницах, присутствует в течение нескольких десятилетий;
В 80-х годах наблюдается увеличение недельного показателя, который может быть вызван изменением рабочих привычек больниц, изменением рождаемости или простым изменением населения;
Вторая полоса в полугодии — это явно вторая гармоника. Нечеткие модели появляются в зоне от 3 до 1 месяца, что может быть связано с третьей гармоникой, поскольку годовые колебания настолько сильны. Это также может быть вызвано влиянием праздников на рождаемость и может потребовать дальнейшего изучения;
Эффект конца года был отмечен на Рождество и 1 января. Этот, возможно, остался невидимым с другим частотным методом.
Выводы:
В этой публикации мы увидели, как базовый вид вариаций сигнала переводится на скалограмму. Затем был использован пример упорядоченного по времени набора данных, чтобы шаг за шагом продемонстрировать, как CWT применяется к стандартным данным.
Приведенная методика может быть расширена для анализа сетевого трафика и для обнаружения необычного поведения объектов. CWT — это мощный инструмент, который все чаще используется в качестве входных данных для нейронных сетей и может использоваться для создания новых функций с целью классификации или обнаружения аномалий.
Каждый пример реализован в виде самостоятельной программы, что позволяет выбрать пример под свою задачу, не вникая в предыдущие и последующие примеры. Пользователь может попробовать любые вейвлет – функции из списка приведенного в начале каждой программы, например, такие как mexh или gaus5. Для примера 1 соответственно:


P.S. Для практического использования листингов приведу версии используемых в них модулей:
>>> import scaleogram; print(scaleogram .__version__) 0.9.5 >>> import pandas; print(pandas .__version__) 0.24.1 >>> import numpy; print(numpy .__version__) 1.16.1 >>> import matplotlib; print(matplotlib .__version__) 3.0.2
Для самостоятельного набора данных в файл *.csv привожу структуру данных(в одном столбце):
year,month,day,gender,births
1969,1,1,F,4046
1969,1,1,M,4440
1969,1,2,F,4454
1969,1,2,M,4548
…
Для версии 0.24.1 pandasс потребуется явно регистрировать конвертеры matplotlib.
Чтобы зарегистрировать конвертеры:
from pandas.plotting import register_matplotlib_converters register_matplotlib_converters()
- вейвлет функция
- CWT преобразование
- временной ряд
- Scaleogram
- PyWavelets
Лайфхак: сохранить файл как изображение

Вам нужно отправить одностраничный тест ученику через WhatsApp, при этом неизвестно, откроется ли у него текстовый документ? Сохраните документ как изображение – и картинка точно отобразится прямо в мессенджере. Для сохранения у нас есть отдельная опция.
Новая опция и ее применение
Мы как-то уже писали, что благодаря оригинальности нашей разработки мы не просто копируем популярные функции, но и реализуем полезные мелочи, которых до нас просто не было. И возможность экспорта документа в виде изображений формата PNG и JPG – как раз одна из них. Опция появилась с выходом обновления 7.4.0, о котором вы можете прочесть в отдельном материале.
Почему мы вообще считаем, что это будет полезно? Мы знаем это из общения с пользователями наших редакторов, из ваших откликов и отзывов.
Что такое экспорт в виде изображений? Просто-напросто сохранение каждой страницы текстового документа или электронной таблицы в виде картинки в общую папку. На самом деле ранее это уже было реализовано для презентаций, так что оставалось распространить практику на два оставшихся редактора.
Когда может быть полезно:
- вы хотите использовать эскизы страниц, возможно в отчете для руководства или в какой-нибудь заявке, где нужно продемонстрировать, что объем-то большой, но при этом сразу не отдавать на чтение (пока заявку не одобрят),
- внутри своего документа (например, вставить заглавные разделов как иконки в описании структуры книги),
- вы не хотите, чтобы кто-то легко скопировал ваш текст (понятно, что инструментов оптического распознавания много, но как «защита от дурака» вполне подойдет).
Эти три примера плюс тот, с которого мы начали пост, лишь немногое из того, что мы знаем, но уверены, что практика предложит вам гораздо больше задач.
Как сохранить документ в формате рисунка
Заходим во вкладку «Файл», выбираем «Сохранить как». Открывается диалоговое окно «Сохранить как». Раскрываем выпадающий список раздела «Тип файла», в самом низу видим пункты «Изображение PNG» и «Изображение JPG». Кликните нужный и не забудьте про кнопку «Сохранить». Хотя забыть вы не сможете — пока открыто это диалоговое окно, ничего больше делать нельзя.

Примечание. Для эскизов страниц вам не важно, какой формат выбрать. Но если вдруг встал вопроса качества, есть общая рекомендация: много текста – выбирай PNG, есть фото – выбирай JPG. Либо попробуйте оба варианта и сделайте собственный выбор.

С текстовым редактором все совсем просто – каждая страница сохраняется отдельно, можно сразу брать и использовать. В случае с таблицами есть нюанс: на практике массивы никогда не помещаются на одну страницу. Скорее всего один лист разобьется на множество картинок, так что подумайте, что вы хотите получить. Возможно, имеет смысл поменять ориентацию страниц.
Хотите знать больше полезных мелочей? Посмотрите наши посты по разным редакторам:
- Опции специальной вставки слайдов в презентации
- 4 смешные функции офисных редакторов
- Как сделать интерфейс редактора удобнее
Пробуете ли вы все новинки или ограничиваетесь необходимыми по работе функциями? Используете ли нашу базу знаний с инструкциями? О чем еще вам хотелось бы почитать? Пишите удобным для вас способом в VK или в Telegram, а также оставляйте комментарии ниже. Всё прочтем и ответим!
Как сохранить спектр в png в ориджине

dakishi assistant
Сообщения: 120 Зарегистрирован: 05 сен 2019, 21:01 Версия LabVIEW: 2019 Контактная информация:
При снятии спектра с синусоиды - несущая частота не та
Сообщение dakishi » 05 дек 2019, 21:59
Добрый вечер!
Можете подсказать в чём здесь дело ? Я создаю сигнал (синусоиду с частотой 0.01 Hz - несущей частотой, например - см. рисунок), разлагаю в Фурье спектр при помощи FFT Power Spectrum and PSD и основная мощность в спектре, в итоге, приходится на 10 Hz (max index(ex) на рисунке) - как это возможно ? С использованием инструмента из той же палитры, выделяющего мнимую и реальную часть (второй рисунок) получается и того хуже - шум.


expert
Сообщения: 1236 Зарегистрирован: 21 фев 2011, 23:44 Награды: 2 Версия LabVIEW: 2013-2020 Благодарил (а): 23 раза Поблагодарили: 30 раз Контактная информация:
Re: При снятии спектра с синусоиды - несущая частота не та
Сообщение Kosist » 06 дек 2019, 01:08
Функция возвращает кластер из 3-х составляющих: начальную частоту f0, шаг частоты df и мощность. Поэтому найдя индекс максимальной мощности N, соответсвующую частоту Вы найдете как f = f0 + N*df. Вы так определили, что это 10 Hz?
Мы делили апельсин - много наших полегло.

dakishi assistant
Сообщения: 120 Зарегистрирован: 05 сен 2019, 21:01 Версия LabVIEW: 2019 Контактная информация:
Re: При снятии спектра с синусоиды - несущая частота не та
Сообщение dakishi » 10 дек 2019, 20:27
Kosist писал(а): Функция возвращает кластер из 3-х составляющих: начальную частоту f0, шаг частоты df и мощность. Поэтому найдя индекс максимальной мощности N, соответсвующую частоту Вы найдете как f = f0 + N*df. Вы так определили, что это 10 Hz?
Работает, но когда частота выше порога, идет неправильный расчёт. В данном случае реальная частота 3, а по FFT 4, причина, очевидно, в шуме на FFT - можете обьяснить, почему это происходит ?

zxc_pavel adviser
Сообщения: 241 Зарегистрирован: 02 июн 2016, 12:07 Версия LabVIEW: 15 Благодарил (а): 9 раз Поблагодарили: 23 раза Контактная информация:
Re: При снятии спектра с синусоиды - несущая частота не та
Сообщение zxc_pavel » 10 дек 2019, 21:08
Он вообще отрицательный у Вас, это не спектр, а действ. часть комплексного представления.
Поставьте или магнитуду или корень из суммы квадратов re и im, как на картинке

Andrey Petrzhik user
Сообщения: 81 Зарегистрирован: 17 ноя 2015, 11:57 Версия LabVIEW: 12 Благодарил (а): 4 раза Контактная информация:
Re: При снятии спектра с синусоиды - несущая частота не та
Сообщение Andrey Petrzhik » 02 фев 2022, 23:11
А подскажите пожалуйста что делать если данные для FFT - это не сигнал, т.е. условный синус с шумами, а набор точек X-Y двумя столбиками, где X - это координата, а Y - измеряемая величина? Причём шаг по X немного плавает.
Т.е. как загнать для FFT функцию с неким постоянным шагом dX из 1 колонки ASCII файла - вроде понятно, но как учесть переменный шаг? Спасибо большое за подсказку!
P.S. Хитрый пакет Origin как-то делает FFT 2-столбчатых данных, но как именно - не говорит. А я хочу прогу сделать, чтобы ASCII файлы по клику мышки открывались на просмотр, и тут же определялся период (если есть) понижения тока (дефектов).

Andrey Petrzhik user
Сообщения: 81 Зарегистрирован: 17 ноя 2015, 11:57 Версия LabVIEW: 12 Благодарил (а): 4 раза Контактная информация:
Re: При снятии спектра с синусоиды - несущая частота не та
Сообщение Andrey Petrzhik » 02 фев 2022, 23:37
Чтобы было нагляднее что же я хочу.
ASCII файлик тоже приложил (в rar, а то великоват), вдруг у кого будет время поиграться.
Вложения #2577_13_322_Ag05__NC.rar (297.15 КБ) 34 скачивания

zxc_pavel adviser
Сообщения: 241 Зарегистрирован: 02 июн 2016, 12:07 Версия LabVIEW: 15 Благодарил (а): 9 раз Поблагодарили: 23 раза Контактная информация:
Re: При снятии спектра с синусоиды - несущая частота не та
Сообщение zxc_pavel » 03 фев 2022, 10:03
Можно сплайном делать выравнивание по шагу
Вложения 0302.vi (30.88 КБ) 36 скачиваний

Andrey Petrzhik user
Сообщения: 81 Зарегистрирован: 17 ноя 2015, 11:57 Версия LabVIEW: 12 Благодарил (а): 4 раза Контактная информация:
Re: При снятии спектра с синусоиды - несущая частота не та
Сообщение Andrey Petrzhik » 03 фев 2022, 11:10
О! Спасибо большое! А можно для полного счастья в Labview 2012 сохранить?
Да, и ещё небольшой шаг. а как мне 1/f построить по оси x?
Если бы строился XY graph, я просто массив X-ов беру и 1/x делаю, а тут как?
К сожалению пока не вкурил чё там в кластере, может всё и очевидно конечно.

zxc_pavel adviser
Сообщения: 241 Зарегистрирован: 02 июн 2016, 12:07 Версия LabVIEW: 15 Благодарил (а): 9 раз Поблагодарили: 23 раза Контактная информация:
Re: При снятии спектра с синусоиды - несущая частота не та
Сообщение zxc_pavel » 03 фев 2022, 11:28
Там в кластере, который на waveform graph идет 3 элемента: x0, dx, массив игреков. Конечно, можно сделать 1/dx.
Сохранил в 12
Вложения 0302-v12.vi (22.74 КБ) 35 скачиваний

Andrey Petrzhik user
Сообщения: 81 Зарегистрирован: 17 ноя 2015, 11:57 Версия LabVIEW: 12 Благодарил (а): 4 раза Контактная информация:
Re: При снятии спектра с синусоиды - несущая частота не та
Сообщение Andrey Petrzhik » 03 фев 2022, 13:29
Что-то не придумал как покрасивее сделать 1/f из f. но вроде правильно должно быть.
Картинка уже близка к нужной, но периоды немного "уплыли", см. например пик 77.30, выделенный на финальном графике, да и видны все пики менее явно чем в Origin.
Где-то слыхал, что магнитуда - это не амплитуда, но в labview не пойму что лучше выбрать (Real-Im оператор даёт тот же результат).
Буду рад мудрым советам:)
Вложения 0302-v12AMP.vi (34.25 КБ) 38 скачиваний

Andrey Petrzhik user
Сообщения: 81 Зарегистрирован: 17 ноя 2015, 11:57 Версия LabVIEW: 12 Благодарил (а): 4 раза Контактная информация:
Re: При снятии спектра с синусоиды - несущая частота не та
Сообщение Andrey Petrzhik » 03 фев 2022, 18:25
Усп, прошу прощения. пики совпадают, фон только другой + шума больше. Ну и интенсивности пиков просели.
(как-то не аккуратно выделил видать пики в LV)
Осталось чуть-чуть, фильтр какой-нить запихнуть или усреднение?
11 сообщений • Страница 1 из 1
Похожие темы
Последнее сообщение BAS « 22 ноя 2023, 23:45
Добавлено в форуме Для чайников
Ответы: 7
BAS » 22 ноя 2023, 16:09 » в форуме Для чайников
Последнее сообщение seromax « 11 янв 2024, 09:47
Добавлено в форуме Для чайников
Ответы: 2
varvik85 » 10 янв 2024, 22:20 » в форуме Для чайников
Последнее сообщение Boxa « 21 фев 2023, 16:51
Добавлено в форуме Для чайников
Ответы: 3
Boxa » 21 фев 2023, 16:34 » в форуме Для чайников
Последнее сообщение rsv « 30 мар 2023, 14:51
Добавлено в форуме Коммуникация с приборами
Ответы: 3
rsv » 29 мар 2023, 17:30 » в форуме Коммуникация с приборами
Последнее сообщение jane_wild « 25 апр 2023, 19:37
Добавлено в форуме Для чайников
Ответы: 19
jane_wild » 21 апр 2023, 16:49 » в форуме Для чайников
- Форум инженеров
- ↳ Русский
- ↳ Магазин
- ↳ Готовые комплексы сбора данных
- ↳ CompactRIO
- ↳ Контроллеры cRIO
- ↳ Модули cRIO
- ↳ Шасси cRIO
- ↳ Главный форум
- ↳ Новости
- ↳ Для чайников
- ↳ Общие
- ↳ Железо
- ↳ Софт
- ↳ Наука
- ↳ Коммуникация с приборами
- ↳ Обработка сигнала
- ↳ Лицевая панель
- ↳ Сохранение данных
- ↳ Работа с графикой и звуком
- ↳ Модели программирования
- ↳ Создание приложений
- ↳ Среды разработки
- ↳ Коммуникация с приложениями
- ↳ Проекты
- ↳ Actor Framework
- ↳ Пакеты программ для инженеров и их расширения
- ↳ Расширения NI LabVIEW
- ↳ LIFA
- ↳ Report Generation / Diadem
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ Statechart
- ↳ GPU Analysis Toolkit
- ↳ NI Requirements Gateway
- ↳ TestStand
- ↳ Языки программирования
- ↳ Robotics
- ↳ Multisim
- ↳ Прочее
- ↳ Конкурсы
- ↳ Библиотека инженера
- ↳ Курсы и сертификация
- ↳ Объявления
- ↳ Поздравления
- ↳ Обо всём на свете
- ↳ Olympiad 2020 / Олимпиада 2020
- ↳ Вебсайт и форум
- ↳ Анонсы
- ↳ Отклики
- ↳ Предложения
- ↳ Интервью с форумчанами
- ↳ Партнёрские организации и дочерние проекты
- ↳ Developlabs
- ↳ ЭПИ МИСиС
- ↳ Проекты
- ↳ ООО "ПромТех"
- ↳ Продукция
- ↳ ООО "Прикладная кибернетика"
- ↳ ТехноАрт
- ↳ WorldSkills Russia
- ↳ Грузинский Технический Университет - სტუ - საქართველოს ტექნიკური უნივერსიტეტი
- ↳ Deutsch
- ↳ LabVIEW
- ↳ News
- ↳ Für Anfänger
- ↳ Allgemein
- ↳ Kommunikation mit Geräten
- ↳ Signalverarbeitung
- ↳ Front panel
- ↳ Datenspeicherung
- ↳ Arbeiten mit Grafik und Sound
- ↳ Programmiermuster
- ↳ Application Builder
- ↳ Entwicklungsumgebung
- ↳ Kommunikation mit Applikationen
- ↳ Projekte
- ↳ Module / Toolkits
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ Sonstiges
- ↳ Wettbewerbe
- ↳ LabVIEW Bücher
- ↳ Kurse und Zertifikation
- ↳ Programmiersprachen
- ↳ Software
- ↳ Hardware
- ↳ Arbeitsmarkt
- ↳ Marktplatz
- ↳ Über alles mögliche
- ↳ Webseite und Forum
- ↳ Ankündigungen
- ↳ Rückmeldungen
- ↳ Vorschläge
- ↳ English
- ↳ LabVIEW
- ↳ News
- ↳ For beginners
- ↳ General
- ↳ Communcation with devices
- ↳ Signal processing
- ↳ Front panel
- ↳ Data storage
- ↳ Working with graphic and sound
- ↳ Design patterns
- ↳ Application builder
- ↳ Development environment
- ↳ Communication with applications
- ↳ Projects
- ↳ Moduls / Toolkits
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ Miscellaneous
- ↳ Contests
- ↳ LabVIEW books
- ↳ Training and certification
- ↳ Programming languages
- ↳ Software
- ↳ Hardware
- ↳ Employment
- ↳ Market
- ↳ Offtopic
- ↳ Website and forum
- ↳ Announcements
- ↳ Feedback
- ↳ Suggestions
- ↳ Український
- ↳ LabVIEW
- ↳ Новини
- ↳ Для чайників
- ↳ Загальний
- ↳ Комунікація з пристроями
- ↳ Обробка сигналу
- ↳ Лицьова панель
- ↳ Збереження даних
- ↳ Робота з графікою і звуком
- ↳ Моделі програмування
- ↳ Створення додатків
- ↳ Середовище розробки
- ↳ Комунікація з додатками
- ↳ Проекти
- ↳ Модулі / Тулкіти
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ NI Requirements Gateway
- ↳ Інше
- ↳ Конкурси
- ↳ Книги по LabVIEW
- ↳ Курси і сертифікація
- ↳ Мови програмування
- ↳ Софт
- ↳ Хард
- ↳ Біржа праці
- ↳ Оголошення
- ↳ Балачка
- ↳ Вебсайт і форум
- ↳ Анонси
- ↳ Відгуки
- ↳ Пропозиції
- ↳ Italiano
- ↳ LabVIEW
- ↳ News
- ↳ Per principianti
- ↳ Generale
- ↳ Comunicazione con dispositivi
- ↳ Gestione dei segnali
- ↳ Panello frontale
- ↳ Salvataggio dati
- ↳ Lavorare con grafica
- ↳ Modelli di programmazione
- ↳ Application Builder
- ↳ Ambiente di sviluppo
- ↳ Comunicazione con applicazioni
- ↳ Progetti
- ↳ Moduli / Toolkits
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ Altro
- ↳ Concorsi
- ↳ Libri LabVIEW
- ↳ Corsi e certificazione
- ↳ Linguaggi di programmazione
- ↳ Software
- ↳ Hardware
- ↳ Mercato di lavoro
- ↳ Piazza di mercato
- ↳ Un po di tutto
- ↳ Pagina web e forum
- ↳ Annunci
- ↳ Feedback
- ↳ Proposte
- ↳ العربية
- ↳ لاب فيو
- ↳ آخر خبرية
- ↳ ساحة المبتدئين
- ↳ ساحة لاب فيو العامة
- ↳ الإتصال بالمعدات
- ↳ معالجة الإشارة
- ↳ الواجهة الأمامية / Frontpanel
- ↳ تخزين البيانات
- ↳ جرافيك
- ↳ نسوق برمجة
- ↳ إنشاء التطبيقات
- ↳ تطوير بيئة لاب فيو
- ↳ الإتصال بالتطبيقات
- ↳ مشاريعك
- ↳ وحدات برمجة / أدوات برمجة
- ↳ مرئيات / IMAQ
- ↳ تقارير لحظية / FPGA / Embedded
- ↳ لاب ويندوز /CVI/ ستوديو القياس
- ↳ المساعد الشخصي / بالم / شاشات اللمس
- ↳ تعديل الإشارة
- ↳ حركة / تضميم
- ↳ حقل التجارب
- ↳ Statechart وحدة
- ↳ تنفيذ التقارير / دياديم
- ↳ متفرقات
- ↳ مسابقات
- ↳ مكتبة لاب فيو
- ↳ التدريب و الشهادات
- ↳ لغات برمجة
- ↳ برمجيات
- ↳ هاردوير
- ↳ فرص عمل
- ↳ مبيع و شراء
- ↳ ساحة المواضيع الأخرى
- ↳ حول الموقع و المنتدى
- ↳ تبليغات إدارية
- ↳ ملاحظات
- ↳ إقتراحات
- ↳ القسم الإداري
- ↳ Қазақша
- ↳ LabVIEW
- ↳ Жаңалықтар
- ↳ Шәйнектер үшін
- ↳ Жалпы
- ↳ Саймандар
- ↳ Бағдарлама
- ↳ Ғылым
- ↳ Аспаптармен байланыстыру
- ↳ Дабылды өңдеу
- ↳ Бет панелі
- ↳ Мәліметтерді сақтау
- ↳ Графика және дыбыспен жұмыс жасау
- ↳ Бағдарлама нұсқалары
- ↳ Қосымшаларды жасау
- ↳ Жасау ортасы
- ↳ Қосымшалармен байланыстыру
- ↳ Жобалар
- ↳ עִבְרִית
- ↳ LabVIEW
- ↳ LabView חדשות לגבי
- ↳ למתחילים
- ↳ כללי
- ↳ תקשרת עם מכשירים
- ↳ עיבוד אותות
- ↳ לוח קדמי
- ↳ אחסון מידע
- ↳ עבודה עם גרפים
- ↳ עיצוב דוגמאות
- ↳ בניית תוכנה
- ↳ סביבה מפותחת
- ↳ תקשרת ותוכנות
- ↳ פרויקטים
- ↳ Toolkits
- ↳ Vision / IMAQ
- ↳ Հայերեն
- ↳ LabVIEW
- ↳ Նորություններ
- ↳ Սկսնակների համար
- ↳ Ընդհանուր
- ↳ Հաղորդակցում սարքերի միջոցով
- ↳ Ազդանշանի վերլուծություն
- ↳ Արտաքին վահանակ
- ↳ Տվյալների պահպանում
- ↳ Աշխատանք գրաֆիկայի և ձայնի միջոցով
- ↳ Ծրագրավորման մոդելներ
- ↳ Ծրագրերի ստեղծում
- ↳ Զարգացման միջավայր
- ↳ Հաղորդակցում ծրագրերի միջոցով
- ↳ Նախագծեր
- ↳ Մոդուլներ / Գործիքներ
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ LEGO Mindstorms
- ↳ Multisim
- ↳ Այլ
- ↳ Մրցույթներ
- ↳ LabVIEW-ի վերաբերյալ գրքեր
- ↳ Դասընթացներ և Հավաստագրում
- ↳ Ծրագրավորման լեզուներ
- ↳ Ծրագրեր
- ↳ Սարքավորումներ
- ↳ Թափուր աշխատատեղեր
- ↳ Հայտարարություններ
- ↳ Աշխարհում ամեն ինչի մասին
- ↳ Վեբկայք և ֆորում
- ↳ Տեղեկատու
- ↳ Հետադարձ կապ
- ↳ Առաջարկներ
- ↳ Մոդերատորի բաժին
- ↳ Խմբեր
- ↳ Freelance
- ↳ Ուսանողներ
- ↳ Դասավանդողներ
- ↳ Բլոգերներ
- ↳ Polski
- ↳ LabVIEW
- ↳ Aktualności
- ↳ Dla początkujących
- ↳ Ogólne
- ↳ Komunikacja z urządzeniami
- ↳ Przetwórstwo sygnału
- ↳ Panel czołowy (Front Panel)
- ↳ Zapisywanie danych
- ↳ Praca z grafiką i dźwiękiem
- ↳ środowisko programistyczne
- ↳ połączenie z aplikacjami
- ↳ Projekty
- ↳ Moduły/narzędzia
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ Modulation
- ↳ Multisim
- ↳ Inne
- ↳ Konkursy
- ↳ Podręczniki po LabVIEW
- ↳ Kursy i certyfikacja
- ↳ Giełda pracy
- ↳ Ogłoszenia
- ↳ O wszystkim
- ↳ Strona internetowa i forum
- ↳ Anonsy
- ↳ Propozycje
- ↳ 中文
- ↳ LabVIEW/虚拟仪器
- ↳ 新闻
- ↳ 新手入门
- ↳ 概述
- ↳ 设备控制与数据交换
- ↳ 信号处理
- ↳ 前面板
- ↳ 数据存储
- ↳ 图象处理
- ↳ 设计模式
- ↳ 应用程序生成器
- ↳ 开发环境
- ↳ 应用程序的沟通
- ↳ 工程项目
- ↳ 模块 / 工具包
- ↳ 视觉 / IMAQ
- ↳ 实时/ FPGA / 嵌入式系统
- ↳ LabWindows / CVI / 测量工作室
- ↳ PDA / Palm / 触摸屏
- ↳ 调制
- ↳ 方案 / PID
- ↳ 测试状态
- ↳ 状态
- ↳ 报告生成 / Diadem
- ↳ 其他
- ↳ 竞赛
- ↳ LabVIEW 书籍
- ↳ 培训和认证
- ↳ 编程语言
- ↳ 软件
- ↳ 硬件
- ↳ 求职信息
- ↳ 市场信息
- ↳ 无所不能
- ↳ 站点论坛
- ↳ 公告
- ↳ 反馈
- ↳ 意见建议
- ↳ 版主交流
- ↳ Eesti
- ↳ LabVIEW
- ↳ Uudised
- ↳ Võhikutele
- ↳ Üldine
- ↳ Seadmete kommunikatsioon
- ↳ Signaalitöötlus
- ↳ Esipaneel
- ↳ Andmete salvestamine
- ↳ Graafikaga ja heliga töötamine
- ↳ Programmeerimise mudelid
- ↳ Rakenduste loomine
- ↳ Arengukeskkond
- ↳ Kommunikatsioon tarkvaraga
- ↳ Projektid
- ↳ Moodulid/toolkitid
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ Modulation
- ↳ LEGO Mindstorms
- ↳ Multisim
- ↳ NI WSN
- ↳ LIFA
- ↳ Muu
- ↳ Konkursid
- ↳ LabVIEW raamatud
- ↳ Kursused ja sertifikaadid
- ↳ Programmeerimiskeeled
- ↳ Tarkvara
- ↳ Riistvara
- ↳ Teadus
- ↳ Tööbörs
- ↳ Kuulutused
- ↳ Õnnitlused
- ↳ Räägime kõigest
- ↳ Veebisait ja foorum
- ↳ Teated
- ↳ Tagasisede
- ↳ Pakkumised
- ↳ Intervjuu foorumi kasutajatega
- ↳ Français
- ↳ LabVIEW
- ↳ News
- ↳ Pour les débutants
- ↳ Courant
- ↳ La communication avec des périphériques
- ↳ Traitement du signal
- ↳ Front panel
- ↳ Stokage de données
- ↳ Travailler avec des graphiques
- ↳ Modelè de programmation
- ↳ Application Builder
- ↳ Environnement de développement
- ↳ Communication avec les applications
- ↳ Projets
- ↳ Modules/ boîtes à outils
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ D'autres choses
- ↳ Concourses
- ↳ Livres de LabVIEW
- ↳ Cours et la certification
- ↳ Langues de programmation
- ↳ Software
- ↳ Hardware
- ↳ Marché du travail
- ↳ Place de marchè
- ↳ Sur d'autres choses
- ↳ Web site et forum
- ↳ Annonces
- ↳ Retour
- ↳ Propositions
- ↳ Olympiads / Олимпиады
- ↳ Olympiad 2020
- ↳ Olympiad 2021
- Список форумов
- Часовой пояс: UTC+03:00
- Удалить cookies
- Связаться с администрацией