数字信号处理的MATLAB实现——快速傅里叶变换

本文介绍了MATLAB中快速傅里叶变换(FFT)的调用格式及其应用,包括计算初始相位角、频谱图频率刻度设置、消除趋势项、设置分贝坐标、频谱泄露现象的处理。同时讨论了采样频率、信号长度的选择,以及FFT中的补零问题和整周期采样等关键概念。
摘要由CSDN通过智能技术生成

一、FFT函数

1.调用格式:

X=fft(x,N)

(1)当x长度大于N时,以x序列的长度做FFT
(2)当x长度小于N时,在x后补零至N长再做FFT
(3)当没有设置N时,以x序列的长度做FFT

二、IFFT函数

1.调用格式

x=ifft(X)

三、计算初始相位角与初始幅度

1.理论基础

当f0与FFT后频谱上的某根谱线相重合时,可求出对应的信号赋值和初始相角。但如果f0在两条谱线之间,就不能用这个方法来计算,这就是栅栏效应。

2.调用格式

(1)计算初始相位角

theta=abs(X(k))

其中X(k)为第k点的FFT值
(2)计算初始幅度

A=2*abs(X(k)))/N

其中乘2是因为变换为单边谱,N为FFT点数,求出来的A为归一化幅度值。当频率在两条FFT谱线之间时,测量的幅度值有一定的误差。

3.范例


clear all; clc; close all;

fs=1000;                         % 采样频率
N=1000;                          % 信号长度
t=(0:N-1)/fs;                    % 设置时间序列
f1=50; f2=65.75;                 % 两信号频率
x=cos(2*pi*f1*t)+cos(2*pi*f2*t); % 设置信号
X=fft(x);                        % FFT
Y=abs(X)*2/1000;                 % 计算幅值
freq=fs*(0:N/2)/1000;            % 设置频率刻度
[A1, k1]=max(Y(45:65));          % 寻求第1个信号的幅值
k1=k1+44;                        % 修正索引号
[A2, k2]=max(Y(60:70));          % 寻求第1个信号的幅值
k2=k2+59;                        % 修正索引号
Theta1=angle(X(k1));
Theta2=angle(X(k2));
% 显示频率、幅值和初始相角
fprintf('f1=%5.2f   A1=%5.4f   Theta1=%5.4f\n',freq(k1),A1,Theta1); 
fprintf('f2=%5.2f   A2=%5.4f   Theta2=%5.4f\n',freq(k2),A2,Theta2);

% 作图
subplot 211; plot(freq,Y(1:N/2+1),'k'); xlim([0 150]); 
xlabel('频率/Hz'); ylabel('幅值'); title('频谱图');
subplot 223; stem(freq,Y(1:N/2+1),'k'); xlim([40 60]);
xlabel('频率/Hz'); ylabel('幅值'); title('50Hz分量');
subplot 224; stem(freq,Y(1:N/2+1),'k'); xlim([55 75]);
xlabel('频率/Hz'); ylabel(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值