matlab信号相位⾓,FFT信号处理后幅度、相⾓的问题
经过⼏天思考和看书,还有谢谢论坛⾥⼀些⽼师的指导,⾃⼰到了程序的问题,对于采样率、实际频率、频率分辨率等概率进⾏了梳理,
对程序进⾏了修改注释,现贴出来⼤家⼀起学习%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FFT提取特定频率的信号%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 创建⼈:Peng Jin
% ⽇ 期:2017-09-04
% 函数变量及功能描述:采⽤FFT对混合信号进⾏分离
% 修改⽇期:2017-09-08 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;clc
fs = 100; % 采样频率,根据采样定理,采样频率为信号最⼤频率两倍
N = 100; % 采样数据点数
df = fs/N; % 频率分辨率,也就是能分辨的两个频率之间的最⼩差值为1HZ,所以这个值直接决定了程序能分辨的最⼩频率差
dt = 1/fs; % 采样时间间隔
n = (0:dt:1-dt); %在时间轴上取100个点
x1=5*cos(2*pi*5*n+pi*30/180); % 时域信号1
x2=10*sin(2*pi*10*n+pi*80/180); % 时域信号2
x3=5*cos(2*pi*15*n-pi*90/180); % 时域信号3
x=x1+x2+x3; % 时域信号合成
figure(1)
plot(n,x); % 时域信号图
xlabel('时间t');
ylabel('y轴');
legend('时域信号');
a=fft(x,N); % 快速傅⾥叶变换
figure(2)
plot(a); % 绘制频谱图
legend('fft变换后的原始频谱');
f=(0:N/2)*fs/N; % 对频率轴进⾏归⼀化处理得到实际的频率轴,实际频率/采样频率 = 实际点数/采样点数
figure(3) % 傅⾥叶变换规律:时域 N 个点 ‐‐> 频域为 N/2 +1 个点
subplot(2,1,1)
amplitude(1)=abs(a(1))/N; % 基波幅值
amplitude(51)=abs(a(51))/N; % fs/2频率处幅值修正
amplitude(2:50)=abs(a(2:N/2))*2/N; % 0-fs/2频率处的幅度谱修正
plot(f,amplitude);
xlabel('频率/Hz');
ylabel('幅度');
title('fft变换后对频率进⾏正确化后的幅度谱');
subplot(2,1,2)
%phase=angle(a(1:N/2+1))*180/pi; % 提取相⾓
phase=(1:N/2+1);
for i=1:N/2
matlab傅里叶变换的幅度谱和相位谱phase(i)=angle(a(i)); % 计算相位
phase(i)=phase(i)*180/pi; % 换算为⾓度
end;
plot(f,phase);
xlabel('频率/Hz');
ylabel('相位');
title('fft变换后对频率进⾏正确化后的相位谱');
fprintf('%5.4f %5.4f %5.4f\n',phase(6),phase(11)+90,phase(16)); % 打印5HZ、10HZ、15HZ的相⾓,这是因为下标是从1-51的,第⼀个点代表基波
% 频率分辨率为 1HZ
% 注意sin和cos是相差90度的,我们获得的相⾓是针对cos来的,所以如果是正弦信号的话要
% 进⾏相应转换
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论