程序5 信号频谱分析和功率谱分析程序
load No1.txt;
fs=2000;%采样频率
N=4096;%抽样数,一般要求取为2^n,如128,256,512,1024,2048,4096,8192等,%应该小于采样数据点数,但至少要包含1个以上波形。
t=No1(:,1)/fs;%从数组No1中取出第一列,再除以采样频率得到采样时间
y=No1(:,2); %从数组No1中取出第二列,得到采样数据
ym=mean(y);%求平均值,找出信号中的直流分量
y=y-ym; %减去平均值,剔除信号中的直流分量
subplot(2,2,1);
plot(1000*t,y) %画时域波形
title('时域波形')
xlabel('时间 (毫秒)')
Yf=fft(y,N);%进行fft变换(离散信号的快速傅里叶变换),求信号的频谱X(f)
f=fs*(0:length(Yf)/2)/length(Yf);%进行对应的频率转换,求出频谱的横坐标
Pyy = Yf.* conj(Yf)/N;%求信号的功率谱
subplot(2,2,2);
plot(f,Pyy(1:(N/2+1))) %画功率谱
[Pymax, fi]=max(Pyy(1:(N/2+1)));%求出最大功率值及其索引号fi
fm=f(fi) %根据索引号求出主频,即功率最大的频率成分的频率
title(['功率谱,主频fm=',num2str(fm),'Hz'])
xlabel('频率 (Hz)')
mag=abs(Yf);%求幅值谱,等于|X(f)|
subplot(2,2,3);
plot(f,mag(1:(N/2+1))) %画幅值谱
[mgmax, mi]=max(mag(1:(N/2+1)));%求出最大功率值及其索引号fi
fm=f(mi) %根据索引号求出主频,即功率最大的频率成分的频率
title(['幅值谱,主频fm=',num2str(fm),'Hz'])
xlabel('频率 (Hz)')
P=angle(Yf); % 求相位谱,等于X(f)的相位角
subplot(2,2,4);
plot(f,P(1:(N/2+1))) %画相位谱
title('相位谱')
xlabel('频率 (Hz)')