【问题标题】:Import text file signal data in Matlab在 Matlab 中导入文本文件信号数据
【发布时间】:2021-10-03 18:27:24
【问题描述】:

试图了解如何在Matlab中导入文本文件数据(时间信号),请您帮忙。 .txt 文件的结构如下所示:

0,0006 0,0835 0,0013 0,0016 0,0019 0,0082 0,0026 -0,0193 0,0032 0,1115 0,0039 -0,1169 0,0045 0,0461 0,0052 -0,1185 0,0058 0,0048 0,0065 0,0087 0,0071 -0,1163 0,0078 0,0913 0,0084 0,022 0,0091 0,0072 0,0097 -0,0829

在原始文件中,它看起来像以制表符分隔的列:

【问题讨论】:

  • 我假设你使用逗号而不是小数点,所以每行有 2 个字段,第一个是采样率为 600 微秒的时间?
  • 我相信是这样,它不知道数据是如何存储的。我相信采样率为 1600。
  • 您能否将问题编辑为文本数据而不是图像,以便我们可以复制粘贴它以测试可能的答案?

标签: matlab


【解决方案1】:

只需用点替换逗号并使用 dlmread 函数:

cat signal.txt
0.0006 0.0835
0.0013 0.0016
0.0019 0.0082
0.0026 -0.0193
0.0032 0.1115
0.0039 -0.1169
0.0045 0.0461
0.0052 -0.1185
0.0058 0.0048
0.0065 0.0087
0.0071 -0.1163 
0.0078 0.0913 
0.0084 0.022
0.0091 0.0072
0.0097 -0.0829
format long
data=dlmread('signal.txt',' ',0,0)
data =

   5.999999999999999e-04   8.350000000000000e-02
   1.300000000000000e-03   1.600000000000000e-03
   1.900000000000000e-03   8.200000000000001e-03
   2.600000000000000e-03  -1.930000000000000e-02
   3.200000000000000e-03   1.115000000000000e-01
   3.900000000000000e-03  -1.169000000000000e-01
   4.500000000000000e-03   4.610000000000000e-02
   5.200000000000000e-03  -1.185000000000000e-01
   5.800000000000000e-03   4.800000000000000e-03
   6.500000000000000e-03   8.699999999999999e-03
   7.100000000000000e-03  -1.163000000000000e-01
   7.800000000000000e-03   9.130000000000001e-02
   8.399999999999999e-03   2.200000000000000e-02
   9.100000000000000e-03   7.200000000000000e-03
   9.700000000000000e-03  -8.290000000000000e-02

免责声明:我的计算机上没有 MATLAB,因此使用了 Octave。根据我以前的经验,它应该也可以在 MATLAB 中运行。

【讨论】:

  • 问题的目的可能是确定是否有办法在 Matlab 中处理逗号。例如,如果脚本将被重复用于读取类似类型的文件或文件包含许多行,他们可能正在寻找一种自动将逗号识别为句点的方法。
  • 这很容易做到 - 只是需要一些努力。
【解决方案2】:

这可以通过三个步骤来完成:

file_string = fileread('my_file.txt');       % Read file contents to string.

file_string = strrep(file_string, ',', '.'); % Replace commas in string to periods.

file_mat = str2num(file_string);             % Convert contents to a matrix.

原始问题指出,列由制表符分隔,并且在图中似乎行由换行符分隔,但在文本中,行也由制表符分隔。如果文件使用换行符分隔行,则结果file_mat 将已格式化为行和列。如果使用制表符分隔所有元素(列和行),则file_mat 将仅包含一个向量。如果是这种情况,那么 file_mat 可以使用以下方法重新整形:

file_mat = reshape(file_mat, [2 length(file_mat)/2])'; % Convert vector to array with two columns.

验证如下:

【讨论】:

  • 谢谢,在 file_mat = str2num(file_string);矩阵是由其中没有值创建的。
  • 我已将测试结果添加到答案中。您可以看到输入文件 my_file.txt 包含与上面相同的制表符分隔值。提供用于测试的确切文件可能会有所帮助。
【解决方案3】:

我有一个解决方案:

A = importdata ('text_file_neme.txt');

M = A(:,2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多