Rubber Band 算法作用过程(视频帧)

发布于:2025-07-04 ⋅ 阅读:(12) ⋅ 点赞:(0)

核心程序: 

%zhouzhichao
%25年6月3日
%编写Rubber band程序并测试

clear
clc
close all


%%
%生成信号
list = [  2,   6;
    0.3,   4;
    0.17 , 2;
    0.125, 0;
    0.07, -2;
    0.05, -4;];


%信号生成:

[s1,h1] = mysigduo(0.25,'BPSK');
% [s2,h2] = mysigduo(index_rd(2),'BPSK');
% [s3,h3] = mysigduo(index_rd(3),'LFM');
% [s4,h4] = mysigduo(index_rd(4),'FRANK');

% S_raw = 3.1*s1 + 2.5*s2 + s3 + 2.5*s4;
S_raw = 3.1*s1;

snr_i=1;

%信号加噪:
snr = list(snr_i, 2);


S = list(snr_i, 1)*S_raw + ones(size(S_raw));


%生成时频图:
[tfr,t,f] = tfrctfd2(S);

%生成3D时频图:
% 获取幅度
tfr_asb = abs(tfr);

% 计算最大值,用于caxis
level = max(max(tfr_asb(:, 200:800)));
new_t = t / 1000;  % 将t轴的值缩小1000倍
tfr_asb = tfr_asb/max(tfr_asb(:));
% 创建三维图形
figure;

% origin_y1 = 0.225;
% origin_y2 = 0.275;
%
% y1 = origin_y1 + 0;
% a = round(y1/0.5*1024);
% tfr_asb(a-1:a+1,:)=1;


for k=0:0.001:0.02
    hold off
    surf(new_t, f, tfr_asb, 'EdgeColor', 'none'); % 使用surf来创建3D图
    colormap('gray');
    xlim([0,1])
    ylim([0.2,0.3])
    % 设置x轴的刻度
    
    % 设置轴标签
    % xlabel('Normalized Time');
    % ylabel('Normalized Frequency');
    % zlabel('Normalized Amplitude');
    
    % 调整视角
    view(-42.6, 84);
    % 可选:暂停使图形实时更新
    pause(0.05);
    
    set(gca, 'FontName', 'Times New Roman');
    
    ax = gca;  % 获取当前坐标轴
    ax.XColor = 'none';  % 隐藏 x 轴
    ax.ZColor = 'none';  % 隐藏 z 轴
    % grid off;
    
    ax = gca;  % 获取当前坐标轴
    ax.YAxis.FontSize = 14;  % 设置 y 轴刻度标签的字体大小为 14
    % surf(X, Y, Z, 'FaceColor', 'interp', 'EdgeColor', 'none');  % 设置颜色插值和去除边框
    % box off;
    
    %%
    %Rubber band算法
    
    %差了0.05
    %0.05-0.03=0.02
    L0 = 0.01;
    
    origin_y1 = 0.225;
    origin_y2 = 0.275;
    
    
    %     k = 0.015;
    y2 = origin_y2 - k;
    y1 = origin_y1 + k;
    delta_y = y2 - y1;
    
    delta_L = 2*(delta_y-L0);
    
    F = delta_L/L0;%F同样是相对拉伸长度,因为没加系数
    
    
    a = round(y1/0.5*1024);
    % tfr_asb(a-1:a+1,:)=1;
    
    height = max(tfr_asb(a,:));
    
    resistance = max(tfr_asb(a,:));
    
    hold on;  % 保持当前图形
    %rectangle('Position', [x, y, width, height])
    % rectangle('Position', [0, 0.225, 1, 0.05], 'EdgeColor', 'r', 'LineWidth', 2);
    
    
    
    z_height = height;  % 可以更改这个值来调整框在z轴的高度
    
    % 绘制三维矩形框,使用patch函数
    x = [0 1 1 0];  % x坐标
    y = [y1 y1 y2 y2];  % y坐标(根据需要设置)
    z = [z_height z_height z_height z_height];  % z轴的高度,所有顶点高度相同
    
    % 使用patch来创建矩形
    RGB = [1 F/8*1 F/8*1];
    patch(x, y, z, 'white', 'FaceAlpha', 0.5, 'EdgeColor', [1 0 0], 'LineWidth', 2);  % 'r'为颜色,'FaceAlpha'设置透明度
    
%     saveas(gcf,['D:\实验室\论文\论文-多信号参数估计\JCR3\Experiment\Rubber band performance\img of diff delta y\relative delta L ',num2str(F),'.jpg'])
    print(gcf, ['D:\实验室\论文\论文-多信号参数估计\JCR3\Experiment\Rubber band performance\img of diff delta y\relative delta L ', num2str(round(F,3)), '.jpg'], '-djpeg', '-r300');

end

运行效果: 


网站公告

今日签到

点亮在社区的每一天
去签到