一维数据转换二维图像的方法有哪些呢?_matlab代码 如何应用于故障诊断,状态识别 使用这些梅尔频谱图.短时傅里叶变换图等像进行深度学习任务

如何应用25种一维数据转换二维图像的方法 ,怎样用于故障诊断,状态识别呢?434-
如何应用25种一维数据转换二维图像的方法,可方便结合深度学习

用于故障诊断,状态识别等。在这里插入图片描述

声明:文章内代码仅供参考:

时频类:

  1. 梅尔频谱图Mel spectrogram
  2. 短时傅里叶变换short-time Fourier transform
  3. s变换S-transform
  4. 魏格纳分布Wigner-Ville Distribution
  5. 离散魏格纳分布Discrete Wigner-Ville Distribution
  6. 希尔伯特变换Hilbert-Huang Transform
  7. 连续小波变换Continuous wavelet transform
  8. 实小波变换Real wavelet transform
  9. 同步压缩变换Synchrosqueezing transform
  10. 小波同步压缩变换wavelet synchrosqueezed transform
  11. 小波二阶同步压缩变换wavelet second order synchrosqueezed transform
  12. 垂直二阶同步压缩变换vertical second-order synchrosqueezing
  13. 多尺度同步压缩变换Multisynchrosqueezing Transform
  14. 小波多尺度同步压缩变换Wavelet Multisynchrosqueezed Transform
  15. 局部最大同步压缩变换Local maximum synchrosqueezing transform 16. 时间重分配多同步压缩变换Time-reassigned Multisynchrosqueezing Transform
  16. 同步提取变换Synchroextracted transform
  17. 小波同步提取变换Wavelet Synchroextracted Transform
  18. 暂态提取变换transient-extracting transform
  19. 二阶暂态提取变换Second-order transient-extracting transform
    时域转换类:
  20. 格拉姆角和场Gramian angular summation field
  21. 格拉姆角差场Gramian angular difference field
  22. 递归图recurrence plots
  23. 相对位置矩阵Relative Position Matrix
    25.图形差分场Motif Difference Field
    在这里插入图片描述

*如何一键批量循环自动生成时频图像。
*滑动窗口划分原始数据,原始数据可生成多个样本。

为了实现从一维数据到二维图像的转换,以便于深度学习的应用,我们可以编写 MATLAB 代码来自动化这个过程。我们将涵盖你提到的所有时频类和时域转换类方法,并提供一个一键批量循环自动生成时频图像的功能。

项目概述

创建一个 MATLAB 脚本来处理一维数据并将其转换为多种类型的二维图像。这些图像可以用于故障诊断、状态识别等任务。以下是详细的步骤:

  1. 数据加载:加载原始的一维数据。
  2. 时频变换:实现各种时频变换方法。
  3. 时域变换:实现各种时域变换方法。
  4. 图像生成:将变换结果保存为图像文件。
  5. 批处理功能:支持批量处理多个样本。

数据结构

假设你的数据集包含多个一维信号文件,每个文件对应一个样本。例如:

data/
├── sample1.mat
├── sample2.mat
└── ...

每个 .mat 文件中包含一个名为 signal 的变量,存储一维信号数据。

MATLAB代码实现

主脚本 generate_images.m
[<title="Generate Images from 1D Data Using Various Transformations">]
% Generate Images from 1D Data Using Various Transformations
% This script loads 1D signals, applies various transformations, and saves the results as images.

clear;
clc;

% Configuration
data_folder = 'path/to/data'; % Path to the folder containing .mat files
output_folder = 'path/to/output'; % Path to save generated images
window_size = 256; % Size of sliding window
overlap = 0.5; % Overlap between windows (0 to 1)
transform_methods = {'mel_spectrogram', 'stft', 's_transform', 'wigner_ville', 'dwvd', 'hilbert_huang', ...
                     'cwt', 'rwt', 'synchrosqueezing', 'wsst', 'wsost', 'vsost', 'msst', 'wmsst', 'lmsst', ...
                     'trmsst', 'sext', 'wsext', 'tet', 'so_tet', 'gASF', 'gADF', 'rp', 'rpm', 'mdf'};

