Железо в Linux: Как узнать подробности оборудования в Linux?



25 коммент.
Задача: требуется узнать подробности о работе оборудования в Linux для сборки ядра или установки нового оборудования в Linux.
Решение: благодаря тому, что в Линуксе очень хорошо ведётся протоколирование работы системы, это совсем не сложно.

Часто, особенно при настройке нового оборудования в Linux или решения проблем со старым, требуется знать подробности об устройстве: фирма-изготовитель, марка и другие опознавательные знаки устройства. Несмотря на то, что современные графические интерфейсы навороченных сред типа KDE и GNOME могут с этим справиться, иногда проще написать одну маленькую команду, чем долго искать вкладки и кнопки.

Здесь на конкретных примерах будет показано, как найти информацию об устройствах в Linux, пользуясь мощью командной строки - это совсем не сложно, а заодно сильно продвинетесь в познании того, что же запихал производитель в эту маленькую гудящую коробку :-)


1. Ищем сведения об устройстве в Linux с помощью lspci
Весьма распространённая проблема на ноутбуках - кардридеры от дядюшки Ляо, к которым даже не знаешь, как подступиться. Сначала нужно выяснить производителя устройства и потом как оно называется.

Для этого в консоли от простого пользователя пишем:
lspci
В результате будет выведена информация об устройствах, подключённых к шине PCI, как и следует из названия утилиты. Ищем среди строк что-то, что содержит SD или MMC - то, что должен читать кардридер (в данном примере это именно он).

00:00.0 Host bridge: Intel Corporation Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (rev 04)
00:02.0 VGA compatible controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 04)
00:02.1 Display controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 04)
00:1b.0 Audio device: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller (rev 04)
00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 04)
00:1d.1 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 (rev 04)
00:1d.2 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 (rev 04)
00:1d.3 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 (rev 04)
00:1d.7 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 04)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev d4)
00:1f.0 ISA bridge: Intel Corporation 82801FBM (ICH6M) LPC Interface Bridge (rev 04)
00:1f.1 IDE interface: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller (rev 04)
01:03.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev b3)
01:03.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C552 IEEE 1394 Controller (rev 08)

01:03.2 Generic system peripheral [0805]: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 17)
01:03.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 08)
01:04.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
01:05.0 Network controller: Intel Corporation PRO/Wireless 2200BG Network Connection (rev 05)



Устройство, напоминающее кардридер в диагностических строках - это Ricoh SD Host Adapter (прим.: Выделение серым и полужирным - моё). Теперь есть довольно подробная информация об устройстве, которая структурирована так:


01:03.2 Generic system peripheral [0805]: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 17)

Идентификатор (Device ID), Класс (Class), Производитель (Vendor), Наименование устройства (Device), Ревизия (Revision).


Как видно, всё весьма логично и понятно - по крайней мере настолько, насколько это позволяет обратиться к Гуглу и поинтересоваться у него насчёт поддержки устройства в Линукс.

Можно получить дополнительную информацию по устройству, которая может быть иногда полезна при устранении проблем с работой оборудования. Для этого нужно воспользоваться подробным (verbose) режимом работы программы:
lspci -v
Вывод будет очень длинным, но то, что относится к рассматриваемому в примере устройству, будет выглядеть так:

01:03.2 Generic system peripheral [0805]: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 17)
Subsystem: ASUSTeK Computer Inc. Unknown device 1997
Flags: bus master, medium devsel, latency 64, IRQ 21
Memory at fe8fe400 (32-bit, non-prefetchable) [size=256]
Capabilities: [80] Power Management version 2

Отсюда можно узнать, например, номер IRQ, на котором висит устройство.


1.1 Устройства с подключением по USB в
Linux
Аналогичная команда есть и для USB-устройств, что тоже весьма полезно, например, при подключении USB-IR или USB-Bluetooth устройств. Так вы узнаете точную марку устройства. Вот, например, Bluetooth адаптер, на котором написано только Billington, видится так:
lsusb
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 002: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000


Можно так же заметить, что помимо синезубого адаптера, сейчас подключена ещё и оптическая мышка с колёсиком от Logitech.


