小白初学基于FPGA实现CNN(三)—MATLAB数据集生成

目的

利用简单的CNN网络实现对不同波形的识别,利用MATLAB生成带有高斯白噪声的正弦波,余弦波,以及三角波。MATLAB代码如下:

clc
clear
% 设置参数
num_datasets = 1000; % 总共生成的测试集数量
num_points = 100;    % 每个测试集的数据点数
fs = 1000;           % 采样频率,单位Hz
t = (0:num_points-1) / fs; % 时间向量

% 信号频率
f_sin = 10;  % 正弦信号频率 10 Hz
f_cos = 10;  % 余弦信号频率 10 Hz
f_tri = 10;  % 三角波信号频率 10 Hz

% 信号幅值
amplitude = 10;  % 信号幅值

% 生成测试集
datasets = cell(num_datasets, 3);  % 创建一个元胞数组来存储数据

for i = 1:num_datasets
    % 正弦信号
    sin_wave = amplitude * sin(2 * pi * f_sin * t);  % 信号幅值调整为60,频率为10Hz
    % 计算正弦信号的功率
    signal_power_sin = rms(sin_wave)^2;
    % 随机选择一个SNR,SNR范围是10到15之间
    SNR_sin = rand() * 5+10;  % SNR范围是10到15之间
    % 根据目标SNR计算噪声标准差
    noise_std_sin = signal_power_sin / (10^(SNR_sin / 10));
    noisy_sin = sin_wave + noise_std_sin * randn(size(t));  % 添加噪声
    
    % 余弦信号
    cos_wave = amplitude * cos(2 * pi * f_cos * t);  % 信号幅值调整为60,频率为10Hz
    % 计算余弦信号的功率
    signal_power_cos = rms(cos_wave)^2;
    % 随机选择一个SNR,SNR范围是15到20之间
    SNR_cos = rand() * 5+10;  % SNR范围是10到15之间
    % 根据目标SNR计算噪声标准差
    noise_std_cos = signal_power_cos / (10^(SNR_cos / 10));
    noisy_cos = cos_wave + noise_std_cos * randn(size(t));  % 添加噪声
    
    % 三角波信号
    tri_wave = amplitude * sawtooth(2 * pi * f_tri * t, 0.5);  % 信号幅值调整为60,频率为10Hz
    % 计算三角波信号的功率
    signal_power_tri = rms(tri_wave)^2;
    % 随机选择一个SNR,SNR范围是10到15之间
    SNR_tri = rand() * 5+10;  % SNR范围是10到15之间
    % 根据目标SNR计算噪声标准差
    noise_std_tri = signal_power_tri / (10^(SNR_tri / 10));
    noisy_tri = tri_wave + noise_std_tri * randn(size(t));  % 添加噪声
    
    % 将每个数据集存储到元胞数组中
    datasets{i, 1} = noisy_sin;  % 存储正弦信号
    datasets{i, 2} = noisy_cos;  % 存储余弦信号
    datasets{i, 3} = noisy_tri;  % 存储三角波信号
end

% 可以查看某一组数据的内容
figure;
subplot(3,1,1);
plot(t, datasets{1,1});
title('Noisy Sine Wave');
subplot(3,1,2);
plot(t, datasets{1,2});
title('Noisy Cosine Wave');
subplot(3,1,3);
plot(t, datasets{1,3});
title('Noisy Triangle Wave');

 代码说明:

(1)一维数据点数为100,余弦,正弦以及三角信号的样本数量个1000个,总共有3000个训练样本。

(2)所加入的噪声信噪比在10~15db之间。噪声随机。

效果展示:

 将产生的数据存入txt中。

% Save datasets to txt files
% 打开一个txt文件用于写入
fileID_x = fopen('feature_point.txt', 'w');  % 'w'表示写入模式
fileID_y = fopen('exportation.txt', 'w');  % 'w'表示写入模式
% 检查文件是否成功打开
if fileID_x == -1
    error('文件打开失败');
end

% 将 datasets 中的内容逐行写入文件
for i = 1:size(datasets, 1)  % 遍历每一行
    for j = 1:size(datasets, 2)  % 遍历每一列
        % 检查该单元是否为数值
        if isnumeric(datasets{i, j})
            % 如果是数值类型,使用'%g'格式
            fprintf(fileID_x, '%g ', datasets{i, j});
        else
            % 否则,假设是字符串,使用'%s'格式
            fprintf(fileID_x, '%s ', datasets{i, j});
        end
        output = j-1;
        fprintf(fileID_y, '%g ', output);   

        fprintf(fileID_x, '\n');
        fprintf(fileID_y, '\n');
    end
    % 写入换行符

end

% 关闭文件
fclose(fileID_x);
fclose(fileID_y);

代码说明:

(1) 样本存在一个txt中,标签存在另一个txt中,并且样本与标签一一对应。

(2)数据存储格式为每个样本数据以空格隔开,样本与样本之间用换行隔开,标签存储类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crystal(mercy)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值