当前位置:编程学习 > Matlab >>

matlab程序优化问题

我matlab学得不好 对于矩阵的理解和循环的使用很差劲 希望高手帮助我使用循环语句简化一下程序: t=1:16384; t=t*1/2000; x=sin(2*pi*20*t+5)+0.4*sin(2*pi*40*t+140); z=x+2*randn(size(t)); figure(1) subplot(4,1,1) plot(t,z) title('信号1'); xlabel('时间(time)t/s'),ylabel('幅值/mm'); for i=1:3 m(i,:)=z(i*2000:i*2000+1024); end subplot(4,1,2) plot(m(1,:)) title('截取信号1'); subplot(4,1,3) plot(m(2,:)) title('截取信号2'); subplot(4,1,4) plot(m(3,:)) title('截取信号3'); %对截取信号做emd imf1=emd(m(1,:)); imf2=emd(m(2,:)); imf3=emd(m(3,:)); for i=1:8 x1(i,:)=imf1(i,:); end figure(2) subplot(4,1,1);plot(x1(1,:)),title('imf1-1'); subplot(4,1,2);plot(x1(2,:)),title('imf1-2'); subplot(4,1,3);plot(x1(3,:)),title('imf1-3'); subplot(4,1,4);plot(x1(4,:)),title('imf1-4'); figure(3) subplot(4,1,1);plot(x1(5,:)),title('imf1-5'); subplot(4,1,2);plot(x1(6,:)),title('imf1-6'); subplot(4,1,3);plot(x1(7,:)),title('imf1-7'); subplot(4,1,4);plot(x1(8,:)),title('imf1-8'); for i=1:8 x2(i,:)=imf2(i,:); end figure(4) subplot(4,1,1);plot(x2(1,:)),title('imf2-1'); subplot(4,1,2);plot(x2(2,:)),title('imf2-2'); subplot(4,1,3);plot(x2(3,:)),title('imf2-3'); subplot(4,1,4);plot(x2(4,:)),title('imf2-4'); figure(5) subplot(4,1,1);plot(x2(5,:)),title('imf2-5'); subplot(4,1,2);plot(x2(6,:)),title('imf2-6'); subplot(4,1,3);plot(x2(7,:)),title('imf2-7'); subplot(4,1,4);plot(x2(8,:)),title('imf2-8'); for i=1:8 x3(i,:)=imf3(i,:); end figure(6) subplot(4,1,1);plot(x3(1,:)),title('imf3-1'); subplot(4,1,2);plot(x3(2,:)),title('imf3-2'); subplot(4,1,3);plot(x3(3,:)),title('imf3-3'); subplot(4,1,4);plot(x3(4,:)),title('imf3-4'); figure(7) subplot(4,1,1);plot(x3(5,:)),title('imf3-5'); subplot(4,1,2);plot(x3(6,:)),title('imf3-6'); subplot(4,1,3);plot(x3(7,:)),title('imf3-7'); subplot(4,1,4);plot(x3(8,:)),title('imf3-8'); %以下求imf最大值及坐标 for i=1:8 Max=max(x1(i)); B(i,2)=(find(x1(i,:)==Max)); B(i,1)=Max; end %以下求imf最大值及坐标 for i=1:8 Max=max(x2(i)); B(i,2)=(find(x2(i,:)==Max)); B(i,1)=Max; end %以下求imf最大值及坐标 for i=1:8 Max=max(x3(i)); B(i,2)=(find(x3(i,:)==Max)); B(i,1)=Max; end
补充:就是把重复的地方都用循环来写 参数设置什么的请写明 谢谢
追问:
运行到这:imf(:,:,i)=emd(m(i,:));%%
 就提示??? Subscripted assignment dimension mismatch.

Error in ==> youhua at 16
    imf(:,:,i)=emd(m(i,:));%%
是怎么回事呢?
emd是你自定义的函数吧,我不知道这个函数怎么运行的,也不清楚经过这个函数处理后得到的imf矩阵的行数和列数,所以做了假定,你可以根据实际情况改一下
由于m(i,:)是1024点的(我之前的程序错了,应该是1024而非1025),对m(i,:)进行emd处理后m每一行(即每个截取信号)都会被处理为一个8*1024的矩阵,矩阵的每一行都是一个imf模值,因此你用imf(:,:,i)存储3个8*1024矩阵我觉得应该是对的,但是出现这个错误,我不知道怎么修改
你把emd的代码等所有相关的代码贴出来,我帮你看一下

有问题欢迎追问,满意请采纳,谢谢!!
答案:%主要是三维矩阵的应用
t=1:16384;
t=t*1/2000;
x=sin(2*pi*20*t+5)+0.4*sin(2*pi*40*t+140);
z=x+2*randn(size(t));
figure(1)
subplot(4,1,1)
plot(t,z)
title('信号1');
xlabel('时间(time)t/s'),ylabel('幅值/mm');

m=zeros(3,1025);
imf=zeros(8,1025,3);%%行数和列数可能需要修改
for i=1:3
    m(i,:)=z(i*2000:i*2000+1024);
    imf(:,:,i)=emd(m(i,:));%%
    subplot(4,1,i+1)
    plot(m(i,:))
    title(['截取信号' num2str(i)]);
end

%对截取信号做emd
%假设imf1是8行1025列的矩阵,
% imf1=emd(m(1,:));%emd是自定义函数,不知道
% imf2=emd(m(2,:));
% imf3=emd(m(3,:));

x=zeros(8,1025,3);%%行数和列数可能需要修改
for j=1:3
    for i=1:8
        x(i,:,j)=imf(i,:,j);
        if i<=4
            figure(2*j)
            subplot(4,1,i)
        else
            figure(2*j+1)
            subplot(4,1,i-4);
        end
        plot(x(i,:,j))
        title(['imf' num2str(j) '-' num2str(i)])
    end
end

B=zeros(8,2,3);
for j=1:3
    for i=1:8
        [Max index]=max(x(i,:,j));
        B(i,2,j)=index;
        B(i,1,j)=Max;
    end
end

上一个:求一段用matlab读取wav文件的程序
下一个:我的matlab程序怎么不出图呢,帮忙指点,必有重谢。。。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,