1.2 Расширенная информация о конфигурации железа с помощью lshw в
Linux
Эта утилита по умолчанию, как правило, не устанавливается, но в репозиториях она должна быть (есть в Дебиане 4 ставится при помощи aptitude install lshw). Утилита lshw выводит структурированный список оборудования вместе с информацией об устройствах. Например, простой запуск от пользователя:
lshw
даёт много пищи для размышлений:
notebeast
description: Computer
width: 32 bits
*-core
description: Motherboard
physical id: 0
*-memory
description: System memory
physical id: 0
size: 495MB
*-cpu
product: Intel(R) Pentium(R) M processor 1.73GHz
vendor: Intel Corp.
physical id: 1
bus info: cpu@0
version: 6.13.8
size: 1729MHz
capacity: 1729MHz
width: 32 bits
capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe nx est tm2 cpufreq
*-pci
description: Host bridge
product: Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller
vendor: Intel Corporation
physical id: 100
bus info: pci@00:00.0
version: 04
width: 32 bits
clock: 33MHz
*-display:0
description: VGA compatible controller
product: Mobile 915GM/GMS/910GML Express Graphics Controller
vendor: Intel Corporation
physical id: 2
bus info: pci@00:02.0
version: 04
size: 256MB
width: 32 bits
clock: 33MHz
capabilities: vga bus_master cap_list
configuration: latency=0
resources: iomemory:feb80000-febfffff ioport:ec00-ec07 iomemory:d0000000-dfffffff iomemory:feb40000-feb7ffff irq:20
<...>


Список длинный, поэтому приведена только часть. Очень полезно для анализа оборудования.



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

Лог dmesg как правило очень длинный и изобилует подробностями работы с оборудованием. Читать его полностью довольно утомительно, поэтому стоит воспользоваться потоковой утилитой поиска grep. Например, чтобы узнать подробности о процессоре, нужно написать:
dmesg | grep CPU
SLUB: Genslabs=22, HWalign=64, Order=0-1, MinObjects=4, CPUs=1, Nodes=1
CPU: After generic identify, caps: afe9fbff 00100000 00000000 00000000 00000180 00000000 00000000
CPU: L1 I cache: 32K, L1 D cache: 32K
CPU: L2 cache: 2048K
CPU: After all inits, caps: afe9fbff 00100000 00000000 00002040 00000180 00000000 00000000
Intel machine check reporting enabled on CPU#0.
CPU: Intel(R) Pentium(R) M processor 1.73GHz stepping 08
ACPI: CPU0 (power states: C1[C1] C2[C2])
ACPI: Processor [CPU1] (supports 8 throttling states)
Switched to high resolution mode on CPU 0
Use X86_ACPI_CPUFREQ (acpi-cpufreq) instead.

Так можно многое узнать о работе своего железа. Эта информация может пригодиться при сборке своего ядра и \или устранении проблем (последние строки dmesg содержат информацию о том, что происходило недавно с системой). Именно поэтому на форумах требуют выкладывать логи системы - это и есть исчерпывающая информация о работе вашей системы и её оборудовании.

Лог dmesg и многие другие логи хранятся в /var/log/ хотя часть из них доступна только привилегированному пользователю - пользуйтесь sudo.


3. Ищем сведения об устройстве с помощью /proc в
Linux
Файловая система /proc на самом деле является "слепком" состояния системы и её переменных, там хранится множество полезных сведений о системе. Например, уровень заряда батарей ноутбука и скорости вращения вентиляторов, информация о подключённых устройствах - и многое другое.

Чтобы просмотреть файлы в директории /proc делаем так:
ls /proc/
В ответ получите список файлов, в которых хранится информация о текущем состоянии системы. Например, чтобы узнать подробности о процессоре, можно написать:
cat /proc/cpuinfo
В результате чего имеем весьма подробную информацию о процессоре:

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 13
model name : Intel(R) Pentium(R) M processor 1.73GHz
stepping : 8
cpu MHz : 1729.000
cache size : 2048 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe nx est tm2
bogomips : 3459.64
clflush size : 64



Здесь же, в каталоге /proc, хранятся и обновляются сведения о скоростях вращения вентиляторов, заряде батарей и прочих ACPIшных радостях (если оные поддерживаются для вашего оборудования ядром). Вот, к примеру, как можно узнать состояние батарей ноутбука:
cat /proc/acpi/battery/BAT0/info
Отсюда берут данные все графические утилиты мониторинга, типа klaptop_check (в KDE висит в трее и показывает состояние батареи). Вот что там имеется:

present: yes
design capacity: 50600 mWh
last full capacity: 51381 mWh
battery technology: rechargeable
design voltage: 11100 mV
design capacity warning: 5060 mWh
design capacity low: 2530 mWh
capacity granularity 1: 506 mWh
capacity granularity 2: 506 mWh
model number: S5-2P24
serial number:
battery type: LIon
OEM info: ASUSTEK

