核心程序:
%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
运行效果: