Изучение сущности и моделей дискретизации (квантования по времени) сигналов и методов восстановления непрерывных сигналов по отсчетам, страница 2

X=fft(x,length(f));

X1=fftshift(X);

subplot(211), plot(t(1:50),x(1:50),'-o')

set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)

legend('Сигнал'), xlabel('Время,  с')

subplot(212), plot(f,abs(X1)*1/fs)

set(gca, 'FontName','Times New Roman Cyr', 'FontSize', 10)

legend('Амплитудный спектр'), xlabel('Частота,  Гц')

Полученные результаты представлены на рис.6 и рис.7.

Рис. 6. График амплитудного спектра гармоники частотой 1000 Гц

при Fs= 8192 Гц.

На рис. 6 видим, что амплитудный спектр гармоники частотой 1000 Гц совпадает с теоретическими ожиданиями: присутствует только частота 1000 Гц, т.е. в данном случае наложения спектров не происходит.

Рис. 7. График амплитудного спектра гармоники частотой 6000 Гц

при Fs= 8192 Гц.

На рис.7 видим, что произошла подмена гармоники частотой 6000 Гц на гармонику 2192 Гц, что является результатом наложения спектров и является причиной совпадения звучания этих сигналов, о котором говорилось в п. 3.

5.      Изучение частотно-временного характера сигнала с линейно меняющейся частотой.

С помощью следующей последовательности команд сгенерируем сигнал с линейно изменяющейся частотой длительностью 10 с, частотой отсчетов 8192 Гц, начальным значением частоты 1000 Гц,  значением частоты 4000 Гц через 3 с. и прослушаем звучание данного сигнала.

Fs = 8192;

t = 0: 1/Fs: 10;

x = chirp(t, 1000, 3, 4000);

sound(x)

Прослушав звучание сгенерированного сигнала, определили, что тон сигнала повышается до момента времени 3 сек., далее понижается и в момент времени около 7 сек. снова начинается повышение.

Вычислим моменты времени, в которые тон звука начинает понижаться и повышаться аналитически.

Частота сигнала изменяется по линейному закону .  

Частота отсчётов Fs = 8192 Гц, следовательно, частота Найквиста  Гц и начиная с неё будет наблюдаться сворачивание гармоник относительно .   

Таким образом, частота должна повышаться от 1000 Гц до , понижаться до момента достижения  и далее повышаться.

Исходя из линейного закона изменения частоты, получаем, что сигнал достигает частоты Гц в момент времени, равный приблизительно 3 сек., и частоты Гц в момент 7.2 сек. Получили данные, совпадающие с экспериментальными.

Используя процедуру specgram(x,[],Fs)построим спектрограмму сгенерированного выше сигнала.

Полученные результаты представлены на рис.8.

Рис. 8. Спектрограмма сигнала с линейно меняющейся частотой.

На рис. 8 видим, что частота сигнала не изменяется по линейному закону.

Это является результатом сворачивания гармоник относительно частоты Найквиста (частоты сворачивания) , которая является максимальной частотой сигнала, который можно определить с помощью отсчётов, взятых с частотой .

6.  Восстановление сигнала полиномом нулевого порядка.

Сигнал может быть восстановлен полиномом нулевого порядка по выражению

    

Т.е. свёртка импульсной характеристики полинома нулевого порядка и значений сигнала в точках отсчёта даёт восстановленный сигнал.

Функция interp0() формирует импульсную характеристику полинома нулевого порядка.

function u=interp0(t,T,n)

% Функция для формирования 

% ИХ полинома нулевого порядка

% синтаксис interp0(t,T,n)

% t - время, T-интервал отсчетов,

% n - номер отсчета

u=(t>=(n-1)*T)-(t>=n*T);

С помощью следующего script-файла проведём восстановление сигнала по его отсчётам с помощью полинома нулевого порядка.

% программа  восстановления

% сигнала полиномом нулевого порядка

f=10; %  частота сигнала

Fs=f*20; % частота отсчетов

T=1/Fs; % интервал отсчетов

t=0:T:1/f; % шкала дискретного времени

x=cos(2*pi*f*t); % сигнал

t1=0:0.0001:1/f;  % "непрерывное"  время

N=Fs/f; % число отсчетов сигнала

y=zeros(1, length(t1));

% вычисление сверток сигнала

% и ИХ экстраполятора в цикле

for k=1:(N+1), y1=conv(x(k), interp0(t1,T,k));, y=y+y1; end

subplot(211), plot(t1,y)

hold on

x1=cos(2*pi*f*t1);

plot(t1,x1,'-.r')

hold off

% построение отдельной свертки

subplot(212), plot(t1,conv(x(3), interp0(t1,T,3)))

xlabel('Time, sec')

Полученные результаты представлены на рис.9.

Рис. 9. Сигнал, восстановленный полиномом нулевого порядка.

На рис. 9 видим, что сигнал восстанавливается неточно. Восстановленный сигнал имеет ступенчатый вид, значения сигнала остаются постоянными до получения  последующего отсчёта.

7.  Моделирование восстановления непрерывного сигнала по его отсчетам с использованием различных интерполяционных полиномов.

7.1.  Восстановление сигнала с помощью идеального ФНЧ.

Во временной области сигнал может быть точно восстановлен по его отсчетам с помощью интерполяционного полинома Котельникова (выражение (1)).
                                                                          (1)

С помощью следующего script-файла проведём восстановление сигнала по отсчётам с помощью идеального ФНЧ.

% Программа демонстрации восстановления сигнала

% интерполяционным полиномом sin(x)/x

% вариант интерполяции с помощью идеального ФНЧ

t=-3:0.01:7; % задание интервала времени

n=-3:7;   % номера отсчетов сигнала

s=[0  0  2.5  6.4  3  4.2  1  -2.5  0  -1  0];% дискретный сигнал

d=[n'  s']; % параметры для функции pulstran

y=pulstran(t,d,'sinc');

% график дискретного сигнала

plot(n, s,'o',t,y)

hold on

% построение графиков отдельных sinc импульсов

for k=1:length(s), plot(t, s(k)*sinc(t-n(k)), ':'), end

grid

hold off

Полученные результаты представлены на рис. 10.

Рис. 10. Иллюстрация восстановления сигнала с помощью идеального ФНЧ.

На рис. 10 видим, что ряд точно представляет исходный сигнал  в точках отсчёта и сходится к нему во всех остальных точках.

Точное восстановление сигнала с помощью интерполяционного ряда Котельникова  требует идеального ФНЧ и бесконечного числа членов ряда, что на практике невозможно обеспечить, поэтому для восстановления чаще применяются другие способы.

7.2.  Восстановление сигнала с помощью полинома нулевого порядка.

На практике для восстановления непрерывного сигнала по его отсчетам широко используют восстановление с помощью полиномов нулевого порядка, при котором используются только значения  x(nT). Этот способ восстановления сигнала является наиболее простым.