1

我正在尝试使用带有多分辨率分析 (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');

使用线性化的随机离散 3D 图

4

0 回答 0