Xlabel('frecventa(Hz)');ylabel('Modulul')
Выделим вещественную и мнимую части комплексного спектра
Re=real(xs);Im=imag(xs);
s1=len/2-500;s2=len/2+500;
subplot(2,1,1)
plot(f(s1:s2),Re(s1:s2));grid
ylabel('Partea reala')
subplot(2,1,2)
plot(f(s1:s2),Im(s1:s2));grid
ylabel('Partea imaginara')
По полученным графикам можно судить не только о частотах и амплитудах, но и фазах отдельных гармоник.
2.4
С помощью программы
просмотрите графики сигналов с частотами
и
частотой дискретизации
,
а также спектров суммы этих сигналов.
f1 = 100; % frecventa primului semnal
f2 = 4300; % frecventa celui de al doilea semnal
fs = 1000; % frecventa de discretizare a semnalului
Ts = 1/fs;
t = 0:0.1e-4:49e-3; % Diapazonul de timp pentru semnalul continuu
td = 0:Ts:49e-3; % Diapazonul de timp pentru semnalul discret
x1 = 5*cos(2*pi*t*f1-pi/2); % Semnalele continue
x2 = 10*cos(2*pi*t*f2+pi/3);
xd1 = 5*cos(2*pi*td*f1-pi/2); % Semnale discrete
xd2 = 10*cos(2*pi*td*f2+pi/3);
%------ Reprezentarea semnalelor
figure(1); clf;
subplot(211), plot(t,x1); hold on;
stem(td,xd1); grid;
title('Semnalul cu frecventa f1 = 100 Hz (fs = 1000 Hz)');
xlabel('Timpul in secunde'); hold off;
tm = max(t)/10;
p = find(t<=tm);
q = find(td<=tm);
subplot(212), plot(t(p),x2(p)); hold on;
stem(td(q),xd2(q)); grid;
title('Semnalul cu frecventa f2 = 4300 Hz (fs = 1000 Hz)');
xlabel('Timpul in secunde'); hold off;
%------ Reprezentarea FFT (modulul(FFT)/N si unghiul (FFT))
xd = xd1 + xd2;
Xi = fft(xd);
N = length(Xi);
figure(2);
subplot(211), stem((0:N-1)*fs/N, abs(Xi)/N); grid;
title('Spectrul de amplitudine (modului(FFT)/N)');
xlabel('Frecventa in Hz');
phase = angle(Xi);
for m = 1:N
if abs(real(Xi(m)))& abs(imag(Xi(m))) < 1e-9;
phase(m) = 0;
end;
end;
subplot(212), stem((0:N-1)*fs/N, phase); grid;
title('Spectrul de faza (unghiul (FFT))');
xlabel('Frecventa in Hz');
2.5
С помощью программы
произвести
расчет спектров гармонических сигналов
с частотами
и
,
используя интервал наблюдения
и частоту дисретизации
.
Поскольку для первого из сигналов
интервал наблюдения содержит нецелое
число периодов
,
наблюдается упомянутый выше эффект
"растекания" спектра (leakage effect). Для
второго сигнала, у которого
,
этот эффект отсутствует. Показано также
влияние применения весовой функции
Хэннинга (Hanning) с целью уменьшения влияния
этого эффекта.
f1 = 130; % Frecventa primului semnal
f2 = 200; % Frecventa celui de al doilea semnal
fs = 800; % frecventa de discretizare
Ts = 1/fs;
x1max = 15; % Amplitudinea
x2max = 5;
t = 0:0.1e-4:49e-3; % Diapazonul de timp pentru semnalele continue
td = 0:Ts:49e-3; % Diapazonul de timp pentru semnalele discrete
x1 = x1max*cos(2*pi*t*f1-pi/2); % Semnalele continue
x2 = x2max*cos(2*pi*t*f2+pi/3);
xd1 = x1max*cos(2*pi*td*f1-pi/2); % Semnalele discrete
xd2 = x2max*cos(2*pi*td*f2+pi/3);
%------ Reprezentarea semnalelor
figure(1); clf;
subplot(211), plot(t,x1); hold on;
stem(td,xd1); grid;
title(['Semnalul cu frecventa f1 = ',num2str(f1),' Hz (fs = ',... num2str(fs),' Hz)']);
xlabel('Timpul in secunde'); hold off;
tm = max(t)/1;
p = find(t<=tm);
q = find(td<=tm);
subplot(212), plot(t(p),x2(p)); hold on;
stem(td(q),xd2(q)); grid;
title(['Semnalul cu frecventa f2 = ',num2str(f2),' Hz (fs = ',... num2str(fs),' Hz)']);
xlabel('timpul in secunde'); hold off;
%------ Reprezentarea FFT (modulul(FFT)/N si unghiul(FFT))
Xi1 = fft(xd1);
Xi2 = fft(xd2);
N = length(Xi1);
N_2 = fix(N/2);
figure(2);
subplot(211), stem((0:N_2-1)*fs/N, abs(Xi1(1:N_2)/N));
title(['Spectrul de amplitudine a semnalului xd1 (f1 = ',... num2str(f1), 'Hz)']);
xlabel('Frecventa in Hz');
ylabel('Modulul (DFT/N)');
subplot(212), stem((0:N_2-1)*fs/N, abs(Xi2(1:N_2)/N));
title(['Spectrul de amplitudine a semnalului xd2 (f2 = ',... num2str(f2), 'Hz)']);
xlabel('Frecventa in Hz');
ylabel('Modulul (DFT/N)');
m1 = N*f1/fs;
m2 = N*f2/fs;
in = 0:0.1:N-1;
Xdin1 = zeros(1,length(in));
Xdin2 = zeros(1,length(in));
for l = 1:length(in)
Xdin1(l) = sum(xd1.*exp(-j*2*pi*in(l)*(0:N-1)/N));
Xdin2(l) = sum(xd2.*exp(-j*2*pi*in(l)*(0:N-1)/N));
end;
in1 = find(in <= N_2);
figure(3); clf;
subplot(211), plot(in(in1)*fs/N, abs(Xdin1(in1)/N));
hold on; stem((0:N_2-1)*fs/N, abs(Xi1(1:N_2)/N));
hold off;
title('DFT ca functie continua si discreta');
ylabel('Modulul (DFT/N)');
xlabel(['Frecventa in Hz; (f1 = ',num2str(f1),' Hz; fs = ',... num2str(fs),' Hz; m1 = ',num2str(m1),')']);
subplot(212), plot(in(in1)*fs/N, abs(Xdin2(in1)/N));
hold on; stem((0:N_2-1)*fs/N, abs(Xi2(1:N_2)/N));
hold off;
ylabel('Modulul (DFT/N)');
xlabel(['Frecventa in Hz; (f2 = ',num2str(f2),' Hz; fs = ',... num2str(fs),' Hz; m2 = ',num2str(m2),')']);
w = hanning(N);
w_t = hanning(length(t));
text_1 = 'hanning';
figure(4); clf;
xd1_f = xd1.*w';
subplot(211), stem(td, xd1_f); hold on
plot(t, x1.*w_t');
hold off; grid;
title(['Semnalul xd1 cu efect ',text_1,' (f1 = ',... num2str(f1),' Hz; fs = ',... num2str(fs),' Hz)']);