Как видно, весьма полезная, и главное - постоянно обновляемая информация.



4. Ищем сведения о жёстком диске в
Linux
Сведения о ёмкости и геометрии винчестера можно получить при помощи fdisk, запущенном от рута или через sudo:

# fdisk -l /dev/hda

Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 36 289138+ 82 Linux swap / Solaris
/dev/hda2 * 37 7296 58315950 83 Linux



Если требуется получить более глубокие сведения о возможностях винчестера, например о поддержке им DMA или S.M.A.R.T, потребуется утилита hdparm, включённая в состав (почти?) всех современных дистрибутивов. Она так же требует рутовых полномочий, и обращаться с ней нужно весьма осторожно (использование параметров без чёткого понимания того, что вы делаете, может привести к потере данных). Так, например, можно запросить информацию о винчестере и его возможностях:

sudo hdparm -I /dev/hda
/dev/hda:

ATA device, with non-removable media
Model Number: HTS421260H9AT00
Serial Number: HKA210AJGKHV1B
Firmware Revision: HA2OA70G
Standards:
Used: ATA/ATAPI-7 T13 1532D revision 1
Supported: 7 6 5 4
Configuration:
Logical max current
cylinders 16383 65535
heads 16 1
sectors/track 63 63
--
CHS current addressable sectors: 4128705
LBA user addressable sectors: 117210240
LBA48 user addressable sectors: 117210240
device size with M = 1024*1024: 57231 MBytes
device size with M = 1000*1000: 60011 MBytes (60 GB)
Capabilities:
LBA, IORDY(can be disabled)
Standby timer values: spec'd by Vendor, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Advanced power management level: 128 (0x80)
Recommended acoustic management value: 128, current value: 254
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
* Write cache
* Look-ahead
* Host Protected Area feature set
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
* Advanced Power Management feature set
Power-Up In Standby feature set
* SET_FEATURES required to spinup after power up
Address Offset Reserved Area Boot
SET_MAX security extension
* Automatic Acoustic Management feature set
* 48-bit Address feature set
* Device Configuration Overlay feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* WRITE_{DMA|MULTIPLE}_FUA_EXT
* 64-bit World wide name
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
46min for SECURITY ERASE UNIT.
HW reset results:
CBLID- above Vih
Device num = 0 determined by the jumper
Checksum: correct


Здесь можно видеть не только размер и геометрию винчестера, но и то, что DMA для диска активирован (стоит udma5) и возможности S.M.A.R.T (самотестирование) поддерживается.

Так же можно узнать о состоянии винчестера при помощи утилит hddtemp и smartctl. Например, текущую температуру винчестера можно узнать так:
# hddtemp /dev/hda

/dev/hda: HTS421260H9AT00: 33°C
Возможный выход винчестера из строя помогает засечь команда smartctl, с помощью которой можно протестировать жёсткий диск:
# smartctl -a /dev/hda
Диагностический вывод здесь тоже весьма подробный, вот только часть:

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000b 100 100 062 Pre-fail Always - 0
2 Throughput_Performance 0x0005 100 100 040 Pre-fail Offline - 0
3 Spin_Up_Time 0x0007 206 206 033 Pre-fail Always - 2
4 Start_Stop_Count 0x0012 099 099 000 Old_age Always - 1719
5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always - 0
7 Seek_Error_Rate 0x000b 100 100 067 Pre-fail Always - 0
8 Seek_Time_Performance 0x0005 100 100 040 Pre-fail Offline - 0
9 Power_On_Hours 0x0012 088 088 000 Old_age Always - 5549
10 Spin_Retry_Count 0x0013 100 100 060 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 875
191 G-Sense_Error_Rate 0x000a 100 100 000 Old_age Always - 0
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 2
193 Load_Cycle_Count 0x0012 071 071 000 Old_age Always - 299291
194 Temperature_Celsius 0x0002 166 166 000 Old_age Always - 33 (Lifetime Min/Max 11/43)
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 1
197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0008 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x000a 200 200 000 Old_age Always - 0




5. Считываем информацию о BIOS с помощью dmidecode в
Linux
Причиной множества мелких пакостей может быть BIOS или его настройки, особенно на ноутбуках. В Линукс имеется несколько утилит для чтения информации о BIOS, например dmidecode. Здесь можно узнать о точном названии и версии BIOS, возможностях BIOS и другой интересной информации. Пишем от рута:
# dmidecode
и в результате получаем, например, такие сведения:

