matlab 批处理音频,matlab批处理数据

在数据处理中,通常有很多文件需要处理,而这些文件基本都很相似,比如说是矩阵,它们是相同维数的矩阵,一个一个的处理浪费很多时间,因此需要批处理文件,下面是其中一个方法:在一个文件夹中有21个文件,名字都有规律。

readfile={'D:\单点和单体型\CEU5=0.01\chr1.dat',

'D:\单点和单体型\CEU5=0.01\chr2.dat',

'D:\单点和单体型\CEU5=0.01\chr3.dat',

'D:\单点和单体型\CEU5=0.01\chr4.dat',

'D:\单点和单体型\CEU5=0.01\chr5.dat',

'D:\单点和单体型\CEU5=0.01\chr6.dat',

'D:\单点和单体型\CEU5=0.01\chr7.dat',

'D:\单点和单体型\CEU5=0.01\chr8.dat',

'D:\单点和单体型\CEU5=0.01\chr9.dat',

'D:\单点和单体型\CEU5=0.01\chr10.dat',

'D:\单点和单体型\CEU5=0.01\chr11.dat',

'D:\单点和单体型\CEU5=0.01\chr12.dat',

'D:\单点和单体型\CEU5=0.01\chr13.dat',

'D:\单点和单体型\CEU5=0.01\chr14.dat',

'D:\单点和单体型\CEU5=0.01\chr15.dat',

'D:\单点和单体型\CEU5=0.01\chr16.dat',

'D:\单点和单体型\CEU5=0.01\chr17.dat',

'D:\单点和单体型\CEU5=0.01\chr18.dat',

'D:\单点和单体型\CEU5=0.01\chr19.dat',

'D:\单点和单体型\CEU5=0.01\chr20.dat',

'D:\单点和单体型\CEU5=0.01\chr21.dat'

}

writefile={'D:\单点和单体型\CEU5=0.01\chr1.txt',

'D:\单点和单体型\CEU5=0.01\chr2.txt',

'D:\单点和单体型\CEU5=0.01\chr3.txt',

'D:\单点和单体型\CEU5=0.01\chr4.txt',

'D:\单点和单体型\CEU5=0.01\chr5.txt',

'D:\单点和单体型\CEU5=0.01\chr6.txt',

'D:\单点和单体型\CEU5=0.01\chr7.txt',

'D:\单点和单体型\CEU5=0.01\chr8.txt',

'D:\单点和单体型\CEU5=0.01\chr9.txt',

'D:\单点和单体型\CEU5=0.01\chr10.txt',

'D:\单点和单体型\CEU5=0.01\chr11.txt',

'D:\单点和单体型\CEU5=0.01\chr12.txt',

'D:\单点和单体型\CEU5=0.01\chr13.txt',

'D:\单点和单体型\CEU5=0.01\chr14.txt',

'D:\单点和单体型\CEU5=0.01\chr15.txt',

'D:\单点和单体型\CEU5=0.01\chr16.txt',

'D:\单点和单体型\CEU5=0.01\chr17.txt',

'D:\单点和单体型\CEU5=0.01\chr18.txt',

'D:\单点和单体型\CEU5=0.01\chr19.txt',

'D:\单点和单体型\CEU5=0.01\chr20.txt',

'D:\单点和单体型\CEU5=0.01\chr21.txt'

}

a=char(readfile);

b=char(writefile);

for i=1:21

read=importdata(a(i,:));

for

j=1:200

for k=1:80

if rem(k,2)==1

c(j,k)=read(2*j-1,(k+1)/2);

else

c(j,k)=read(2*j,k/2);

end

end

end

write=fopen(b(i,:),'w');

[m,n]=size(c);

for i=1:1:m

for

j=1:1:n

if j==n

fprintf(write,'%g\n',c(i,j));

else

fprintf(write,'%g\t',c(i,j));

end

end

end

fclose(write);

end

另外方法如下:

把文件夹下的文件名字放在一个EXCEL文件中,导入matlab,命名为a

for i=1:21

b{i}=importdata(a{i});

end

b(1)

ans =

[400x40 double]

