libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
Функции ввода–вывода данных

Функции

int writebin (void *x, int n, int dtype, char *fn)
 Сохранить данные в бинарный файл Подробнее...
 
int writetxt (double *x, double *y, int n, char *fn)
 Сохранить вещественные данные в текстовый файл Подробнее...
 
int writetxt_int (int *x, int *y, int n, char *fn)
 Сохранить целочисленные данные в текстовый файл Подробнее...
 
int writetxt_3d (double *x, int nx, double *y, int ny, double *z, char *fn)
 Сохранить данные для построения 3D графика Подробнее...
 

Подробное описание

Функции ввода и вывода данных. Запись и считывание данных в бинарные и текстовые файлы

Функции

◆ writebin()

int writebin ( void *  x,
int  n,
int  dtype,
char *  fn 
)

Сохранить данные в бинарный файл


Функция сохраняет реальный или комплексный вектор данных размера [n x 1] в бинарный файл fn.

Файл является универсальным для хранения как одномерных, так и двумерных массивов и имеет следующий формат:

type     4 байта типа int.
         Может принимать значение:
         DAT_DOUBLE,    если x указатель на вектор вещественных чисел;
         DAT_COMPLEX, если x указатель на вектор комплексных чисел.

n        4 байта типа int.
         Количество строк данных.

m        4 байта типа int.
         Количество столбцов данных.
         При сохранении вектора всегда равно 1.

data     Данные в бинарном виде.
         Размер данных:
         n * sizeof(double),    если dtype==DAT_DOUBLE;
         n * sizeof(complex_t), если dtype==DAT_COMPLEX.

Файл может быть использован для верификации алгоритмов сторонними пакетами, такими как GNU Octave, Matlab, Python и т.д.

Аргументы
[in]xУказатель на массив данных.
Размер вектора [n x 1].

[in]nРазмер вектора данных.

[in]dtypeТип данных.
Может принимать значения:
DAT_DOUBLE – вещественные данные;
DAT_COMPLEX – комплексные данные.

[in]fnИмя файла.

Возвращает
RES_OK — файл сохранен успешно.
В противном случае код ошибки.
Заметки
Данная функция производит запись в файл без потери точности, поэтому рекомендуется использовать ее для верификации данных DSPL.

Функция для чтения бинарного файла в GNU Octave и Matlab:

function [dat, n, m] = readbin(fn)
fid = fopen(fn);
if(~fid)
error('cannot to open file');
end
type = fread(fid, 1, 'int32');
n = fread(fid, 1, 'int32');
m = fread(fid, 1, 'int32');
if(type==0)
dat = fread(fid, [n*m, 1], 'double');
end
if(type==1)
y = fread(fid, [n*m*2, 1], 'double');
dat = y(1:2:end) + 1i * y(2:2:end);
end
dat = reshape(dat, n, m);
fclose(fid);
end
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле inout.c строка 328

◆ writetxt()

int writetxt ( double *  x,
double *  y,
int  n,
char *  fn 
)

Сохранить вещественные данные в текстовый файл


Функция сохраняет вещественные данные в текстовый файл fn.
Файл имеет следующий формат:

x[0]        y[0]
x[1]        y[1]
...         ...
x[n-1]    y[n-1]

Файл может быть использован для построения графика сторонней программой, например пакетом GNUPLOT (см. раздел Функции построения графиков.).

Аргументы
[in]xУказатель на первый вектор.
Размер вектора [n x 1].

[in]yУказатель на второй вектор.
Размер вектора [n x 1].
Может быть NULL.
Файл будет содержать только один столбец соответствующий вектору x если y == NULL.

[in]nРазмер входных векторов.

[in]fnИмя файла.

Возвращает
RES_OK — файл сохранен успешно.
В противном случае код ошибки:
Заметки
Данная функция производит округление данных при записи в файл. Поэтому не рекомендуется использовать ее для верификации данных DSPL.
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле inout.c строка 491

◆ writetxt_3d()

int writetxt_3d ( double *  x,
int  nx,
double *  y,
int  ny,
double *  z,
char *  fn 
)

Сохранить данные для построения 3D графика


Функция сохраняет вещественные данные в текстовый файл fn для построения 3D поверхности.
Функция \( z(x,y)\) описывается матрицей значений z[x[n], y[n]] как это показано на рисунке

Матрица z хранится в памяти по столбцам, как это показано красной стрелкой.
Файл имеет следующий формат:

x[0]        y[0]        z[0, 0]
x[1]        y[0]        z[1, 0]
x[2]        y[0]        z[2, 0]
...         ...         ...
x[nx-1] y[0]        z[nx-1, 0]

x[0]        y[1]        z[0, 1]
x[1]        y[1]        z[1, 1]
x[2]        y[1]        z[2, 1]
...         ...         ...
x[nx-1] y[1]        z[nx-1, 1]

...         ...         ...
...         ...         ...
...         ...         ...