# dmidecode 2.8
SMBIOS 2.3 present.
34 structures occupying 1318 bytes.
Table at 0x000F8DD0.

Handle 0x0000, DMI type 0, 20 bytes
BIOS Information
Vendor: American Megatrends Inc.
Version: 0205
Release Date: 06/10/2005
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 512 kB
Characteristics:
ISA is supported
PCI is supported
PC Card (PCMCIA) is supported
PNP is supported
BIOS is upgradeable
BIOS shadowing is allowed
ESCD support is available
Boot from CD is supported
Selectable boot is supported
BIOS ROM is socketed
EDD is supported
5.25"/360 KB floppy services are supported (int 13h)
5.25"/1.2 MB floppy services are supported (int 13h)
3.5"/720 KB floppy services are supported (int 13h)
3.5"/2.88 MB floppy services are supported (int 13h)
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
ACPI is supported
USB legacy is supported
AGP is supported
LS-120 boot is supported
ATAPI Zip drive boot is supported
BIOS boot specification is supported
Function key-initiated network boot is supported

Весьма познавательно, и не нужно перезагружаться и входить в BIOS.

Ссылки
Так же стоит обратить внимание на замечательную статью
Как получить информацию от железе компьютера, не покидая терминала.
Читать далее

Цифровые фотокамеры Canon: характеристики и документация



6 коммент.
Те, кто занимается астрономией или оптикой, часто используют обычные зеркальные камеры. Параметрых этих камер - большая тайна, но кое-что раскопать всё-таки удаётся.
Спецификации, они же White Papers, есть правда разной степени сермяжности о том, что же засунул производитель в фотокамеру. Особенно волнует многих вопрос насчёт сенсоров и его характеристик. Относительно Canon огорчу: они делают сенсоры сами и делиться относительно параметров сенсоров, похоже, не намерены.

Тем не менее, кое-что можно найти в этих доступных материалах. Выкладываю ссылки на спецификации камер, которые мне удалось накопать при помощи всезнающего Гугла:

Огромное спасибо комментатору Павлу за дополнительные ссылки!

А вот это есть просто кладезь полезного и интересного: не жалейте мегабайтов трафика, друзья, ибо это есть подробное описание полнокадрового CMOS сенсора, который разработали ребята из Canon (Full Frame CMOS sensor). Там без кучи формул, на простом языке говорится, почему они перешли на CMOS и как отважно они решали свои проблемы.
Читать далее

Цифровые камеры Canon EOS 400D и 40D - так ли они отличаются?



22 коммент.
Не так давно вышла новая цифровая камера от Canon - Canon EOS 40D. Было анонсировано, кроме прочего, наличие 14-битного АЦП. Думаю, что многие загорелись возможностью купить такую цифровую камеру и использовать её для измерительных целей: такая же техническая камера стоит раз в 30 дороже. Однако позже выяснилось горькая правда - внутри установлена та же самая матрица и, есть обоснованные подозрения, что и сходное АЦП. В переводе на русский это означает, что дополнительные биты вы получите ценой усиления шума, что сводит на нет всю прелесть 14-битного АЦП.

Полученные данные позволяют утверждать, что в цифровых камерах Canon EOS 400D и 40D установлены фотосенсоры одной и той же модели. Более того, возможно, что к АЦП на камере 40D двухступенчатый, на что указывает график зависимости стандартного отклонения темнового шума от значения ISO. Многие параметры фотосенсора, например, BLO (Black Level Offset), стандартное отклонение шума, величина сигнала при насыщении, особенности зависимости сигнала от шума при некоторых значениях освещённости говорят о том, что в 40D и 400D установлены идентичные фотосенсоры. На это же намекают в whitepaper на камеру 40D:
Although the EOS 40D’s single-piece CMOS sensor is based on the Canon EOS Digital Rebel XTi’s sensor design and manufacturing technology, new processes were incorporated in the CMOS semiconductor fabrication and microlens-forming process.
Курсивом отмечены золотые слова: КМОП-сенсор 40D основан на дизайне и производственной схеме 400D (он же Digital Rebel), а что они там нахимичили в микролинзах - это дело десятое.

А это значит, что преимущество 14-битного АЦП в таком случае нивелируется возросшим уровнем шумов и, как следствие, уменьшением величины отношения ``сигнал/шум'' при том же динамическом диапазоне.