b(i)就是其中的第I个矩阵,然后我们可以对其处理分析,同理,输出的文件我们也可以放在一个EXCEL文件中,然后导入matlab

关于这类问题,网上还有很多方法,但是我都没看明白:搜集一下,以后解决把

问题1:[我编写了一个matlab程序,每次对一个数据文件(.txt数据文件已load保存为mat文件).处理一遍得一个结果.但是有多个数据文件待处理,这样一遍一遍地输入执行然后得到结果,很麻烦,也很浪费时间.请问如何一次性批处理这多个数据文件得到相应的结果??

回答:

把.mat文件放到一起

先ctrl+a再按F2

命名为XX(i).mat

for i=1:100

load strcat('XX(',num2str(i),').mat'');

end

%strcat是全并string

问题2:

Re:【讨论】matlab怎样批处理来读取excel格式的数据

这里有个我以前用的简单例子:

for i=9:1:18

proj_header = 'UGO_0';

proj_number =

num2str(i);

proj_suffix = '.xls';

if

(i<10)

filename = [proj_header '0'

proj_number proj_suffix];

else

filename =

[proj_header proj_number proj_suffix];

end

data =

xlsread(filename);

end

问题3:

鉴于多数人对于高级语言不是很熟练,这里我使用matlab为例进行数据的批处理工作。

考虑一个文件件内有n个同一属性的数据文件,每个文件代表不同的年份,怎么对于这些文件进行统计整理?

下面是代码:

输入,比如在某文件夹内有n个txt或是dat等格式的文件,现在要一次性读入matlab:

%method 1:

cd f:\xxx  %xxx即是文件所在文件夹。

dat=struct2cell(dir);

for i=1:length(dat)-2

data{i}=importdata(dat{1,i+2});

%使用元胞数组存储各文件中的内容。

end

%method 2:

dat1=dir('f:\data');

for i=1:length(dat1)-2

data1{i}=importdata(dat1(i+2).name);

end

多文件的输出:

考虑这个问题,我们必须先生成一个可以产生连续整数序列的函数生成注入001、002、003、……、999

类似整数。

我写了一个,作为参考:

function b=fullnum(n)

if n~=floor(n)||n<=0||n>9999

fprintf('Error:The number is not allowed

float-point,less than 0 or larger than 9999!\n');

return;

end

b={};

for i=1:n

if i<10^floor(log10(n))

b{i}=strcat(char(ones(1,floor(log10(n))-floor(log10(i)))*48),int2str(i));

else

b{i}=int2str(i);

end

end

end

下面使用类似这个的模板,存储一个元胞数组的内容到一系列连续文件名的文件:

mkdir F:\data

name=fullnum(41);

for i=1:41

a=data{i};

save(strcat('F:\data\data',name{i},'.txt'),'a','-ascii');

end

%-------------------------------------------------------------------------%

%该程序实现了数据文件的批处理,并将处理后的文件以CL_name存储在相同文件夹中。

%对数据的处理为:每隔k步提取一组数据,将提取的数据写入文件存储

%

%2007.4.6 wangbo E-mail:wboboer@163.com

%-------------------------------------------------------------------------%

clear

%提取间隔

k=4;

%导入原始数据

cd('D:\Program Files\MATLAB\R2006a\new');%待处理的数据文件所在文件夹

Allname=struct2cell(dir); %得到上述文件夹下的所有文件名

%dir命令,可以得到路径内包括文件名在内的文件信息,为struc数据结构。

%-------------------------------------------------------------------------%

%逐个读入文件

[m,n]=size(Allname);

for i=3:n%前两个不是文件名

name=Allname{1,i};

Imdata=importdata(name);

%-------------------------------------------------------------------------%

Bdata=Imdata.data;

textdata=Imdata.textdata;

colheaders=Imdata.colheaders;

clear Imdata

%简化变量名

%-------------------------------------------------------------------------%

%数据提取

B_tiqu=Bdata([1:k:end],:);

%-------------------------------------------------------------------------%

%数据输出

t1=cell2mat(textdata(1,1));

t2=cell2mat(textdata(2,1));

c=cell2mat(colheaders(1,:));

%保存文件重命名为CL_name

qianzhui='CL_';

name=[qianzhui,name];

%数据写入

%表头文字部分

f=fopen(name,'wt','n','ASCII');%创建并打开文件

fprintf(f,t1);

fprintf(f,'\n');

fprintf(f,t2);

fprintf(f,'\n');

fprintf(f,c);

fprintf(f,'\n');

clear t1 t2 c qianzhui name

%数据部分

M=length(B_tiqu);

for i=1:M

fprintf(f,'%d %d %d %d',B_tiqu(i,:));%输出格式类似C语言,可自己调整

fprintf(f,'\n');

end%for i=1:M

fclose(f);%关闭文件

end %for i=3:n

%---------------------END-------------------------------------------------%

问题5:[[求助]如何批处理文件名为自然数的文件

文件为名称为1到100的fits文件,如何用循环逐一调出来处理,谢谢。:)

可以用sprintf命令实现

for i=1:n

fout=sprintf('%03d.fits',i);

load(fout);

end

问题5:[大量数据文件的输入输出的批处理问题(matlab)[原]

大量数据文件的输入输出的批处理问题(matlab)[原]

面对最近几年数据题越来越多,很多朋友都会问“批处理”怎么做,下面就基于matlab的输入输出函数,写一些个人看法。

我们以2005年的C题为例(C2005data)先说说这个数据的文件夹结构,X:\C2005data\FORECAST\下面有330个文件,328个数据文件,2个网格文件表示精度、维度;X:\C2005data\MEASURING内有41个数据文件。可能我是学气象学的,对于这个数据比较敏感,也积累了一些处理经验。

【下面的话引自原文】【BEGIN】

FORECAST中的文件lon.dat和lat.dat分别包含网格点的经纬度,其余文件名为_dis1和_dis2,例如f6181_dis1中包含2002年6月18日晚上20点采用第一种方法预报的第一时段数据(其2491个数据为该时段各网格点的雨量),而f6183_dis2中包含2002年6月18日晚上20点采用第二种方法预报的第三时段数据。MEASURING中包含了41个名为.SIX的文件,如020618.SIX表示2002年6月18日晚上21点开始的连续4个时段各站点的实测数据(雨量),这些文件的数据格式是:

站号 纬度 经度 第1段 第2段 第3段 第4段

58138 32.9833 118.5167 0.0000 0.2000 10.1000 3.1000

58139 33.3000 118.8500 0.0000 0.0000 4.6000 7.4000

58141 33.6667 119.2667 0.0000 0.0000 1.1000 1.4000

58143 33.8000 119.8000 0.0000 0.0000 0.0000 1.8000

58146 33.4833 119.8167 0.0000 0.0000 1.5000 1.9000

【END】

i.现在我们就来处理这个数据读取问题(为方便起见,经纬度数据没读取):

%method 1:

clear,clc

cd E:\data_space\C2005data\FORECAST\ %文件所在文件夹。

dat=struct2cell(dir); %建立文件夹的树结构

for i=1:length(dat)-2 %减去2是由dos文件夹的组织决定的,这里不做解释

data{i}=importdata(dat{1,i+2}); %使用元胞数组存储各文件中的内容。

end

结果如下:data{1}(f6181_dis1文件)

ans =

0.0310 0.0321 0.0313 0.0307 0.0309 0.0331 0.0314 0.0336...

0.0302 0.0310 0.0315 0.0319 0.0330 0.0336 0.0335 0.0334...

......

上面也可以考虑使用结构体数组或元胞数组把文件名和寄存数据的元胞数组进行合并,使得文件信息直观化。

%method 2:

clear,clc

cd E:\C2005data\MEASURING\ %文件所在文件夹。

dat=dir('E:\C2005data\MEASURING\'); %读取文件名,同时dat也是寄存文件名的结构体

for i=1:length(dat)-2

data{i}=importdata(dat(i+2).name); %元胞data即寄存了文件夹中的所有文件数据

end

结果如下:

ans =

1.0e+004 *

5.8138 0.0033 0.0119 0 0 0 0.0002

5.8139 0.0033 0.0119 0

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值