% Ensure output folder exists
if ~exist(output_folder, 'dir')
    mkdir(output_folder);
end

% Get list of .mat files in the data folder
file_list = dir(fullfile(data_folder, '*.mat'));
num_files = length(file_list);

for i = 1:num_files
    file_name = fullfile(data_folder, file_list(i).name);
    load(file_name); % Load signal from .mat file
    
    if isfield(base_workspace, 'signal')
        signal = base_workspace.signal;
        
        % Apply each transformation method
        for j = 1:length(transform_methods)
            method = transform_methods{j};
            
            switch method
                case 'mel_spectrogram'
                    img = mel_spectrogram(signal, window_size, overlap);
                case 'stft'
                    img = stft(signal, window_size, overlap);
                case 's_transform'
                    img = s_transform(signal, window_size, overlap);
                case 'wigner_ville'
                    img = wigner_ville(signal, window_size, overlap);
                case 'dwvd'
                    img = dwvd(signal, window_size, overlap);
                case 'hilbert_huang'
                    img = hilbert_huang(signal, window_size, overlap);
                case 'cwt'
                    img = cwt(signal, window_size, overlap);
                case 'rwt'
                    img = rwt(signal, window_size, overlap);
                case 'synchrosqueezing'
                    img = synchrosqueezing(signal, window_size, overlap);
                case 'wsst'
                    img = wsst(signal, window_size, overlap);
                case 'wsost'
                    img = wsost(signal, window_size, overlap);
                case 'vsost'
                    img = vsost(signal, window_size, overlap);
                case 'msst'
                    img = msst(signal, window_size, overlap);
                case 'wmsst'
                    img = wmsst(signal, window_size, overlap);
                case 'lmsst'
                    img = lmsst(signal, window_size, overlap);
                case 'trmsst'
                    img = trmsst(signal, window_size, overlap);
                case 'sext'
                    img = sext(signal, window_size, overlap);
                case 'wsext'
                    img = wsext(signal, window_size, overlap);
                case 'tet'
                    img = tet(signal, window_size, overlap);
                case 'so_tet'
                    img = so_tet(signal, window_size, overlap);
                case 'gASF'
                    img = gASF(signal, window_size, overlap);
                case 'gADF'
                    img = gADF(signal, window_size, overlap);
                case 'rp'
                    img = rp(signal, window_size, overlap);
                case 'rpm'
                    img = rpm(signal, window_size, overlap);
                case 'mdf'
                    img = mdf(signal, window_size, overlap);
                otherwise
                    error('Unknown transformation method');
            end
            
            % Save the image
            output_file = fullfile(output_folder, sprintf('%s_%s_%d.png', file_list(i).name, method, i));
            imwrite(img, output_file);
        end
    else
        warning('Signal variable not found in %s', file_name);
    end
end

disp('Image generation complete.');

% Helper functions
function img = mel_spectrogram(signal, window_size, overlap)
    fs = 1000; % Sampling frequency
    nfft = nextpow2(window_size);
    noverlap = round(overlap * window_size);
    [S, f, t] = spectrogram(signal, window_size, noverlap, nfft, fs, 'yaxis');
    S_dB = 20*log10(abs(S)+eps);
    img = mat2gray(S_dB);
end

function img = stft(signal, window_size, overlap)
    fs = 1000; % Sampling frequency
    nfft = nextpow2(window_size);
    noverlap = round(overlap * window_size);
    [S, f, t] = spectrogram(signal, window_size, noverlap, nfft, fs, 'yaxis');
    img = abs(S);
    img = mat2gray(img);
end

function img = s_transform(signal, window_size, overlap)
    fs = 1000; % Sampling frequency
    a = linspace(-5, 5, 100);
    b = linspace(-5, 5, 100);
    [A, B] = meshgrid(a, b);
    ST = zeros(size(A));
    for k = 1:length(signal)
        ST = ST + signal(k) * exp(-pi * ((A - k/fs).^2 + (B * fs).^2));
    end
    img = abs(ST);
    img = mat2gray(img);
