0

아래에 게시 된 spectrogram이 (가) 주어진 비 정상적인 신호를 나타내는 지 알고 싶습니다.스펙트로 그램이 정확한 값을 표시합니까?

이 진정한 표현 인 경우, 나는 음모의 특정 기능에 관한 질문의 수 ... 0 들어

이 -.> 25 가로축에, 왜 그것이까지 신호 성분을 보여주는가 최고 주파수? 나는 첫 번째 지속 시간이 t1 일 때, 나는 신호 x1의 주파수만을보아야한다고 생각한다. 또한, 두 번째 시간 기간이 t2이라면 나는 신호 x2의 주파수 만보고해야합니다. 그러나, 그것은 내가 아래에 보이는 것이 spectrogram이라고 게시 된 것이 아닙니다.

왜 우리가 스펙트로 그램에서 이러한 기능을 볼 수 있는지 설명해주십시오.

% Time specifications: 
Fs = 8000;      % samples per second 
dt = 1/Fs;      % seconds per sample 
StopTime = 1;     % seconds 
t = (0:dt:StopTime-dt);    % seconds 

t1 = (0:dt:.25); 
t2 = (.25:dt:.50); 
t3 = (.5:dt:.75); 
t4 = (.75:dt:1); 

x1 = (10)*sin(2*pi*10*t1); 
x2 = (10)*sin(2*pi*20*t2) + x1; 
x3 = (10)*sin(2*pi*30*t3) + x2; 
x4 = (10)*sin(2*pi*40*t4) + x3; 


NFFT = 2^nextpow2(length(t));  % Next power of 2 from length of y 
Y = fft(x4, NFFT); 
f = Fs/2 * linspace(0, 1, NFFT/2 + 1); 
%{ 
figure; 
plot(f(1:200), 2 * abs(Y(1:200))); 
%} 

T = 0:.01:1; 
spectrogram(x4,10,9,NFFT); 
ylabel('Frequency'); 
axis(get(gcf,'children'), [0, 1, 1, 50]); 

Update_1 : 방정식 enter image description here

코드

스펙트로 내가 제안 된 대답을 시도 할 때 , 내가 다음을 받았다.

??? Out of memory. Type HELP MEMORY for your options. 
Error in ==> spectrogram at 168 
y = y(1:length(f),:); 
Error in ==> stft_1 at 36 
spectrogram(x,10,9,NFFT); 

코드를 사용 :

% Time specifications: 
Fs = 8000;      % samples per second 
dt = 1/Fs;      % seconds per sample 
StopTime = 1;     % seconds 
t = (0:dt:StopTime-dt);    % seconds 

%get a full-length example of each signal component 
x1 = (10)*sin(2*pi*10*t); 
x2 = (10)*sin(2*pi*20*t); 
x3 = (10)*sin(2*pi*30*t); 
x4 = (10)*sin(2*pi*40*t); 

%construct a composite signal 
x = zeros(size(t)); 
I = find((t >= t1(1)) & (t <= t1(end))); 
x(I) = x1(I); 
I = find((t >= t2(1)) & (t <= t2(end))); 
x(I) = x2(I); 
I = find((t >= t3(1)) & (t <= t3(end))); 
x(I) = x3(I); 
I = find((t >= t4(1)) & (t <= t4(end))); 
x(I) = x4(I); 

NFFT = 2^nextpow2(length(t));  % Next power of 2 from length of y 
Y = fft(x, NFFT); 
f = Fs/2 * linspace(0, 1, NFFT/2 + 1); 
%{ 
figure; 
plot(f(1:200), 2 * abs(Y(1:200))); 
%} 

T = 0:.01:1; 
spectrogram(x,10,9,NFFT); 
ylabel('Frequency'); 
    axis(get(gcf,'children'), [0, 1, 1, 50]); 

Update_2

% Time specifications: 
Fs = 8000;      % samples per second 
dt = 1/Fs;      % seconds per sample 
StopTime = 1;     % seconds 
    t = (0:dt:StopTime-dt);    % seconds 
    t1 = (0:dt:.25); 
    t2 = (.25:dt:.50); 
    t3 = (.5:dt:.75); 
    t4 = (.75:dt:1); 

    %get a full-length example of each signal component 
