|
本帖最后由 songzy41 于 2011-5-25 05:48 编辑
guodongliang 发表于 2011-5-23 15:32
用FFT进行相频特性研究,如果横坐标都是模拟频率(Hz),matlab程序如下:
clc
clear
把程序做了一些修改,程序下面列着。主要修改内容为:
1,时间变量t的设置不正确,改为t=(n-1)/fs;,即初始时刻t=0,这样才有可能求出初始相角(t=0时刻的相角);
2,从angle得到的相角是针对余弦信号的,与正弦信号差90度;
3,因为3个主要频率对应的谱线分别为101,201,401条谱线相接从这几条谱线中读入计算,其答案为(其中直接计算了信号的幅值)
k=101 Am=1.00000 Freq=100.00000 Angle=0.00000
k=201 Am=1.00000 Freq=200.00000 Angle=90.00000
k=401 Am=1.00000 Freq=400.00000 Angle=45.00000
程序为:
clc
clear
%---------------------- non-uniform sampling
N=1000;
n = 1:N;
f0=100; f1=200; f2=400;% the frequecy of signal
fs=1000; % the sampling frequency
t=(n-1)/fs;
x=sin(2*pi*f0*t)+sin(2*pi*f1*t+pi/2)+sin(2*pi*f2*t+pi/4); % signal
Xk = fft(x);
F=Xk(1:N/2+1); f=fs*(0:N/2)/N;
subplot(311);
plot(t,x);
title('sampled signal')
xlabel('Time / s')
subplot(312);
plot(f,abs(F))
xlabel('Frequency / Hz')
ylabel('DFT magnitude')
subplot(313);
ph = angle(F)/pi*180+90;%degree
plot(f,ph);
xlabel('Frequency / Hz')
ylabel('DFT Phase / Degree')
fprintf('k=101 Am=%6.5f Freq=%6.5f Angle=%6.5f\n',abs(F(101))*2/N,f(101),ph(101));
fprintf('k=201 Am=%6.5f Freq=%6.5f Angle=%6.5f\n',abs(F(201))*2/N,f(201),ph(201));
fprintf('k=401 Am=%6.5f Freq=%6.5f Angle=%6.5f\n',abs(F(401))*2/N,f(401),ph(401)); |
|