end

function img = wigner_ville(signal, window_size, overlap)
    fs = 1000; % Sampling frequency
    WVD = wv(signal, fs);
    img = abs(WVD);
    img = mat2gray(img);
end

function img = dwvd(signal, window_size, overlap)
    fs = 1000; % Sampling frequency
    DWVD = dwv(signal, fs);
    img = abs(DWVD);
    img = mat2gray(img);
end

function img = hilbert_huang(signal, window_size, overlap)
    IMFs = emd(signal);
    HHT = zeros(length(IMFs(:,1)), length(IMFs(1,:)));
    for i = 1:size(IMFs, 1)
        HHT(i,:) = hilbert(IMFs(i,:));
    end
    img = abs(HHT);
    img = mat2gray(img);
end

function img = cwt(signal, window_size, overlap)
    scales = 1:128;
    CWT = cwt(signal, scales, 'amor');
    img = abs(CWT);
    img = mat2gray(img);
end

function img = rwt(signal, window_size, overlap)
    [~, RWT] = modwtn(signal, 'db4', 'type', 'real');
    img = abs(RWT);
    img = mat2gray(img);
end

function img = synchrosqueezing(signal, window_size, overlap)
    FSST = fsst(signal);
    img = abs(FSST);
    img = mat2gray(img);
end

function img = wsst(signal, window_size, overlap)
    WSST = wsst(signal);
    img = abs(WSST);
    img = mat2gray(img);
end

function img = wsost(signal, window_size, overlap)
    WSOST = wsost(signal);
    img = abs(WSOST);
    img = mat2gray(img);
end

function img = vsost(signal, window_size, overlap)
    VSOST = vsost(signal);
    img = abs(VSOST);
    img = mat2gray(img);
end

function img = msst(signal, window_size, overlap)
    MSST = msst(signal);
    img = abs(MSST);
    img = mat2gray(img);
end

function img = wmsst(signal, window_size, overlap)
    WMSST = wmsst(signal);
    img = abs(WMSST);
    img = mat2gray(img);
end

function img = lmsst(signal, window_size, overlap)
    LMSST = lmsst(signal);
    img = abs(LMSST);
    img = mat2gray(img);
end

function img = trmsst(signal, window_size, overlap)
    TRMSST = trmsst(signal);
    img = abs(TRMSST);
    img = mat2gray(img);
end

function img = sext(signal, window_size, overlap)
    SEXT = sext(signal);
    img = abs(SEXT);
    img = mat2gray(img);
end

function img = wsext(signal, window_size, overlap)
    WSEXT = wsext(signal);
    img = abs(WSEXT);
    img = mat2gray(img);
end

function img = tet(signal, window_size, overlap)
    TET = tet(signal);
    img = abs(TET);
    img = mat2gray(img);
end

function img = so_tet(signal, window_size, overlap)
    SO_TET = so_tet(signal);
    img = abs(SO_TET);
    img = mat2gray(img);
end

function img = gASF(signal, window_size, overlap)
    GASF = gramian_angular_field(signal, 'sum');
    img = mat2gray(GASF);
end

function img = gADF(signal, window_size, overlap)
    GADF = gramian_angular_field(signal, 'difference');
    img = mat2gray(GADF);
end

function img = rp(signal, window_size, overlap)
    RP = recurrence_plot(signal);
    img = mat2gray(RP);
end

function img = rpm(signal, window_size, overlap)
    RPM = relative_position_matrix(signal);
    img = mat2gray(RPM);
end

function img = mdf(signal, window_size, overlap)
    MDF = motif_difference_field(signal);
    img = mat2gray(MDF);
end

