나는 FFT (고속 푸리에 변환)로 필터링 된 간섭계의 신호를 가지고있어 필터 자체가 정상적으로 작동합니다. 들어, 내가 선택한 범위에서 신호를 필터링, 나는 또한 모든 범위 에서이 작업을 수행 할 수 있지만 부품 및 필터/분석 각 부분에이 신호를 잘라, 자동으로 할 수 또는 범위를 입력 할 수 있습니다. 내가 원하는. 이걸 자르려면 아마도 창을 써야 할 것 같은데?차트에서 부품으로 신호 나누기
프로그램의 스크린 샷 :
모든 파일에 대한 링크 : here, here 및 here.
는내 코드 :
clear all;
close all;
clc;
file_name = 'W0009.dat';
[lam, I] = read_spectrum(file_name);
lam = lam*1e-3;
figure(1)
plot(lam,I, '-k');hold on;
mask = lam >= 1.6 & lam <= 1.8;
N = sum(mask);
w = hamming(N);
if mod(N, 2) == 0
f = (-fix(N/2) : fix(N/2) - 1)/N; % czestotliwości dla N parzystego
else
f = (-fix(N/2) : fix(N/2))/N; % czestotliwości dla N nieparzystego
end
F = 2*fftshift(fft(I(mask)))/N;
W = fftshift(fft(I(mask).*w));
m = abs(f) <= 0.04;
F(not(m)) = 0;
figure(2)
semilogy(f, abs(F), '-k');hold on;
% semilogy(f, abs(W), '-r');hold on;
fI = -abs(N*ifft(fftshift(F))/2);
figure(3);
plot(lam(mask), I(mask), '-k');hold on;
plot(lam(mask), fI, '-r');
% M = 258; b = fir1(M, 0.45);
% I1 = I;
% I1 = filter(b, 1, I1); I1(1 : end - floor(M/2)) = I1(floor(M/2) + 1 : end);
% I1 = filtfilt(b, 1, I1);
% plot(lam,I1);hold on;
%
% M = 38; b = fir1(M, 0.15);
% I2 = I;
% I2 = filter(b, 1, I2); I2(1 : end - floor(M/2)) = I2(floor(M/2) + 1 : end);
% I2 = filtfilt(b, 1, I2);
% plot(lam,I2);hold on;
%
% M = 52; b = fir1(M, 0.05);
% I3 = I;
% I3 = filter(b, 1, I3); I3(1 : end - floor(M/2)) = I3(floor(M/2) + 1 : end);
% I3 = filtfilt(b, 1, I3);
% plot(lam,I3);hold on;
%
% fm1 = lam < 1.8394 & lam > 1.5584;
% Ifinal1 = I1(fm1);
% fm2 = lam > 1.8394 & lam < 1.98138;
% Ifinal2 = I2(fm2);
% fm3 = lam < 2.216 & lam > 1.98138;
% Ifinal3 = I3(fm3);
% lamfinal = [lam(fm1);lam(fm2);lam(fm3)];
% Ifinal = [Ifinal1;Ifinal2;Ifinal3];
% close;
% figure(2)
% plot(lamfinal,Ifinal); hold on;
%
% nlam = linspace(lamfinal(1), lamfinal(end), 9*length(lamfinal)).';
% nI = interp1(lamfinal, Ifinal, nlam, 'spline');
% plot(nlam,nI);
%
% close;
% figure(3)
% [PKS1,LOCS1]= findpeaks(nI);
% plot(nlam,nI);hold on;
% plot(nlam(LOCS1),PKS1,'or'); hold on;
% [PKS2,LOCS2]= findpeaks(-nI,'MinPeakWidth',25);
% % PKS1 = [PKS1(1:73);PKS1(75:end)];
% % LOCS1 = [LOCS1(1:73);LOCS1(75:end)];
% % PKS2 = [PKS2(1:75);PKS2(77:end)];
% % LOCS2 = [LOCS2(1:75);LOCS2(77:end)];
% plot(nlam(LOCS2),-PKS2,'or');
% axis tight;
"어떤 부분에서 신호를 자르려면"어떤 기준을 사용할지 잘 모릅니다. 수동으로 어떻게 하시겠습니까? 어떤 부분을 선택하겠습니까? –
분석 범위가 선험적이라면 세 가지 범위 모두에서 작동하는 루프를 프로그램하면됩니다. 범위 알고리즘을 사용하여 범위 경계를 정의해야한다면 더 어려울 것입니다. 나는 회답에 대한 제안을 제안 할 것이다. –
게시물을 파손하지 마십시오. – Riker