利用Matlab绘制正弦信号的频谱图并做相关分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用Matlab绘制正弦信号的频谱图并做相关分析
————————————————————————————————作者:————————————————————————————————日期:
ﻩ
利用Matlab绘制正弦信号的频谱图并做相关分析
一、作业要求:
1、信号可变(信号的赋值、相位、频率可变);
2、采样频率fs可变;
3、加各种不同的窗函数并分析其影响;
4、频谱校正;
5、频谱细化。
二、采用matlab编写如下程序:
clear;
clf;
fs=100;N=1024; %采样频率和数据点数
A=20;B=30;C=0.38;
n=0:N-1;t=n/fs; %时间序列
x=A*sin(2*pi*B*t+C); %信号
y=fft(x,N); %对信号进行傅里叶变换
yy=abs(y); %求得傅里叶变换后的振幅
yy=yy*2/N; %幅值处理
f=n*fs/N; %频率序列
subplot(3,3,1),plot(f,yy);%绘出随频率变化的振幅
xlabel('频率/\itHz');
ylabel('振幅');
title('图1:fs=100,N=1024');
gridon;
%两种信号叠加,
x=A*sin(2*pi*B*t+C)+2*A*sin(2*pi*1.5*B*t+2.5*C); %信号
y=fft(x,N); %对信号进行傅里叶变换
yy=abs(y);%求得傅里叶变换后的振幅
yy=yy*2/N; %幅值处理
f=n*fs/N; %频率序列
subplot(3,3,2),plot(f,yy);%绘出随频率变化的振幅
xlabel('频率/\itHz');
ylabel('振幅');
title('图2:fs=100,N=1024,两种信号叠加');
gridon;
%加噪声之后的图像
x=A*sin(2*pi*B*t+C)+28*randn(size(t));
y=fft(x,N);
yy=abs(y);
yy=yy*2/N;%幅值处理
subplot(3,3,3),plot(f(1:N/2.56),yy(1:N/2.56));
xlabel('频率/\itHz');
ylabel('振幅');
title('图3:fs=100,N=1024混入噪声');
grid on;
%改变采样点数N=128
N=128;
n=0:N-1;t=n/fs;%时间序列
x=A*sin(2*pi*B*t+C);%信号
y=fft(x,N); %对信号进行傅里叶变换
yy=abs(y);%求得傅里叶变换后的振幅
yy=yy*2/N;%幅值处理
f=n*fs/N;%频率序列
subplot(3,3,4),plot(f(1:N/2.56),yy(1:N/2.56));%绘出随频率变化的振幅
xlabel('频率/\itHz');
ylabel('振幅');
title('图4:fs=100,N=128');
gridon;
%改变采样频率为200Hz时的频谱
fs=400;N=1024;n=0:N-1;t=n/fs;
x=A*sin(2*pi*B*t+C); %信号
y=fft(x,N); %对信号进行快速傅里叶变换
yy=abs(y);%求取傅里叶变换的振幅
yy=yy*2/N; %幅值处理
f=n*fs/N;
subplot(3,3,5),plot(f(1:N/2.56),yy(1:N/2.56));%绘出随频率变化的振幅
xlabel('频率/\itHz');
ylabel('振幅');
title('图5:fs=400,N=1024');
grid on;
%加三角窗函数
fs=100;N=1024; %采样频率和数据点数
n=0:N-1;t=n/fs;%时间序列
x=A*sin(2*pi*B*t+C);%信号
window=triang(N);%生成三角窗函数
x=x.*window';%加窗函数
y=fft(x,N);%对信号进行傅里叶变换
yy=abs(y); %求得傅里叶变换后的振幅
yy=yy*2/N; %幅值处理
f=n*fs/N; %频率序列
subplot(3,3,6),plot(f(1:N/2.56),2*yy(1:N/2.56));%绘出随频率变化的振幅xlabel('频率/\itHz');
ylabel('振幅');
title('图6:fs=100,N=1024,加三角窗函数');
grid on;
%加海明窗函数后的频谱
fs=100;N=1024;n=0:N-1;t=n/fs;
x=A*sin(2*pi*B*t+C); %信号
window=hamming(N);%生成海明窗函数
x=x.*window';%加窗函数
y=fft(x,N); %对信号进行快速傅里叶变换
yy=abs(y); %求取傅里叶变换的振幅
yy=yy*2/N; %幅值处理
f=n*fs/N;
subplot(3,3,7),plot(f(1:N/2.56),1.852*yy(1:N/2.56)); %绘出随频率变化的振幅xlabel('频率/\itHz');
ylabel('振幅');
title('图7:fs=100,N=1024,加海明窗函数');
gridon;
%加汉宁窗函数后的频谱
fs=100;N=1024;n=0:N-1;t=n/fs;
x=A*sin(2*pi*B*t+C);%信号
window=hanning(N);%生成汉宁窗函数
x=x.*window';%加窗函数
y=fft(x,N); %对信号进行快速傅里叶变换
yy=abs(y);%求取傅里叶变换的振幅
yy=yy*2/N; %幅值处理
f=n*fs/N;
subplot(3,3,8),plot(f(1:N/2.56),2*yy(1:N/2.56)); %绘出随频率变化的振幅
xlabel('频率/\itHz');
ylabel('振幅');
title('图8:fs=100,N=1024,加汉宁窗函数');
grid on;
三、运行结果如下: