平时常用,就写下来备份
%本文将以余弦信号为例,用MATLAB进行数字信号频谱分析
%主要使用了fft函数与fftshift函数,并对结果作出分析。
%产生余弦信号以作频谱分析:
%余弦信号y=cos(2π*f*t);
%信号频率为f=10Hz;
%时宽:1s
%采样率为fs=100Hz;
%MATLAB程序:
%=================1
clear all;
close all;
B=15; %信号频率为
fs=100; %采样率为fs
N=512*2; %采样点个数
n=0:N-1;
t=n/fs; %时间序列
x=cos(2*pi*B*t);
figure;
subplot(3,1,1);plot(t,x);
title('余弦信号时域');
xlabel('t/s');
ylabel('幅度');
%==================2
%用fft函数对产生的余弦信号作频谱分析:
%注意:该步骤得到的是0~fs内的频谱。
f=(0:N-1)*fs/N;%实际上f= (0:N-1)*(fs/N); %frequency range
y=fft(x,N); %对信号进行快速Fourier变换
%y=fft(x); %对信号进行快速Fourier变换
mag=abs(y); %求取Fourier变换的振幅
subplot(3,1,2);
%plot(f,abs(fft_y));
plot(f,mag); %绘出随频率变化的振幅
title('余弦信号频谱');
xlabel('f/Hz');
ylabel('幅度');
%可以看到10Hz处有峰值,90Hz的峰值是-10Hz的峰值向右频谱搬移fs=100Hz
%===================3
%用fftshift函数得到-fs/2~fs/2内的频谱:
y2=fftshift(y);
mag2=abs(y2); %求取Fourier变换的振幅
%m = length(x);
%f2=(-m/2:m/2-1)*(fs/m);
f2=(-N/2:N/2-1)*(fs/N)
subplot(3,1,3);
plot(f2,mag2,'r');
title('余弦信号频谱');
xlabel('f/Hz');
ylabel('幅度');
%由于实信号频谱幅度关于原点对称,可以看到10Hz与-10Hz处的两个峰值。