请教matlab动态更新三维图的问题.一个列数很大的二维矩阵(比如10000列.这里行数不重要,故不提),要实现只显示一定数目的列(比如只显示1000列),要滚动显示.意思是:从第一列开始显示,每
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/01 15:36:25
![请教matlab动态更新三维图的问题.一个列数很大的二维矩阵(比如10000列.这里行数不重要,故不提),要实现只显示一定数目的列(比如只显示1000列),要滚动显示.意思是:从第一列开始显示,每](/uploads/image/z/5466652-52-2.jpg?t=%E8%AF%B7%E6%95%99matlab%E5%8A%A8%E6%80%81%E6%9B%B4%E6%96%B0%E4%B8%89%E7%BB%B4%E5%9B%BE%E7%9A%84%E9%97%AE%E9%A2%98.%E4%B8%80%E4%B8%AA%E5%88%97%E6%95%B0%E5%BE%88%E5%A4%A7%E7%9A%84%E4%BA%8C%E7%BB%B4%E7%9F%A9%E9%98%B5%EF%BC%88%E6%AF%94%E5%A6%8210000%E5%88%97.%E8%BF%99%E9%87%8C%E8%A1%8C%E6%95%B0%E4%B8%8D%E9%87%8D%E8%A6%81%2C%E6%95%85%E4%B8%8D%E6%8F%90%EF%BC%89%2C%E8%A6%81%E5%AE%9E%E7%8E%B0%E5%8F%AA%E6%98%BE%E7%A4%BA%E4%B8%80%E5%AE%9A%E6%95%B0%E7%9B%AE%E7%9A%84%E5%88%97%EF%BC%88%E6%AF%94%E5%A6%82%E5%8F%AA%E6%98%BE%E7%A4%BA1000%E5%88%97%EF%BC%89%2C%E8%A6%81%E6%BB%9A%E5%8A%A8%E6%98%BE%E7%A4%BA.%E6%84%8F%E6%80%9D%E6%98%AF%EF%BC%9A%E4%BB%8E%E7%AC%AC%E4%B8%80%E5%88%97%E5%BC%80%E5%A7%8B%E6%98%BE%E7%A4%BA%2C%E6%AF%8F)
请教matlab动态更新三维图的问题.一个列数很大的二维矩阵(比如10000列.这里行数不重要,故不提),要实现只显示一定数目的列(比如只显示1000列),要滚动显示.意思是:从第一列开始显示,每
请教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
请教matlab动态更新三维图的问题.一个列数很大的二维矩阵(比如10000列.这里行数不重要,故不提),要实现只显示一定数目的列(比如只显示1000列),要滚动显示.意思是:从第一列开始显示,每
不知可否满足要求
运行环境: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