Экспериментальные данные
Из рисунков Рис.9а) и б) можно видеть, что среднее значение темнового шума увеличивается с ISO очень медленно, однако величина постоянного темнового шума
отличается в 4 раза. Это можно объяснить увеличением разрядности АЦП
при том же фотосенсоре.

Более того, анализируя графики зависимости стандартного отклонения темнового шума от ISO (рис.1) можно сделать вывод, что скорее всего АЦП на Canon 40D двухступенчатый.
Это объясняет характерные провалы СКО шума на промежуточных значениях
ISO, однако если соединить точки 100, 200, 400, 800 и 1600, то
получится гладкая кривая, значения которой опять-таки примерно в 4 раза
отличаются от тех, которые имеют место быть на Canon 400D.


а)
б)

Рис.1: Изменение среднего значения темнового шума
от величины ISO: а) для Canon 400D, б) для Canon 40D.

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

а)
б)
Рис.2: Изменение стандартного отклонения темнового шума
от ISO: а) для Canon 400D, б) для Canon 40D.

Видно, что в точках 100, 200, 400, 800 и 1600 соответственно стандартное отклонение темнового шума отличается так же почти в 4 раза - это свидетельствует о том, что АЦП установлены со сходными характеристиками.

Более того, на зависимости сигнала от шума имеется аномальное отклонение для данных, полученных с Canon EOS 400D - наблюдающийся провал на зависимости, приведённой на рис. 3 воспроизводится даже при некотором изменении параметров эксперимента.

а)
б)

Рис.3: Зависимость сигнала от шума для данных, обработанных
DCRAW в документальном режиме (данные приведены для красного канала):
а) для Canon 400D, б) для Canon 40D.

На рис.3 приведены данные по световым шумам фотосенсоров Canon 400D и 40D в
красном канале. Видно, что в обоих случаях имеется аномальное поведение зависимости сигнала от шума - и эта аномалия одна и та же для двух рассматриваемых камер. Это однозначно указывает на то, что фирма Canon установила ту же самую матрицу в модель 40D, которая устанавливалась и в 400D. А это в свою очередь означает, что 14-битный АЦП ничего не даёт в плане увеличения динамического диапазона камеры, если её рассматривать в качестве измерительной.

Так, для 12-битной камеры Canon EOS 400D были получены следующие характеристики:
  • Предельное значение сигнала: 3726 DN.
  • Оптический динамический диапазон (ODR): 59 dB.
  • Линейный динамический диапазон (LDR): 58 dB.
  • Максимальный "сигнал/шум": 117 (6.9 bit).
  • Стандартное отклонение темнового шума: 1.6 DN.
В то же время, для 14-битной камеры Canon EOS 40D измерительные характеристики хуже:
  • Предельное значение сигнала: 13825 DN.
  • Оптический динамический диапазон (ODR): 56 dB.
  • Линейный динамический диапазон (LDR): 52 dB.
  • Максимальный "сигнал/шум": 75 (6.2 bit).
  • Стандартное отклонение темнового шума: 6.0 DN.
Во всех случаях минимальный сигнал\шум принимался равным 2.

Выводы:
Если вы используете цифровые зеркальные фотокамеры в качестве измерительных приборов, то выбор в этом качестве Canon EOS 40D не оправдан из-за меньшего значения линейного динамического диапазона и более высокой стоимости.
Читать далее

Создание графиков в gnuplot: деления на осях



13 коммент.
Gnuplot автоматически подгоняет деления на осях под данные, однако в сложных графиках их нужно переопределить - о чём говорится ниже.


Как изменить деления для каждой из осей?
Есть два вида делений на осях: основные и дополнительные. Обычно на осях отрисовываются только основные деления, и по умолчанию дополнительные отбражаются только при логарифмическом масштабе. Для переопределения делений на осях используется команда set {x|y}tics например, так:
gnuplot> set xtics 2
gnuplot> set ytics 0,200
gnuplot> plot x**3




Это приведёт к тому, что приращение по оси Х будет равняться 2, так что деления становятся вида -10, -8, ... +10. Для оси Y задано начальное значение (0) и приращение (200), так что GNUplot создаёт деления в точках 0, 200, 400...

Так же можно указать конечное значение, например так:
gnuplot> set ytics 0,200,600.
Дополнительные деления задаются параметром set m{x|y}tics. Интервалы между основными засечками делений делятся на это значение:
gnuplot> set mxtics 2
gnuplot> set mytics 2




