아래에 게시 된 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 : 방정식
코드와
스펙트로 내가 제안 된 대답을 시도 할 때 , 내가 다음을 받았다.
??? 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 :
답변 주셔서 감사합니다.하지만 위의 오류를 update_1 섹션에 기록했습니다. 나는 또한 코드를 게시했다. 친절하게 그것 봐 봐 – rmaik
또한 코드를 읽은 후, 어떤 신호가 어떤 시간 간격에 속하는지 모르겠다. hw t1, t2, t3, t4는 원래 코드에서와 마찬가지로 정의됩니다. – rmaik
t1에서 t4까지 정의됩니다. 어느 시점에서 어떤 신호에 대해, 내 코드는 x1이 t1, x2가 시간주기 t2, x3이 t3, x4가 t4로 정의 된 시간주기에 복사됨을 보여줍니다. – chipaudette