Из условия БПФ N кратно 2, значит, можно свести вычисление ДПФ к вычислению в 2 точках. После вычисления преобразования в этих точках объединяем полученные последовательности в исходную последовательность.
Т.о. видно, что для N=1021 скорость вычисления ПФ с помощью функции fft() превосходит скорость вычисления с помощью функции dftsum() почти в 2 раза. (fft - 0.0160 сек., dftsum – 0,0310 сек.).
5. Определение времени, за которое вычисляется преобразование Фурье функциями dftsum и fft для N=1024.
Самое близкое значение к 1021 сверху, являющееся степенью 2, будет 1024.
Код MatLab:
dt=0.001;
t=0:dt:0.1023;
s=size(t);
xd=2*randn(size(t));
t1d=cputime; % Начало времени вычисления ДПФ
yd=dftsum(xd); % Вычисление ДПФ
t2d=(cputime - t1d); % Конец времени вычисления
disp(t2d);
Вычисление ДПФ состоящего из 1024 точек (используя цикл):
Код MatLab:
% при помощи функции fft
N=2^10; dt=0.001;
t=0:dt:dt*(N-1);
xf=randn(size(t)); % Формирование случайной последовательности
t1f=cputime; % Начало времени вычисления ДПФ
for n=0:999,
yf=fft(xf); % Вычисление ДПФ
end
t2f=(cputime - t1f); % Конец времени вычисления
disp(t2f/1000);
Сопоставим время, за которое было произведено БПФ c 1021 точек и 1024 точек.
Т.к. БПФ имеет наибольшее быстродействие при N кратному 2, то вычисление последовательности из 1024 точек проводиться быстрей, чем из 1021. А именно из 1021 - 0.0160 секунды, а из 1024 - 6.3000e-005 секунды, т.е. в 253 раза быстрее. При использовании же функции dftsum() при количестве точек равном 1024, скорость вычислений осталась примерно такой же (0,0320 сек.).
6. Спектральный анализ суммы сигнала и шума, основанный на использовании ДПФ.
Код MatLab:
Fs=64; % Частота отсчетов
f1=10; % частоты гармоник
f2=25;
N=128; % число отсчетов сигнала
n=0:(N-1);
t=0:1/Fs:(N-1)/Fs; % вектор времени
x=cos(2*pi*f1*t)+0.5*cos(2*pi*f2*t)+randn(1,length(t)); % сигнал для анализа
subplot(311), plot(t,x), grid % график сигнала
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)
title('Сигнал во временной области')
k=0:(N-1);
f=k*Fs/N; % частотная шкала
X=fft(x); % вычисление ДПФ
subplot(312), plot(f,abs(X)/Fs), grid
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)
title('Амплитудный cпектр, положительные частоты')
% Построение спектра для положительных и отрицательных частот
k1=-N/2:(N/2-1);
f1=k1*Fs/N;
subplot(313), plot(f1,fftshift((abs(X))/Fs)), grid
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)
title('Амплитудный cпектр')
xlabel('Частота, Гц')
Рис. 9. График сигнала и его амплитудных спектров.
Сигнал представляет собой сумму двух гармоник и случайного шума. Для спектрального анализа сигнала определим его графически. По построенным графикам мы обнаруживаем гармонику с частотой 10 Гц и предположительно гармонику с частотой 25 Гц.
7. Изучение влияния размера ДПФ на частотное разрешение.
Исходный сигнал: y=0.5cos(2pi*f1*t) + cos(2pi*f2*t).
Код MatLab:
N = input('N= ')
Fs=200; % Частота отсчетов
f1=22; % частоты гармоник
f2=34;
M=16; % число отсчетов сигнала
n=0:(M-1);
t=0:1/Fs:(M-1)/Fs; % вектор времени
x=0.5*cos(2*pi*f1*t)+cos(2*pi*f2*t);
subplot(211), stem(t,x), grid % график сигнала
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)
title('Сигнал во временной области')
% Построение спектра для положительных и отрицательных частот
X=fft(x, N); % вычисление ДПФ
k1=-N/2:(N/2-1);
f1=k1*Fs/N;
subplot(212), stem(f1,fftshift((abs(X))/Fs)), grid
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)
title('Амплитудный cпектр')
xlabel('Частота, Гц')
|
|
|
Рис. 10. График сигнала и его спектров при N-точечном ДПФ.
При увеличении N расстояние между соседними разрешаемыми частотами уменьшается, спектр становится более частым. Т.о. можно нагляднее наблюдать характер амплитудных спектров.
8. Обработка анализируемого сигнала при помощи оконной функции.
Код MatLab:
N = 64; % размер ДПФ
Fs=200; % Частота отсчетов
f1=22; % частоты гармоник
f2=34;
M=16; % число отсчетов сигнала
n=0:(M-1);
t=0:1/Fs:(M-1)/Fs; % вектор времени
x=0.5*cos(2*pi*f1*t)+cos(2*pi*f2*t);
x_w=(x'.*hamming(length(x)))';
figure(1);
subplot(211), stem(t,x), grid % график сигнала
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)
title(' Исходный сигнал')
subplot(212), stem(t,x_w), grid
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)
title('Сигнал, сглаженный функцией hamming')
figure(2);
% Построение спектра для положительных и отрицательных частот
X=fft(x, N); % вычисление ДПФ
k1=-N/2:(N/2-1);
f1=k1*Fs/N;
subplot(211), stem(f1,fftshift((abs(X))/Fs)), grid
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)
title('Амплитудный спектр исходного сигнала')
xlabel('Частота, Гц')
X_w=fft(x_w, N); % вычисление ДПФ
subplot(212), stem(f1,fftshift((abs(X_w))/Fs)), grid
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)
title('Амплитудный спектр сигнала, сглаженного функцией hamming')
xlabel('Частота, Гц')
Рис. 11. Обработка исходного сигнала оконной функцией.
Рис.12. Оконная обработка исходного сигнала при N=512, M=256.
У оконной функции hamming 99,96% всей энергии заключено в главном лепестке. Т.о. После обработки исходного сигнала функцией Хэмминга, сигнал серьезным образом сглаживается, у спектра пропадают ненужные пульсации. Значит, оконная функция hamming может с успехом применяться на практике, когда нужно избавиться от шумов, сделать сигнал более “чистым”. Кроме того, функция Хэмминга часто используется для уменьшения влияния растекания спектра.
9. Программа для вычисления и вывода графиков во временной и частотной области фрагмента речевого сигнала.
Код MatLab:
[y,Fs]=wavread('MySpeech.wav', 1)
y =
0 0
Fs =
44100
Fs=44100; % Частота отсчетов
y=wavread('MySpeech.wav'); % сигнал
N = length(y);
n=-N/2:N/2-1;
n1=n+N/2;
Y=fft(y); % Вычисление ДПФ
Yp=fftshift(Y); % Сдвиг ДПФ
f=n*Fs/N; % Частотная шкала
figure(1), subplot(211), plot(n1/Fs,y,'ko-');
grid;
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10);
xlabel('Время, с');
title(' Сигнал ');
subplot(212), plot(f,abs(Yp/N));
grid;
set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10);
xlabel('Частота, Гц');
title('Амплитудный спектр сигнала');
figure(2), subplot(111), specgram(y(:,1),[],Fs);
title('спектрограмма звукового сигнала ');
Рис.13. Звуковой сигнал и его амплитудный спектр.
Рис.14. Спектрограмма сигнала.
Спектрограмма является графическим представлением звуковых колебаний. Фактически — это спектрально-временное представление звука.
На спектрограмме значения амплитудного спектра отображаются с помощью цвета. Чем больше амплитуда, тем более ярким оранжевым цветом она отображается. Чем меньше амплитуда спектральной составляющей, тем более темно-голубой у нее цвет. Т.о. можно выявить определенные соответствия между амплитудным спектром сигнала и его спектрограммой.
Также можно проследить соответствия между спектрограммой и графиком исходного сигнала. Речь сигнала отражается на спектрограмме в виде областей оранжевого цвета в соответствующие моменты времени. По спектрограмме можно увидеть, что максимальной амплитуды сигнал достигает во временной период около 2,4 сек.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.