Генерация гауссовой волны с заданной центральной частотой

Формула для гауссовой волны: 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')

введите описание изображения здесь


person Amartya    schedule 04.02.2016    source источник


Ответы (1)


Как я указывал в этом сообщении, для модуляции гауссова импульса на более высокую частоту (и сохраняя сигнал с действительным знаком ) вы умножили сигнал на cos(2*pi*t*f0):

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;

f0 = 1000;
xt=cos(2*pi*t*f0) .* (exp(-t.^2/(2*variance)))/sqrt(2*pi*variance);
subplot(2,1,1); plot(t,xt,'b'); 
title(['Gaussian Pulse \sigma=', num2str(sigma),'s']);
xlabel('Time(s)'); ylabel('Amplitude');
axis([-0.02 0.02]);

xf = fftshift(fft(xt));
f = fs*(-n/2:n/2)/n; %Frequency Vector
subplot(2,1,2); plot(f,abs(xf),'r'); title('Magnitude of FFT');      
xlabel('Frequency (Hz)'); ylabel('Magnitude |X(f)|');

Что должно дать вам результат, похожий на:

График модулированного гауссова импульса

person SleuthEye    schedule 05.02.2016
comment
Спасибо за ответ @SleuthEye. Как упоминалось в сообщении (earthscience.stackexchange.com/questions/7463/) исходная гауссовская волна не имеет нулевого уровня постоянного тока, поэтому в моих результатах она показывает пик около нуля. Предложенный вами метод сдвига гауссиана путем умножения его на коэффициент cos делает уровень постоянного тока волны нулевым. Однако он изменяет исходную форму волны, что нежелательно. Любые предложения сохранить исходную форму волны нетронутой. - person Amartya; 07.02.2016
comment
Семейство гауссовских импульсов во временной области с параметром дисперсии - это гауссовские импульсы в частотной области с центром в 0 Гц (как вы заметили). Изменение его в частотной области (чтобы иметь другую центральную частоту) также изменит его во временной области. Тем не менее, чтобы только избавиться от 0 Гц, вы можете пропустить окончательный результат через режекторный фильтр с y = y-mean(y). Но часто вам нужно избавиться от частот около 0 Гц (а не только от 0 Гц), так что это не вариант. В этом случае вам придется переосмыслить свои требования и то, почему модулированный импульс вам не подходит. - person SleuthEye; 08.02.2016
comment
Что, если мы хотим модулировать гауссиан с конечной полосой пропускания (от f0 до f1), а не монохроматическим cos(2*pi*t*f0)? - person ddzzbbwwmm; 12.04.2017
comment
@ См. Термин cos(2*pi*t*f0), сдвигающий гауссиан с конечной полосой пропускания и центральной частотой на 0 Гц на центральную частоту на f0. Если вам нужен один гауссиан с полосой пропускания от f0 до f1 (с центром в (f0+f1)/2), вы должны установить sigma, чтобы иметь гауссиан с требуемой шириной (для +/- 3 стандартных отклонений в частотной области установите sigma на (3/pi)*(1/(f1-f0))), затем сместите его центр на (f0+f1)/2, умножив на cos(2*pi*t*(f0+f1)/2) во временной области. - person SleuthEye; 12.04.2017