Так же возможно поместить собственный текст в деления осей вместо чисел. Например, написать "April", "May", "June", и "July" в позициях X=1,2,3 и 4, что возможно осуществить следующей командой:
gnuplot> set xtics ("April" 1, "May" 2, "June" 3, "July" 4)
gnuplot> plot "test.dat" using 1:2:3 notitle with boxes,\
"test.dat" using 1:2 notitle with lines




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

Команда set ticscale n m изменяет масштаб чисел в деления. Главные деления умножаются на величину n, тогда как дополнительные умножаются на величину m. Если m опущено, дополнительные деления принимают значение половины от величины главной деления.

деления отрисовываются внутрь, а чтобы они отрисовывались наружу, следует указать:
gnuplot> set tics out


Как использовать степенные деления?
Для этого следует переопределить формат следующим образом::
gnuplot> set format x "10^{%g}"
Теперь по оси Х деления станут вида 10^0, 10^1... и так далее.




Как использовать экспоненциальные деления вместо десятичных в логарифмических осях?
Формат по умолчанию "%g", а в логарифмических осях метки записываются в формате "F", например 0.01, 1000, и так далее, если данные в пределах от 0.0001 до 100000. Числа, выходящие за этот диапазон, записываются в формате "E" и записываются как 1e-05, 1e+06, и т.д.

Чтобы сделать деления к осям в виде степени 10, измените формат на "10^{%L}":
gnuplot> set format y "10^{%L}"
Для корректного отображения надстрочных и подстрочных индексов следует использовать расширенный postscript-терминал, добавив в скрипт построения графиков:
gnuplot> set terminal postscript eps enhanced
Вот что получится:



Как убрать отображение чисел из деления?
Просто добавьте параметр:
gnuplot> set format x ""
деления по оси Х отображаться не будут.


Как отобразить промежуточные значения в логарифмическом масштабе?
Обычно логарифмические деления к осям отображаются степенями 10 (1,10,100...). Иногда для лучшего понимания данных, изображённых на графике, требуется поместить засечки на осях между главными подписями, особенно когда диапазон значений невелик. Вот как это можно сделать:
gnuplot> set logscale y
gnuplot> set yrange [1:50]
gnuplot> set ytics (1,2,5,10,20,50)
gnuplot> set format y "%2.0t{/Symbol \327}10^{%L}"
gnuplot> set lmargin 8
gnuplot> set terminal postscript eps enhanced
gnuplot> plot exp(x)/x
Тёмно-красным выделен небольшой хак, который позволяет выводить деления как "число умноженное на 10^n".

Результат на рисунке:


Этот Postscript-символ отображает умножение точкой. Чтобы изменить его на "крестик", используйте {/Symbol \264}. Описанный здесь хак работает не всегда и не на всех системах.


Как изменить формат чисел в деления осей (общий вопрос)?
Это более общее описание форматов деления к осям: за это отвечает команда set format. Синтаксис команды такой:
set format имяоси{x|y|z|xy|x2|y2} "формат строки"
Например, чтобы гнуплот показывал деления в как десять цифр и три после запятой, нужно дать команду:
gnuplot> set format x "%10.3f"
Синтаксис для цифро такой: "%" + (полная длина).(точность).

Формат отображения выражается одной буквой -- 'f', 'e', 'E', 'g', 'x', 'X', 'o', 't', 'l', 's', 'T', 'L', 'S', 'c' и 'P'. По умолчанию используется "%g". Следующая таблица показывает разницу между форматами 'f', 'e', 'x' и 'o'. Форматы 'e' и 'E' одинаковы всегда, кроме случая, когда текст написан в формате 'e' or 'E'. Формат "%O" присутствует в мануале к гнуплоту, но не работает (скорее всего, ошибка в программе)


Пример (подчёркивание означает пробел)
f десятичны %6.3f __6.00
e,E экспоненциальный %11.4e _5.0000e+01
x,X шестнадцатеричный %x fffffffb
o,O восьмеричный %o 37777766

Форматы 't', 'l', 'T' и 'L' относятся к логарифмическим графикам. Для примера построим график функции y=exp(-x)+exp(x) в диапазоне X значений [-10:10]. Во-первых, эта функция отображается в нелогарифмическом масштабе, так что отобразим данные сразу в трёх форматах:

gnuplot> set format y "%T %t %g"
gnuplot> plot exp(-x)+exp(x)



