2016-02-04 4 views
0

Формула для гауссовой волны равна 1/[sqrt (2 * pi * variance)] * exp {- [(x-xo).^2/(2 * variance)] };Генерация гауссовой волны с заданной центральной частотой

У меня есть этот вопрос в 3-х частей:

1) Как генерировать Gaussian сигнал во временной области с заданной центральной частотой.

(я пытался контролировать, изменяя «дисперсии» значение, но это метод проб и ошибок. Есть ли другой простой способ добиться этого.)

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)|'); 

enter image description here

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') 

enter image description here

ответ

0

Как я указал в этом post, чтобы модулировать гаусс импульс к более высокой частоте (и сохранение сигнала вещественный) необходимо умножить сигнал на 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)|'); 

Какой должен быть результат, аналогичный:

Modulated Gaussian pulse plot

+0

Спасибо за ваш ответ @SleuthEye. Как упоминалось в post (http://earthscience.stackexchange.com/questions/7463/gaussian-wavelet-generation-with-a-given-frequency), оригинальная гауссовская волна не имеет нулевого уровня постоянного тока, и именно поэтому показывая пик вокруг нуля в моих результатах. Метод, который вы предложили сдвинуть гауссово, умножив его на коэффициент «cos», делает уровень сигнала волны равным нулю. Однако он изменяет исходную форму сигнала, которая нежелательна. Любое предложение сохранить исходный сигнал без изменений. – Amartya

+0

Семейство гауссовских импульсов во временной области с параметром дисперсии представляют собой гауссовские импульсы с частотной областью, центрированные на 0 Гц (как вы заметили). Изменение его в частотной области (с другой центральной частотой) также изменит его во временной области. Тем не менее, чтобы избавиться от 0 Гц, вы можете передать свой окончательный результат через фильтр с надписью «y = y-mean (y)». Но часто вы хотели бы избавиться от частот около 0 Гц (а не только от 0 Гц), так что это не вариант. В этом случае вам придется переосмыслить свои требования и почему модулированный импульс не работает для вас. – SleuthEye

+0

Что делать, если мы хотим модулировать гауссов с конечной шириной полосы ('f0' to' f1'), а не монохроматический 'cos (2 * pi * t * f0)'? – Lee