Google과 관련하여 아무 것도 찾을 수 없었으므로 내 질문 자체에 결함이있을 수 있습니다.MATLAB : 대수 값 플롯의 동적 범위 조정
다양한 고정 동적 범위에 값 (Z) 행렬을 표시하고자합니다. 이 경우 0dB, 10dB, ..., 40dB로 고정됩니다.
나의 현재 접근 Zmag = ABS (Z)을 찾는 것이다.^2, 아연 = ZDB가 = (Zmag) 정규화 * LOG10 10 (1 + 아연)
다른 동적 범위를 이용하기 위해서 (말하자면, 10dB) Zdb를 찾기 전에 'Zn (Zn < 0.1) = 0.1'을 포함합니다. 20dB에 대해서는 0.01의 관심 값이 변경되는 것을 제외하고는 똑같이합니다.
그런 다음 Zn의 컬러 메시 플롯을 만들고 XY (맨 위, 3D 관점에서) 플롯을보고 이미지 C (Zn)와 비슷한 것을 확인합니다. 동적 범위를 늘리면 더 자세한 그림이 표시됩니다 (이 경우 최대 값과 최소값 사이에 더 많은 색상이 있음).
내 현재의 방법은 10dB 것이해야한다 (내가 생각하는)로 수행 그러나 40dB dynamic range mesh plot
, 내 0,20,30 사이의 차이를 볼 수 없으며, 40dB 플롯 : 10dB dynamic range mesh 에 비해 40dB로 . 0dB에서 40dB까지 점차적으로 값이 증가 할 것으로 기대됩니다.
- 딜란
편집 : 여기에 몇 가지 샘플 코드가 있습니다. 그것은 실제 코드의 SNIPPIT이지만, 여전히 실행해야합니다
%% Constants
fnum = 1;
Fc = 1/16;
taup = 128;
taumin = 1;
taumax = 512;
taux = taumin:taumax;
%% Signal
l = 1:16; %Signal length
s = sin(2*pi*Fc*l); %Original Signal
sig = zeros([1 taup+512]);
sig(taup:taup+size(l,2)-1) = s;
[mfr,fdy] = MatchedFilterResponse(sig,taup,l);
Z = mfr;
slices = true;
%full dynamic range
name = 'Short Tone Ping results with 0dB range';
Zmag = abs(Z).^2;
Zn = normalizeMat(Zmag);
Zdb = 10*log10(1+Zn);
fnum = plotSurfaces(taux,fdy,Zdb,fnum,name,slices);
slices = false;
%40dB dynamic range
name = 'Short Tone Ping results with 40dB range';
Z40mag = Zmag;
Z40n = normalizeMat(Z40mag);
Z40n(Z40n<0.0001) = 0.0001;
Z40db = 10*log10(1+Z40n);
fnum = plotSurfaces(taux,fdy,Z40db,fnum,name,slices);
function [mfr,fdy] = MatchedFilterResponse(sig,taup,l)
Fdmin = -1/16;
Fdmax = 1/16;
Fdinc = (0.125)/(255);
fdy = linspace(Fdmin,Fdmax,256);
i = 0;
for tau = 1:512
i = i+1;
j = 0;
for Fd = Fdmin:Fdinc:Fdmax
j = j+1;
a = sig(l+taup-1);
b = sig(l+tau).*exp(1i*2*pi*Fd*l);
mfr(j,i) = sum(a.*b);
end
end
return
end
function [fnum] = plotSurfaces(taux,fdy,z,fnum,name,slices)
fid = figure(fnum);
axes1 = axes('Parent',fid);
grid(axes1,'on');
hold(axes1,'all');
msh = mesh(taux,fdy,z,'Parent',axes1);
xlabel ('Delay - seconds');
ylabel ('Frequency offset from center frequency - Cycles/sample');
zlabel ('Ambiguity function (Normalized Magnitude-Squared)','Visible','off');
fname = strcat(name,' (Ambiguity Function z(\tau;F_d))');
title(fname);
ax = axis;
axis([50 200 ax(3) ax(4)])
cb = colorbar('peer',axes1);
set(get(cb,'ylabel'),'String','Magnitude-Squared (dB)');
hold off;
fnum = fnum + 1;
return
end
예제 코드가 질문에 추가되었습니다. 나는 당신이 여기에 올린 것을 시도해 보았고, 그것이 내가 기대할 수있는 방식으로 작동하는 것처럼 보이지만, 정확히 0dB, 10dB 등의 범위를 임의로 대신 사용하고 싶습니다. – Dylan
색상 맵은 선형 맵 (값 -> 맵 인덱스)이므로 정렬 된 Zn 값의 제한 값에 대한 인덱스를 찾아이를 사용하여 선형 변경을 시작할 색상 맵의 인덱스를 찾아야합니다. 예를 들어 10dB의 경우 Zlim = 0.1이므로 데이터 값이 100 개인 경우 50 번째 값 (정렬 된 데이터)은 0.1이고 128 색, 50/100 * 128 = 64이므로 0이 아닌 값을 시작하는 인덱스 의 색상 표는 64입니다. –
우수! 나는 이것을 시험해 볼 것이다, 고마워! – Dylan