通过FFT求出两个正弦信号的幅值和初始相角

        1,设,信号采样率为1000Hz,由两个余弦信号组成,频率分别为,f1=50Hz,f2=65.7Hz,幅值都为1,初始相角都为0,信号长度为1000。

clear all; clc; close all;

fs=1000;                         % 采样频率
N=1000;                          % 信号长度
t=(0:N-1)/fs;                    % 设置时间序列
f1=50; f2=65.75;                 % 两信号频率
x=cos(2*pi*f1*t)+cos(2*pi*f2*t); % 设置信号
X=fft(x);                        % FFT
Y=abs(X)*2/1000;                 % 计算幅值
freq=fs*(0:N/2)/1000;            % 设置频率刻度
[A1, k1]=max(Y(45:65));          % 寻求第1个信号的幅值
k1=k1+44;                        % 修正索引号
[A2, k2]=max(Y(60:70));          % 寻求第1个信号的幅值
k2=k2+59;                        % 修正索引号
Theta1=angle(X(k1));
Theta2=angle(X(k2));
% 显示频率、幅值和初始相角
fprintf('f1=%5.2f   A1=%5.4f   Theta1=%5.4f\n',freq(k1),A1,Theta1); 
fprintf('f2=%5.2f   A2=%5.4f   Theta2=%5.4f\n',freq(k2),A2,Theta2);

% 作图
subplot 211; plot(freq,Y(1:N/2+1),'k'); xlim([0 150]); 
xlabel('频率/Hz'); ylabel('幅值'); title('频谱图');
subplot 223; stem(freq,Y(1:N/2+1),'k'); xlim([40 60]);
xlabel('频率/Hz'); ylabel('幅值'); title('50Hz分量');
subplot 224; stem(freq,Y(1:N/2+1),'k'); xlim([55 75]);
xlabel('频率/Hz'); ylabel('幅值'); title('65.75Hz分量');

matlab计算结果:

f1=50.00   A1=0.9896   Theta1=0.0089
f2=66.00   A2=0.9010   Theta2=-0.7864

为何不能还原,幅度=1,相位=0,是因为f2频谱泄露导致。

注意:angle 函数针对的是余弦,若把上面信号f1,f2改为正弦,则初相会存在(±pai)/2 的差值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值