我正在尝试使用小波分析和多分辨率分析(MRA)对1-D信号执行DWT并制作3D图。
简而言之,MRA将采用离散采样数据集并对其进行小波分析。
每次通过产生前一次运行的1/2个样本。我最终得到一个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不能在图表中插入那么多数据。我尝试过网格,冲浪,功能区,情节3等 - 但它要求所有矢量长度相同。将NaN或0置于不可靠的结果。
到目前为止,我所做的最好的事情是使用功能区将数据表示为条带 - 但这也表示它所代表的数据存在问题。
我已尽力阅读Matlab中的帮助页面,但没有取得多大进展。 有人能把我推向正确的方向吗?
2012年11月的另一个更新 由于网格边缘颜色,高密度冲浪图将显示为完全黑色。 要禁用它,请使用以下函数: 冲浪(zi,'EdgeColor','无');
通过调整进行更新 我仍然不相信这是最终的解决方案,但这是我尽最大努力产生热波,如随机数据的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');