2014-12-06 7 views
0

Я пытаюсь построить частотный спектр синусоидальной волны с частотой 77,5 кГц и амплитудой 2. Только нулевая точка неверна, она сдвигается влево. Мой код:Matlab fftshift не работает правильно

f1=77.5e3; % frequency of the sinewave 
a1=2; % amplitude of the sinewave 

Fs = 1.55e6; % sampling frequency 
dt=1/Fs; % step size 
maxtime = 5*(1/f1); 
t=0:dt:maxtime; % time interval in which we want to plot 

x=a1*sin(2*pi*f1*t); % the values for the sinewave 

N=length(t); % this is how many samples we have in the time-domain 
X=fft(x)/N; 
X=fftshift(X); 
f=[-N/2:1:N/2-1]*Fs/N; % creates a frequency axis 

figure(1) 
plot(f,abs(X)) 
title('Magnitude Spectrum of x(t)') 
xlabel('Frequency [Hz]') 
ylabel('|X(f)|') 

Когда я запускаю этот код я получаю неправильный спектр частот. Может кто-нибудь мне помочь?

Edit: фигура я получаю при запуске этого кода: Incorrect spectrum I get

Помимо некорректной нулевой точки я также получаю неправильную частоту, когда я считаю это сам от участка. Я просто не уверен, как я должен построить такую ​​синусоидальную волну с частотой 77,5 кГц, амплитудой 2 и частотой дискретизации 1,55 МГц

+0

Можете ли вы отправить пример? –

+0

@OliverCharlesworth Я обновил свой вопрос –

+0

, почему вы используете 'fftshift' ?? почему не просто 'fft (x, N)/N'? – Rashid

ответ

1

Ваш код верный, как есть. Но ваш сигнал, однажды сделанный периодически, - это не просто синусоидальная волна (есть разрыв, потому что 1-й и последний выборки x одинаковы).

Вы можете попробовать удалить 1 образец в конце:

t=0:dt:maxtime; % time interval in which we want to plot 
t = t(1:end-1); 

Сейчас пик на f1.

+0

Это решило мой вопрос, спасибо! –

Смежные вопросы