clear
% 加载超声波数据
load('sj.mat'); % 替换为您的数据文件
% 使用小波进行降噪处理
num_samples = size(unnamed, 1);
denoisedSignal = zeros(size(unnamed));
for i = 1:num_samples
denoisedSignal(i, :) = wdenoise(unnamed(i, :), 2, 'Wavelet', 'db4', 'DenoisingMethod', 'UniversalThreshold');
end
% 使用傅里叶变换进行特征提取
num_features = 100;
features = abs(fft(denoisedSignal, [], 2));
features = features(:, 150:num_features);
% 归一化特征
normalizedFeatures = (features - mean(features, 1)) ./ std(features, 1);
% 准备训练和测试数据
trainRatio = 0.8;
[trainInd, ~, testInd] = dividerand(size(normalizedFeatures, 1), trainRatio, 0, 1 - trainRatio);
trainData = normalizedFeatures(trainInd, :);
trainLabels = labels(trainInd);
testData = normalizedFeatures(testInd, :);
testLabels = labels(testInd);
% 创建并训练BP神经网络
hiddenLayerSize = 20;
net = patternnet(hiddenLayerSize);
net.divideParam.trainRatio = 1;
net.divideParam.valRatio = 0;
net.divideParam.testRatio = 0;
net.trainParam.epochs = 200;
net.trainParam.goal = 1e-5;
net.trainParam.min_grad = 1e-5;
trainTargets = ind2vec(trainLabels');
[net, tr] = train(net, trainData', trainTargets);
% 测试网络
predictedLabels = net(testData');
[~, predictedClass] = max(predictedLabels);
actualClass = testLabels;
accuracy = sum(predictedClass' == actualClass) / length(actualClass);
fprintf('Accuracy: %.2f%%\n', accuracy * 100);
导入251x4超声波原始信号,运行提示检查对函数 'labels' 的调用中是否缺失参数或参数数据类型不正确(出错 Untitled (line 24)),代码如何改进,是不是特征提取有问题