在 MATLAB 中使用绘图时出错。无效数据参数

问题描述 投票:0回答:1

我正在使用 MATLAB 2021a。我有回归问题。我在使用缓冲区时遇到错误。

问题其实就在这里。

Q_signal 为 1000x1 双倍 和 estimated_Q_signals 为 991x1 单元 每个单元格都是 1x10 行向量。 所以我得到了这个错误。 使用绘图时出错 数据参数无效。 Aws_LSTM_PhaseMeasure 中的错误(第 69 行) 绘图(时间(2:结束),estimated_Q_signals(2:结束),“显示名称”,“估计的 Q 信号”);

这是代码。

% Parameters
n_samples = 1000;
signal_frequency = 10;
time = linspace(0, 1, n_samples)';
I_signal = cos(2 * pi * signal_frequency * time);
Q_signal = sin(2 * pi * signal_frequency * time);

% Create pairs of I and Q signals
X = I_signal(1:end-1); % I signal as input
y = Q_signal(2:end);   % Corresponding Q signal as target output

% Define sequence length (number of time steps in each sequence)
sequence_length = 10;  % You can adjust this as needed

% Prepare sequences of input and target data
X_sequences = buffer(X, sequence_length, sequence_length-1, 'nodelay').';
y_sequences = buffer(y, sequence_length, sequence_length-1, 'nodelay').';

% Split the dataset into training and testing sets
rng(0); % Set random seed for reproducibility
split_ratio = 0.8;
split_idx = round(split_ratio * size(X_sequences, 1));
X_train = X_sequences(1:split_idx, :);
y_train = y_sequences(1:split_idx, :);
X_test = X_sequences(split_idx+1:end, :);
y_test = y_sequences(split_idx+1:end, :);

% Reshape data for LSTM input (numObservations, numTimeSteps, numFeatures)
X_train = reshape(X_train, [1, size(X_train, 1), sequence_length]);
y_train = reshape(y_train, [1, size(y_train, 1), sequence_length]);
X_test = reshape(X_test, [1, size(X_test, 1), sequence_length]);
y_test = reshape(y_test, [1, size(y_test, 1), sequence_length]);

% Create an LSTM-based neural network
layers = [
    sequenceInputLayer(1) % Sequence input layer for single scalar input
    lstmLayer(64, 'OutputMode', 'sequence')
    lstmLayer(32, 'OutputMode', 'sequence')
    fullyConnectedLayer(1)
    regressionLayer % Regression layer
];

fn=@(z) reshape( num2cell(permute(z,[1,3,2]),2)  ,[],1);
X_train=fn(X_train);
y_train=fn(y_train);
X_test=fn(X_test);
y_test=fn(y_test);

options = trainingOptions('adam', ...
    'MaxEpochs', 50, ...
    'MiniBatchSize', 32, ...
    'ValidationData', {X_test, y_test}, ...
    'Plots', 'training-progress', ...
    'InitialLearnRate', 0.01);

% Train the LSTM network
net = trainNetwork(X_train, y_train, layers, options);

% Use the trained model to estimate Q signals from new I signals
new_I_signals = cos(2 * pi * signal_frequency * time); % Replace with your new I signals
new_X_sequences = buffer(new_I_signals, sequence_length, sequence_length-1, 'nodelay').';
new_X_sequences = reshape(new_X_sequences, [1, size(new_X_sequences, 1), sequence_length]);
estimated_Q_signals = predict(net, fn(new_X_sequences));

% Plot the original Q signals and estimated Q signals
figure;
plot(time(2:end), Q_signal(2:end), '--', 'DisplayName', 'Original Q Signal');
hold on;
plot(time(2:end), estimated_Q_signals(2:end), 'DisplayName', 'Estimated Q Signal');
xlabel('Time');
ylabel('Amplitude');
legend('Location', 'best');
title('Q Signal Estimation with LSTM');
grid on;
matlab signals lstm
1个回答
0
投票

estimated_Q_signals 是数据中的元胞数组。您可以将元胞数组打开为

estimated_Q_signals{1}
或提取该元胞内内容的任何其他索引。如果您想将所有内部转储到一个向量中,您可以执行
x = [estimated_Q_signals{:}]
但请记住,这与时间变量的大小不同。我想这是一个 matlab 做了多少预测的问题。

© www.soinside.com 2019 - 2024. All rights reserved.