Можно задать другие форматы при одновременном отображении, как и в этом случае. В данном примере, "%t" отвечает за мантиссу по основанию 10 и "%T" отвечает за степень по основанию 10. Таким образом, число, выраженное в формате "%g", отображается как A x 10^B, где A задано в формате "%t" и B в формате "%T".

Теперь перестроим график:
gnuplot> set logscale y
gnuplot> replot



Читать далее

Измерительные возможности цифровой камеры Canon 40D



6 коммент.
Этот пост будет интересен тем, кто использует цифровые фотокамеры в качестве измерительных. Чаще всего это физики, техники и астрономы. Здесь приведены фрагменты технического отчёта для одной из лабораторий МИФИ, которая дала нам на время 40D. Так что не ждите здесь дифирамбов Live-view и прочим потребительским штучкам. Нас она интересует как измерительное устройство.

Для выяснения правды был использован конвертер DCRAW, о чём уже писалось здесь. Для просмотра и анализа сырых данных из RAW-файла следует использовать графический анализатор nip2, о котором так же есть что почитать там и тут.



Как сделать из обычной камеры измерительную
Используем DCRAW с ключами:
dcraw -4 -D -T img0001.cr2

Ключ -4 имеет решающее значение: это позволяет выводить изображение в 16-битный формат, в котором содержится только 14 бит необработанных данных.

После этого данные можно загружать в MATLAB или Octave для работы или использовать nip2 для анализа данных.


Немного теории
Теоретический верхний предел значений пикселей фотокамеры равен разрядности АЦП - в данном случае это значение 16384 цифровых единиц. В современных цифровых камерах устанавливаются, как правило, 12-битные АЦП, однако в камерах высокой ценовой категории могут быть АЦП больших разрядностей (14 и 16 бит).

Несмотря на то, что значения, получаемые с фотосенсора, линейно зависят от времени экспозиции постоянного источника света, при подходе к теоретическому пределу значений отклик фотосенсора становится нелинейным. Значение насыщения меньше теоретического предела АЦП: например, для 12-битного АЦП, применяющегося в большинстве современных зеркальных камер, предел экспериментально получаемых значений меньше теоретического на 10-20%.


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

После этого в системе численных математических расчётов MATLAB / Octave обрабатываются снимки по выделенной области интереса: анализируется ход среднего значения по области интереса и дисперсия значений в выбранной области. Это позволяет узнать, насколько линеен фотоприёмник камеры и при каких значениях освещённости начинается насыщение.

Как видно из хода зависимостей, на уровень насыщения, который равен значению 13826 из 16384, сенсор фотокамеры Canon D40 выходит плавно, и до уровня 12000-13000 зависимость от интенсивности зарегистрированной освещённости можно считать линейной с достаточно хорошей точностью (см.рис.1). В качестве погрешности отложено стандартное отклонение данных плоского поля размером 64х64 отсчёта.


a)



б)


Рис.1: Линейность фотосенсора в зависимости от сигнала:
а) на малых экспозициях (логарифмический масштаб),
б) на больших экспозициях (линейный масштаб).



Данные о шумах для камеры Canon 40D
Для этих целей следует использовать экспозицию с закрытой крышкой. Данные, полученные в ходе обработки таких данных, позволяют судить о росте уровня шума в зависимости от экспозиции и ISO. Следует отметить, что усиление сигнала (соответствующее значению ISO) происходит до записи изображения в RAW-файл. С возрастанием величины усиления возрастают и шумы.



a)


б)
Рис.2: Изменение статистических параметров темнового шума от величины ISO:
а)среднее значение,
б) стандартное отклонение от среднего значения



На рис.2 приведена зависимость среднего значения сигнала темнового кадра от ISO и стандартное отклонение этих значений при постоянном времени экспозиции. Видно, что стандартное отклонение возрастает с изломами (возможно, используется многоступенчатый АЦП).

На рис.3 представлены зависимости величины шума (стандартное отклонение пикселей при многократном усреднении одной и той же сцены для разных величин пикселей) от сигнала.


Рис.3: Зависимость сигнала от шума для данных, обработанных
DCRAW в документальном режиме.
Данные приведены для красного канала.



Рис.4: Зависимость сигнала от шума для данных,
обработанных DCRAW в документальном режиме.
Данные приведены для зелёного канала.



По нашим данным, при обработке получаемых изображений конвертером DCRAW, можно оценить полный динамический диапазон как 56 dB и линейный динамический диапазон как 52 dB.

