Matlab中的多分辨率离散小波三维图

时间:2012-10-02 03:50:05

标签: matlab signal-processing matlab-figure wavelet haar-wavelet

我正在尝试使用小波分析和多分辨率分析(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或其他可能的东西(我假设我做错了什么)。

我想制作一个这样的情节:

enter image description here

似乎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');

Random Discrete 3D Plot using linearization

0 个答案:

没有答案