x1 = (10)*sin(2*pi*100*t); 
x2 = (10)*sin(2*pi*200*t); 
x3 = (10)*sin(2*pi*300*t); 
x4 = (10)*sin(2*pi*400*t); 

%construct a composite signal 
x = zeros(size(t)); 
I = find((t >= t1(1)) & (t <= t1(end))); 
x(I) = x1(I); 
I = find((t >= t2(1)) & (t <= t2(end))); 
x(I) = x2(I); 
I = find((t >= t3(1)) & (t <= t3(end))); 
x(I) = x3(I); 
I = find((t >= t4(1)) & (t <= t4(end))); 
x(I) = x4(I); 

NFFT = 2^nextpow2(length(t));  % Next power of 2 from length of y 
Y = fft(x, NFFT); 
f = Fs/2 * linspace(0, 1, NFFT/2 + 1); 
%{ 
figure; 
plot(f(1:200), 2 * abs(Y(1:200))); 
%} 

T = 0:.001:1; 
spectrogram(x,10,9); 
ylabel('Frequency'); 
axis(get(gcf,'children'), [0, 1, 1, 100]); 

Dpectrogram_2 : enter image description here

답변

0

을 난 몰라 당신이 계획하고 있다고 생각하는 것을 계획하고 있다고 생각하십시오. 신호가 예상대로되도록 시간 영역에 신호를 그려야합니다 ... plot(x4). 나는 당신의 신호가 x1이고 x2 다음에 x3, x4 다음에 있다고 생각한다. 그러나 표시하고있는 Matlab 코드를 기반으로하면 그렇지 않습니다.

대신 신호는 x1 + x2 + x3 + x4의 합계입니다. 결과적으로 신호의 과도 시동으로 인해 다른 구성 요소와 함께 10, 20, 30, 40 Hz에서 신호 구성 요소를 볼 수 있습니다. 그럼 당신은 당신이 원하는 것을 보장하기 위해 시간 영역 (plot(x))에 새로운 신호 x를 플롯 할 수 있습니다

%get a full-length example of each signal component 
t = (0:dt:StopTime-dt); 
x1 = (10)*sin(2*pi*10*t); 
x2 = (10)*sin(2*pi*20*t); 
x3 = (10)*sin(2*pi*30*t); 
x4 = (10)*sin(2*pi*40*t); 

%construct a composite signal from the four signals above 
x = zeros(size(t)); %allocate an empty vector of the correct size 
I = find((t >= t1(1)) & (t <= t1(end))); 
x(I) = x1(I); 
I = find((t >= t2(1)) & (t <= t2(end))); 
x(I) = x2(I); 
I = find((t >= t3(1)) & (t <= t3(end))); 
x(I) = x3(I); 
I = find((t >= t4(1)) & (t <= t4(end))); 
x(I) = x4(I); 

:

당신이 그런 짓을한다, 당신이 원하는 신호를 얻으려면. 마지막으로 spectrogram을 수행 할 수 있습니다.

각 기간 (t1과 t2 사이, t2와 t3 사이, 그리고 t3과 t4 사이) 사이의 전환 시점에 스펙트로 그램에 아티팩트가 표시됩니다. 신호 인공물은 서로 다른 신호 주파수 간의 불연속적인 전환 동안 신호가 복잡하다는 것을 반영합니다.

+0

답변 주셔서 감사합니다.하지만 위의 오류를 update_1 섹션에 기록했습니다. 나는 또한 코드를 게시했다. 친절하게 그것 봐 봐 – rmaik

+0

또한 코드를 읽은 후, 어떤 신호가 어떤 시간 간격에 속하는지 모르겠다. hw t1, t2, t3, t4는 원래 코드에서와 마찬가지로 정의됩니다. – rmaik

+0

t1에서 t4까지 정의됩니다. 어느 시점에서 어떤 신호에 대해, 내 코드는 x1이 t1, x2가 시간주기 t2, x3이 t3, x4가 t4로 정의 된 시간주기에 복사됨을 보여줍니다. – chipaudette

관련 문제