x[0]        y[ny-1] z[0, ny-1]
x[1]        y[ny-1] z[1, ny-1]
x[2]        y[ny-1] z[2, ny-1]
...         ...         ...
x[nx-1] y[ny-1] z[nx-1, ny-1]

Таким образом, каждое значение матрицы z записано отдельной строкой со соответствующими значениями x и y. Столбцы матрицы отделены пустой строкой.

Файл может быть использован для построения графика сторонней программой, например пакетом GNUPLOT (см. раздел Функции построения графиков.). Также данный формат поддерживается пакетами pgfplot3d издательской системы Latex.

Аргументы
[in]xУказатель на вектор значений оси x.
Размер вектора [nx x 1].

[in]nxРазмер вектора оси x.

[in]yУказатель на второй вектор значений оси y.
Размер вектора [ny x 1].
[in]nyРазмер вектора оси y.

[in]zУказатель на матрицу значений функции z(x, y).

[in]fnИмя файла.

Возвращает
RES_OK — файл сохранен успешно.
В противном случае код ошибки:
Пример использования функции и посторения 3D поверхности приведен в следующем листинге:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "dspl.h"
#define NX 20
#define NY 30
int main(int argc, char* argv[])
{
void* hdspl; /* DSPL handle */
void* hplot; /* GNUPLOT handles */
hdspl = dspl_load(); /* Load DSPL function */
double x[NX];
double y[NY];
double z[NX * NY];
int n, m;
int err;
/* x vector from -2 to 2 */
linspace(-2.0, 2.0, NX, DSPL_SYMMETRIC, x);
/* y vector from -2.5 to 2.5 */
linspace(-2.5, 2.5, NY, DSPL_SYMMETRIC, y);
/* z(x,y) = x * exp(-x^2 - y^2) */
for(n = 0; n < NX; n++)
{
for(m = 0; m < NY; m++)
{
z[n + m*NX] = x[n]*exp(-x[n]*x[n] - y[m]*y[m]);
}
}
/* Save to files "dat/data3d.txt" */
err = writetxt_3d(x, NX, y, NY, z, "dat/data3d.txt");
printf("writetxt_3d error 0x%8x\n", err);
/* plotting 3d surface by GNUPLOT */
/* Create window 0 */
err = gnuplot_create(argc, argv, 560, 480, "img/writetxt_3d.png", &hplot);
printf("GNUPLOT err = %d\n", err);
gnuplot_cmd(hplot, "set pm3d implicit at s");
gnuplot_cmd(hplot, "set view 50, 340, 1, 1");
gnuplot_cmd(hplot, "set xlabel 'x'");
gnuplot_cmd(hplot, "set ylabel 'y'");
gnuplot_cmd(hplot, "splot 'dat/data3d.txt' with lines");
gnuplot_close(hplot);
dspl_free(hdspl); /* free dspl handle */
return 0;
}

Данная программа рассчитывает и строит поверхность функции

\[ z(x,y) = x \exp(-x^2 -y^2) \]

В каталоге dat будет создан файл data3d.txt.
Кроме того программа GNUPLOT произведет построение 3D поверхности по сохраненным в файл данным:

Автор
Бахурин Сергей www.dsplib.org

См. определение в файле inout.c строка 880

◆ writetxt_int()

int writetxt_int ( int *  x,
int *  y,
int  n,
char *  fn 
)

Сохранить целочисленные данные в текстовый файл


Функция сохраняет целочисленные данные в текстовый файл fn.
Файл имеет следующий формат:

x[0]        y[0]
x[1]        y[1]
...         ...
x[n-1]    y[n-1]

Файл может быть использован для построения графика сторонней программой, например пакетом GNUPLOT (см. раздел Функции построения графиков.).

Аргументы
[in]xУказатель на первый вектор.
Размер вектора [n x 1].

[in]yУказатель на второй вектор.
Размер вектора [n x 1].
Может быть NULL.
Файл будет содержать только один столбец соответствующий вектору x если y == NULL.

[in]nРазмер входных векторов.

[in]fnИмя файла.

Возвращает
RES_OK — файл сохранен успешно.
В противном случае код ошибки:
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле inout.c строка 664

void gnuplot_close(void *h)
Закрыть хэндл GNUPLOT.
Definition: gnuplot.c:325
void * dspl_load()
Произвести динамическую линковку и загрузить функции libdspl-2.0.
void gnuplot_cmd(void *h, char *cmd)
Функция посылает команду cmd пакету GNUPLOT, для построения или оформления графика,...
Definition: gnuplot.c:390
int writetxt_3d(double *x, int nx, double *y, int ny, double *z, char *fn)
Сохранить данные для построения 3D графика
Definition: inout.c:880
void dspl_free(void *handle)
Очищает связанную ранее динамическую библиотеку DSPL-2.0.
int linspace(double x0, double x1, int n, int type, double *x)
Функция заполняет массив линейно-нарастающими, равноотстоящими значениями от x0 до x1
Definition: array.c:1009
int gnuplot_create(int argc, char *argv[], int w, int h, char *fn_png, void **hplot)
Создать график GNUPLOT.
Definition: gnuplot.c:200