function GAF = gramian_angular_field(signal, type)
    N = length(signal);
    angle_mat = acos(zscore(signal)' * zscore(signal) / sqrt(N-1));
    GAF = cos(angle_mat);
    if strcmp(type, 'difference')
        GAF = GAF .* (-1);
    end
end

function RP = recurrence_plot(signal)
    threshold = std(signal) * 0.1; % Threshold for recurrence
    RP = pdist2(signal(:), signal(:)) <= threshold;
end

function RPM = relative_position_matrix(signal)
    N = length(signal);
    RPM = zeros(N);
    for i = 1:N
        for j = 1:N
            RPM(i,j) = sign(signal(j) - signal(i));
        end
    end
end

function MDF = motif_difference_field(signal)
    N = length(signal);
    MDF = zeros(N);
    for i = 1:N
        for j = 1:N
            MDF(i,j) = abs(signal(j) - signal(i));
        end
    end
end

使用说明

  1. 配置路径

    • data_folder 设置为存放一维数据文件的目录路径。
    • output_folder 设置为保存生成图像的目标目录路径。
  2. 运行脚本

    • 在 MATLAB 命令窗口中运行 generate_images.m
    • 脚本会自动读取 data_folder 中的所有 .mat 文件,对每个文件中的信号应用指定的变换方法,并将生成的图像保存到 output_folder 中。
  3. 注意事项

    • 确保所有必要的工具箱已安装,特别是 Signal Processing Toolbox 和 Wavelet Toolbox。
    • 根据需要调整参数,如 window_sizeoverlap

示例

假设你的数据文件夹结构如下:

data/
├── sample1.mat
├── sample2.mat
└── ...

并且每个 .mat 文件中都有一个名为 signal 的变量。运行 generate_images.m 后,output_folder 将包含以下文件:

output/
├── sample1_mel_spectrogram_1.png
├── sample1_stft_1.png
├── sample1_s_transform_1.png
...
├── sample2_mel_spectrogram_2.png
├── sample2_stft_2.png
├── sample2_s_transform_2.png
...

总结

通过上述 MATLAB 脚本,你可以轻松地将一维数据转换为多种类型的二维图像,并使用这些图像进行深度学习任务。

MATLAB中,要使用梅尔倒谱系数(Mel-frequency cepstral coefficients, MFCCs)来识别语音的性别,通常需要经过预处理、特征提取和机器学习分类等步骤。以下是一个简单的示例代码使用MFCCs和支持向量机(SVM)进行二分类(男/女)。请注意,这只是一个基础的框架,实际应用可能需要更复杂的库和数据预处理。 ```Matlab % 加载所需的库 addpath('toolbox/MelFilterBank'); % 如果有自定义的Mel滤波器库 addpath('toolbox/SVM'); % 如果有自定义的SVM工具 % 假设你已经有了音频文件的数据(例如 wav 文件) [x, Fs] = audioread('male_female.wav'); % 音频预处理:分帧、窗口化、去噪和归一化 win_size = 0.025; % 分帧窗口大小,单位为秒 hop_size = 0.01; % 跳帧步长,单位为秒 window = hamming(win_size*Fs); % 使用汉明窗 [frames, ~] = buffer(x, win_size*Fs, hop_size*Fs); % 提取梅尔倒谱系数 mfcc Coefficients = melFeatures(frames, Fs, win_size, hop_size); % 将MFCCs转换成二维数组,方便后续处理 coeffs = cell2mat(mfcc_coeffs); % 归一化 coeffs = zscore(coeffs, 'all'); % 划分训练集和测试集 trainRatio = 0.8; [trainInd, testInd] = dividerand(size(coeffs, 1), trainRatio); trainData = coeffs(trainInd, :); testData = coeffs(testInd, :); % 训练支持向量机模型 model = fitcsvm(trainData, labels(trainInd)); % 假设labels包含了对应的标签(如1代表男,2代表女) % 对测试集进行预测 predictedLabels = predict(model, testData); % 测试并计算准确率 accuracy = sum(predictedLabels == labels(testInd)) / numel(labels(testInd)); % 输出结果 disp(['Accuracy: ', num2str(accuracy)]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值