Это очень хороший результат для бытовой камеры, т.к. аналогичное устройство класса "scientific graduated" стоит как минимум в 3-4 раза дороже. Так что Canon 40D можно вполне использовать в любительской астрономии и в качестве фоторегистратора в оптических экспериментах.

Читать далее

Cinepaint - простой и быстрый графический редактор



7 коммент.
Есть ряд специфических задач при обработке фотографий в Линукс, таких как HDR-фотографии и обработка изображений с высокой битностью. Это позволяет сделать - и очень быстро - графический редактор Cinepaint. Простой, быстрый и в меру функциональный.


Как говорится на официальном сайте проекта, Cinepaint ориентирован прежде всего на редактирование изображений для фильмов и анимации. И в этой области Cinepaint действительного многого достиг: полная поддержка форматов CIN, DPX и EXR, а так же поддержка разрядности изображения 8, 16 и 32 бита.


Интерфейс

Тяжёлое наследие гимпа в интерфейсе - куча окошек и без табового менеджера окон обойтись трудно.



Есть инструменты рисования, кадрирования и работа со слоями, и если вы боролись с интерфейсом GiMP, то здесь вы почувствуете себя уверенно.


Работа в Cinepaint
В ряде случаев Cinepaint быстрее GiMP, и в нём можно редактировать 16-битные изображения, получаемые с современных цифровых фотокамер при помощи RAW-конверторов, например UFRaw и dcraw.

Цвета - только оттенки серого или RGB. Для видеоредактора особенно большего и не надо. Зато разрядность цвета 8, 16 и 32 бита. Есть возможность работы с цветопередачей - имеется возможность применения ICC-профилей. Кроме того, обычные инструменты типа "Кривые", "Уровни" и коррекция оттенков.

Интересная возможность визуальной цветокоррекции в меню Image - Colors - Color correction.



Это позволяет быстро оценивать и менять направление цветокоррекции.


Интересная возможность Cinepaint

У Cinepaint есть уникальная возможность - автоматическое создание HDR-изображений по нескольким снимкам. Здесь дано подробное руководство со ссылками на весьма авторитетных исследователей в этой области.
Неприятность в том, что когда вы снимаете тропический рассвет на фоне моря и леса, вы попадаете в сложную ситуацию. Если рассчитывать экспозицию относительно неба, то оно на снимке будет проработано хорошо, но лес будет чёрным пятном (проработается слабо). Если же брать экспозицию по тёмным участкам, то проработаются они, а небо будет "выбито". Решение есть, и оно в общем простое: сделать несколько снимков с "недодержкой" (по теням), обычное и с "передержкой" (по светлой части). На каждом снимке получаете детали из каждой области - комбинируя три (или больше) изображения, получаете свой тропический рассвет на фоне отлично проработанного леса.

Это довольно кропотливое занятие сильно облегчает Cinepaint: в нём уже есть модуль, который рассчитывает, откуда взять участки изображений для получения изображения с высоким динамическим диапазоном.
На самом деле, зная порог насыщения своей камеры и приблизительно ориентируясь на встроенный экспонометр, можно всё сделать и за один кадр - динамического диапазона у камеры с лихвой для этого хватит (как правило, это около 11 бит, или около 50dB). Но это потребует применения совсем иных средств обработки, таких как nip2, MATLAB/Octave и dcraw со специальными ключами.
В общем, Cinepaint - это ещё один инструмент в арсенале фотографов и любителей работы с растровыми изображениями. Не без недостатков и со своими преимуществами.


Выводы
Как метко говорят мои заокеанские коллеги-блоггеры, "Cinepaint needs some serious love" :-) Для графического редактора в 2007 году gtk-1 это даже не смешно, а очень грустно. Но это не единственный недостаток:
  1. очень, очень мало фильтров обработки изображений;
  2. те, что есть, в большинстве своём не интерактивны (нет возможности предпросмотра) и бедны настройками;
  3. алгоритмов шумоподавления в комплекте нет вовсе;
Есть и плюсы:
  1. То, что есть, как правило весьма быстро работает :-)
  2. возможность работы с 8, 16 и 32-битным цветом;
  3. возможность работы с цветовыми профилями;
  4. уникальные возможности по работе и созданию HDR-изображений;
В общем, не гимпом единым, как говорится. Быстрый, в меру функциональный графический редактор, много места не занимает. Достойный помощник GiMP там, где это требуется.
Читать далее