傅里叶变换matlab代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%傅里叶变换
clc;clear all;close all;
tic
Fs=128;%采样频率,频谱图的最大频率
T=1/Fs;%采样时间,原始信号的时间间隔
L=256;%原始信号的长度,即原始离散信号的点数
t=(0:L-1)*T;%原始信号的时间取值范围
x=7*cos(2*pi*15*t-pi)+3*cos(2*pi*40*t-90*pi/180)+3*cos(2*pi*30*t-90*pi/ 180);
z=7*cos(2*pi*15*t-pi)+3*cos(2*pi*40*t-90*pi/180);
z1=6*cos(2*pi*30*t-90*pi/180);
z1(1:L/2)=0;
z=z+z1;
y=x;%+randn(size(t));
figure;
plot(t,y)
title('含噪信号')
xlabel('时间(s)')
hold on
plot(t,z,'r--')
N=2^nextpow2(L);%N为使2^N>=L的最小幂
Y=fft(y,N)/N*2;
Z=fft(z,N)/N*2;%快速傅里叶变换之后每个点的幅值是直流信号以外的原始信号幅值的N/2倍(是直流信号的N倍)
f=Fs/N*(0:N-1);%频谱图的频率取值范围
A=abs(Y);%幅值
A1=abs(Z);
B=A; %让很小的数置零.
B1=A1;
A(A<10^-10)=0; %
A1(A1<10^-10)=0;
P=angle(Y).*A./B;
P1=angle(Z).*A1./B1;
P=unwrap(P,pi);%初相位值,以除去了振幅为零时的相位值
P1=unwrap(P1,pi);
figure
subplot(211)
plot(f(1:N/2),A(1:N/2))%函数ffs返回值的数据结构具有对称性,因此只取前一半
hold on
plot(f(1:N/2),A1(1:N/2),'r--')
title('幅值频谱')
xlabel('频率(HZ)')
ylabel('幅值')
grid on
subplot(212)
stem(f(1:N/2),P(1:N/2))
hold on
stem(f(1:N/2),P1(1:N/2),'r') title('相位频谱')
xlabel('频率(HZ)')
ylabel('相位')
toc