增加数据长度——提高频率分辨率

由于运算方式和存储容量的限制,计算机只能处理离散且有限长的数据,故“不得不”将无限长的采样序列在时域截断,再进行后续处理。由数据在时域截断引起失真。

频率分辨率指能区分的最小频率间隔。

示例

两个具有接近频率的复指数信号,频率分别为 F 1 = 10 F_1 = 10 F1=10Hz 和 F 2 = 12 F_2 = 12 F2=12Hz,采样间隔为 T = 0.02 T = 0.02 T=0.02秒。考虑不同数据长度 L = 10 , 15 , 30 , 100 L = 10, 15, 30, 100 L=10,15,30,100,并进行零填充到 512 点。

在这里插入图片描述

N = 10 N = 10 N=10

DFT 使用 N = 10 N = 10 N=10并进行零填充到 512 点。未分辨: F 2 − F 1 = 2 F_2 - F_1 = 2 F2F1=2Hz < 1 / ( N T ) = 5 < 1/(NT) = 5 <1/(NT)=5Hz。

  • N = 10 N = 10 N=10: 数据长度为 10。

  • 零填充到 512 点: 将数据长度扩展到 512 点。

  • 未分辨: 两个频率 F 1 F_1 F1 F 2 F_2 F2之间的差值为 2 Hz,小于频率分辨率 1 / ( N T ) 1/(NT) 1/(NT),即 5 Hz。因此,这两个频率在 DFT 中无法分辨。
    ### N = 15 N = 15 N=15
    DFT 使用 N = 15 N = 15 N=15并进行零填充到 512 点。未分辨: F 2 − F 1 = 2 F_2 - F_1 = 2 F2F1=2Hz < 1 / ( N T ) ≈ 3.3 < 1/(NT) \approx 3.3 <1/(NT)3.3Hz。

  • N = 15 N = 15 N=15: 数据长度为 15。

  • 零填充到 512 点: 将数据长度扩展到 512 点。

  • 未分辨: 两个频率 F 1 F_1 F1 F 2 F_2 F2之间的差值为 2 Hz,小于频率分辨率 1 / ( N T ) 1/(NT) 1/(NT),即约 3.3 Hz。因此,这两个频率在 DFT 中无法分辨。

N = 30 N = 30 N=30

DFT 使用 N = 30 N = 30 N=30并进行零填充到 512 点。分辨: F 2 − F 1 = 2 F_2 - F_1 = 2 F2F1=2Hz > 1 / ( N T ) ≈ 1.7 > 1/(NT) \approx 1.7 >1/(NT)1.7Hz。

  • N = 30 N = 30 N=30: 数据长度为 30。
  • 零填充到 512 点: 将数据长度扩展到 512 点。
  • 分辨: 两个频率 F 1 F_1 F1 F 2 F_2 F2之间的差值为 2 Hz,大于频率分辨率 1 / ( N T ) 1/(NT) 1/(NT),即约 1.7 Hz。因此,这两个频率在 DFT 中可以分辨。

N = 100 N = 100 N=100

DFT 使用 N = 100 N = 100 N=100并进行零填充到 512 点。分辨: F 2 − F 1 = 2 F_2 - F_1 = 2 F2F1=2Hz > 1 / ( N T ) = 0.5 > 1/(NT) = 0.5 >1/(NT)=0.5Hz。

  • N = 100 N = 100 N=100: 数据长度为 100。
  • 零填充到 512 点: 将数据长度扩展到 512 点。
  • 分辨: 两个频率 F 1 F_1 F1 F 2 F_2 F2之间的差值为 2 Hz,大于频率分辨率 1 / ( N T ) 1/(NT) 1/(NT),即 0.5 Hz。因此,这两个频率在 DFT 中可以分辨。
% 参数设置
F1 = 10; % 第一个频率 (Hz)
F2 = 12; % 第二个频率 (Hz)
T = 0.02; % 采样间隔 (秒)
Fs = 1/T; % 采样频率 (Hz)
signal_length = [10, 15, 30, 100]; % 不同的数据长度
N = 512; % 512点

% 生成时间向量
t = 0:T:(signal_length(end)*T - T);

% 生成信号
signal = exp(1i*2*pi*F1*t) + exp(1i*2*pi*F2*t);

%% 
% 计算DFT并绘制
figure;
for L = signal_length
    % 选择前N个点
    signal_N = signal(1:L);
    
    % 计算DFT
    X = fft(signal_N,N);
    
    % 计算频率轴
    f = Fs*(0:N-1)/N;
    
    % 绘制DFT
    subplot(2, 2, vec2ind((signal_length == L)'));
    plot(f, abs(X));
    xlim([0,50])
    grid on
    title(['N = ', num2str(L)]);
    xlabel('Frequency (Hz)');
    ylabel('Magnitude');
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值