声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2421|回复: 0

[综合讨论] [转载]基于MATLAB的FFT仿真

[复制链接]
发表于 2016-3-10 11:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x

基于MATLAB的FFT仿真
1
推荐 % Date:10/11/2009整理:eyes417Date:10/11/2009整理:eyes417
%##################################################################%%   FILE :  FFT.m%   TITLE:  FFT计算仿真,得到频率和幅度值,相位图%%##################################################################close all;                    %先关闭所有图片
Adc = 1.25;                   %直流分量幅度
A1 = 1;                       %频率F1信号的幅度
A2 = 0.25;                     %频率F2信号的幅度
F1 = 100;                    %信号1频率(Hz)
F2 = 1000;                    %信号2频率(Hz)
Fs = 5120;                   %采样频率(Hz)
%P1 = -30;                    %信号1相位(度)
%P2 = 90;                     %信号相位(度)
N = 256;                      %采样点数
t = [0 : 1/Fs : N/Fs];        %采样时刻%生成信号
%S=Adc+A1*cos(2*pi*F1*t+pi*P1/180)+A2*cos(2*pi*F2*t+pi*P2/180); %考虑相位
signal1=A1*sin(2*pi*F1*t);
signal2=A2*sin(2*pi*F2*t);
S=A1*sin(2*pi*F1*t)+A2*sin(2*pi*F2*t);                       %无直流偏置
S=Adc+A1*sin(2*pi*F1*t)+A2*sin(2*pi*F2*t);                   %直流偏置
%S=Adc+[A1*sin(2*pi*F1*t)+A2*sin(2*pi*F2*t)]/2;
%显示原始信号
plot(S);
title('原始信号');figure;
Y = fft(S,N);            %做FFT变换
Ayy = (abs(Y));          %取模
plot(Ayy(1:N));          %显示原始的FFT模值结果
title('FFT 模值');figure;
Ayy = Ayy / (N / 2);                    %换算成实际的幅度
Ayy(1) = Ayy(1) / 2;
F = ([1:N] - 1) * Fs / N;               %换算成实际的频率值
plot(F(1:N/2), Ayy(1:N/2));             %显示换算后的FFT模值结果
title('幅度-频率曲线图');figure;
Pyy = [1 : N/2];
for i = 1 : N/2
Pyy(i) = phase(Y(i));                %计算相位
Pyy(i) = Pyy(i) * 180 / pi;          %换算为角度
end;
plot(F(1 : N/2), Pyy(1 : N/2));      %显示相位图
title('相位-频率曲线图');

2.png

根据公式验证 --- 某点n所表示的频率为: Fn=(n-1)*Fs/N                                     f1=(6-1)*5120/256=100 (Hz) ---- 验证结果正确                                     f2=(51-1)*5120/256=1000(Hz)---- 验证结果正确

3.png

根据公式验证 --- 对于n=1点的信号,是直流分量,幅度即为A1/N   --- A1=320/256=1.25 --- 验证结果正确                 对于n点(n≠1,且n<=N/2)  幅度A --- A=An/(N/2)=128/(256/2)=1 --- 验证结果正确

4.png

相位的计算可用函数atan2(b,a)计算。atan2(b,a)是求坐标为(a,b)点的角度值,范围从-pi到pi。atan2(500, 148)=x,结果是弧度,换算为角度就是180*(-x)/pi=相位值。 根据FFT结果以及上面的分析计算,--- 频率,幅度.相位....我们就可以写出信号的表达式了,它就是我们开始提供的信号。------ 信号重建

本文引用地址:http://blog.sciencenet.cn/blog-450088-465363.html  此文来自科学网蒋亮博客

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 09:35 , Processed in 0.096968 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表