Формула для гауссовой волны: 1 / [sqrt (2 * pi * variance)] * exp {- [(x-xo). ^ 2 / (2 * variance)]};
У меня этот вопрос состоит из 3 частей:
1) Как сгенерировать гауссовский сигнал во временной области с заданной центральной частотой.
(Я пытался контролировать это, изменяя значение «дисперсии», но это метод проб и ошибок. Есть ли другой простой способ добиться этого.)
2) Моя вторая проблема заключается в определении его частотного спектра.
(Я генерирую гауссов сигнал во временной области и использовал его преобразование Фурье с помощью БПФ. Проблема в том, что все частоты распределены вокруг нулевого герца, а не вокруг центральной частоты.)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% test for gausssian signal ; Time to Freq
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dt=.0001;
fs=1/dt; %sampling frequency
fn=fs/2;
n=1000;
t=dt*(-n/2:n/2); %time base
sigma=0.001; variance=sigma^2;
xt=1/(sqrt(2*pi*variance))*(exp(-t.^2/(2*variance)));
subplot(2,1,1); plot(t,xt,'b');
title(['Gaussian Pulse \sigma=', num2str(sigma),'s']);
xlabel('Time(s)'); ylabel('Amplitude');
xf = fftshift(fft(xt));
f = fs*(-n/2:n/2)/(n/2); %Frequency Vector
subplot(2,1,2); plot(f,xf.*conj(xf),'r'); title('Magnitude of FFT');
xlabel('Frequency (Hz)'); ylabel('Magnitude |X(f)|');
3) В качестве обратного упражнения я определил частотный спектр вокруг заданной частоты, а затем оценил амплитудный спектр. Я варьировал центральную частоту f0 и обнаружил, что ширина импульса не меняется. Где, как в принципе, ширина должна была измениться, если участвовали более высокие частоты.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% test for gausssian signal ; Freq --> Time --> Freq
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc; clear all;
dt=0.001;
fs=1/dt; %sampling frequency
fn=fs/2;
n=200; % provide a even no
f=1/dt*(-n/2+1:n/2-1)/(n/2); %time base
f0=800 ; % properties of source: position
sigma=20; % properties of source: width
variance = sigma^2;
xf=1/(sqrt(2*pi*variance))*(exp(-((f-f0).^2/(2*variance))));
figure(1); subplot(3,1,1); plot(f,xf,'b');
title(['Gaussian Pulse \sigma=', num2str(sigma),'s']);
xlabel('Freq'); ylabel('Amplitude');
xt=fftshift(ifft(xf));
t=1/fs*(-n/2+1:n/2-1)/(n/2);
subplot(3,1,2); plot(t,xt.*conj(xt),'b');
xlabel('Time(s)'); ylabel('Amplitude');
xtf=(fft((fftshift(xt))));
subplot(3,1,3); plot(f,xtf.*conj(xtf),'b');
xlabel('Freq'); ylabel('Amplitude')