我正在尝试使用带有多分辨率分析 (MRA) 的小波分析对 1-D 信号执行 DWT 并制作 3D 图。
简而言之,MRA 将采用离散的采样数据集并对其进行小波分析。
每次通过产生前一次运行的 1/2 样本。我最终得到一个 X x Y 矩阵,每个值中都存储了一个幅度。X 是样本数(或时间),Y 是“细节”小波结果。数据矩阵可能如下所示:
[ 1 1 1 1 2 4 8 2 1 1 1 1 2 1 1 2 ]
[ 1 . 1 . 3 . 6 . 1 . 1 . 2 . 1 . ]
[ 1 . . . 3 . . . 1 . . . 2 . . . ]
[ 1 . . . . . . . 1 . . . . . . . ]
这 '。' 将是 NaN 或 0 或其他可能的东西(我假设我做错了什么)。
我想制作这样的情节:
Matlab 似乎无法在图中插入那么多数据。我尝试过 meshgrid、surf、ribbon、plot3 等——但它要求所有向量的长度相同。输入 NaN 或 0 会导致结果不可靠。
到目前为止,我所做的最好的事情是使用功能区将数据表示为条带 - 但这也存在它所表示的数据的问题。
我已尽力阅读 Matlab 中的帮助页面,但没有取得太大进展。有人可以将我推向正确的方向吗?
2012 年 11 月的另一个更新 高密度冲浪图由于网格边缘颜色将显示为完全黑色。要禁用它,请使用以下函数: surf(zi, 'EdgeColor', 'none');
调整更新 我仍然不相信这是最终的解决方案,但这是我在产生像 3D 随机数据图这样的热浪方面的最大努力。这是否会帮助我意识到我的信号数据是另一回事。
% initialize the matrix of sampled data
indx = 1;
data = NaN(5, 128);
for row=1:5
for col=1:128
if ( mod(col-1, indx) == 0)
data(row, col) = rand();
end
end
indx = power(2, row);
end
% Linearize the data in each row to overcome NaN entries
for row=1:5
fprintf('Linear interpolation for row %d\n', row);
indx = NaN;
for col=1:128
if (data(row, col) ~= NaN) || (col == 128)
if isnan(indx)
% initalize first point
indx = col;
elseif isnan(data(row,col)) && (col ~= 128)
% ignore NaN values between 1 and N-1
elseif ((col-1) ~= indx)
fprintf('Creating linspace from col=%d to indx=%d\n', col, indx)
if (col == 128)
% first row will always contain all points
v = linspace(data(row, indx), data(1, col), col+1-indx);
else
v = linspace(data(row, indx), data(row, col), col+1-indx);
end
i=1;
for j=indx:col
data(row,j) = v(i); % update our data
i = i + 1; % increment counter
end
indx = col;
elseif ((col-1) == indx)
indx = NaN;
end
end
end
end
% Populate the X and Y vectors, X is columns, Y is rows, Z is data
xmin = 1;
ymin = 1;
xmax = 128;
ymax = 5
[X, Y] = meshgrid(1:5, 1:128);
[xi, yi] = meshgrid(.1:.1:5, 0:.5:128);
zi = griddata(X, Y, data.', xi, yi);
surf(zi);
% disable edge color for high density plots (or it will look solid black)
surf(zi, 'EdgeColor', 'none');