请教matlab动态更新三维图的问题.
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/11 07:38:59
请教matlab动态更新三维图的问题.
一个列数很大的二维矩阵(比如10000列.这里行数不重要,故不提),要实现只显示一定数目的列(比如只显示1000列),要滚动显示.意思是:从第一列开始显示,每次绘制一列,直到绘制到1000列,然后第1001列绘制到图像的第一列,即整幅图像又从最左边开始绘制,覆盖原来的图像,每次绘制一列,直到绘制到第2000列.,如此循环,要将原矩阵绘制完,也就是滚动显示图像.
现有的方案是,每次都重绘1000列的图像,也就是每次滚动地取10000列里面的1000列,然后画图(imagesc),这样速度很慢,想问下有没有可能每次不需要重新绘制整幅图像,而是只绘制一列的呢?这样也许就能使速度加快很多.
附:现在的程序代码
clear,clc
y1= 100*randn(1,100000);
len = length(y1);
init_point = 1;
n_points = 9;
L = 256;
fft_times = floor((len-L)/n_points+1); % 总变换次数
fft_display = 1000;
N = 512;
f = 4000*linspace(0,1,N+1);
t_tick = 2e-3;
z_f = zeros(N,fft_times);
z_f_display = zeros(N/2+1,fft_display);
for i=1:fft_times
i
data = y1(init_point+(i-1)*n_points:init_point+(i-1)*n_points+L-1); % 每次取数据
z_f(:,i) = fft(data,N); % 频谱,每一列都是一次变换
z_f(:,i) = abs(z_f(:,i));
if i
一个列数很大的二维矩阵(比如10000列.这里行数不重要,故不提),要实现只显示一定数目的列(比如只显示1000列),要滚动显示.意思是:从第一列开始显示,每次绘制一列,直到绘制到1000列,然后第1001列绘制到图像的第一列,即整幅图像又从最左边开始绘制,覆盖原来的图像,每次绘制一列,直到绘制到第2000列.,如此循环,要将原矩阵绘制完,也就是滚动显示图像.
现有的方案是,每次都重绘1000列的图像,也就是每次滚动地取10000列里面的1000列,然后画图(imagesc),这样速度很慢,想问下有没有可能每次不需要重新绘制整幅图像,而是只绘制一列的呢?这样也许就能使速度加快很多.
附:现在的程序代码
clear,clc
y1= 100*randn(1,100000);
len = length(y1);
init_point = 1;
n_points = 9;
L = 256;
fft_times = floor((len-L)/n_points+1); % 总变换次数
fft_display = 1000;
N = 512;
f = 4000*linspace(0,1,N+1);
t_tick = 2e-3;
z_f = zeros(N,fft_times);
z_f_display = zeros(N/2+1,fft_display);
for i=1:fft_times
i
data = y1(init_point+(i-1)*n_points:init_point+(i-1)*n_points+L-1); % 每次取数据
z_f(:,i) = fft(data,N); % 频谱,每一列都是一次变换
z_f(:,i) = abs(z_f(:,i));
if i
不知可否满足要求
运行环境:MATLAB2013a,win 8 Pro,CPU:赛扬 双核1.6GHz,内存:2*2G.楼主配置应该比我的好点,试试吧,好运.
clear,clc,close
y1= 100*randn(1,100000);
len = length(y1);
init_point = 1;
n_points = 9;
L = 256;
fft_times = floor((len-L)/n_points+1); % 总变换次数
fft_display = 1000;
N = 512;
f = 4000*linspace(0,1,N+1);
t_tick = 2e-3;
z_f = zeros(N,fft_times);
z_f_display = zeros(N/2+1,fft_display);
for i=1:fft_times
% i=3
temp=init_point+(i-1)*n_points;
data = y1(temp:temp+L-1); % 每次取数据
z_f(:,i) = fft(data,N); % 频谱,每一列都是一次变换
end
z_f=abs(z_f);
%% 将绘图部分和计算部分隔离,可以减少因计算而产生的延迟
figure;
for i=1:fft_times
display=zeros(size(z_f));
display(:,1:i)=z_f(:,1:i);
k = floor( i/fft_display);
if ~k
z_f_display = display(1:N/2+1,1:fft_display);
else
z_f_display = display(1:N/2+1,[k*fft_display+1:i,(k-1)*fft_display+mod(i,fft_display)+1:k*fft_display]);
end
imagesc((1:fft_display)*t_tick,f(1:N/2+1),z_f_display(1:N/2+1,:));
xlabel('/s');
ylabel('Hz');
axis xy;
colormap(gray);
pause(0.000001);
end
运行环境:MATLAB2013a,win 8 Pro,CPU:赛扬 双核1.6GHz,内存:2*2G.楼主配置应该比我的好点,试试吧,好运.
clear,clc,close
y1= 100*randn(1,100000);
len = length(y1);
init_point = 1;
n_points = 9;
L = 256;
fft_times = floor((len-L)/n_points+1); % 总变换次数
fft_display = 1000;
N = 512;
f = 4000*linspace(0,1,N+1);
t_tick = 2e-3;
z_f = zeros(N,fft_times);
z_f_display = zeros(N/2+1,fft_display);
for i=1:fft_times
% i=3
temp=init_point+(i-1)*n_points;
data = y1(temp:temp+L-1); % 每次取数据
z_f(:,i) = fft(data,N); % 频谱,每一列都是一次变换
end
z_f=abs(z_f);
%% 将绘图部分和计算部分隔离,可以减少因计算而产生的延迟
figure;
for i=1:fft_times
display=zeros(size(z_f));
display(:,1:i)=z_f(:,1:i);
k = floor( i/fft_display);
if ~k
z_f_display = display(1:N/2+1,1:fft_display);
else
z_f_display = display(1:N/2+1,[k*fft_display+1:i,(k-1)*fft_display+mod(i,fft_display)+1:k*fft_display]);
end
imagesc((1:fft_display)*t_tick,f(1:N/2+1),z_f_display(1:N/2+1,:));
xlabel('/s');
ylabel('Hz');
axis xy;
colormap(gray);
pause(0.000001);
end