使用 MATLAB 的信号带宽

信息处理 matlab 带宽
2022-01-14 05:24:06

我需要找到信号的带宽。x=50sinc(125(t10))2

(其中 [标准化] 或 [未标准化])sinc(x)=sin(πx)πxsinc(x)=sinxx

我将如何在 MATLAB 中执行此操作?

1个回答

这实际上将是一个很好的面试问题。让我们从头开始:

  1. sinc(x) text{sinc}(x)的傅立叶变换是一个矩形。归一化函数产生 1 Hz 的带宽(从 -0.5Hz 到 0.5Hz)sinc(x)sinc()
  2. t10项与带宽无关:时移相当于在频域中,其中这会改变相位,但不会改变幅度或带宽(t10)ejωt0t0
  3. 125t:这是导致频率拉伸的时间压缩。由于我们将时间压缩了 125,带宽增加了 125,即到 125 Hz(从 -62.5 Hz 到 62.5 Hz)
  4. ()2:平方是时域中的乘法,对应于频域中的卷积。两个相等的矩形的卷积是一个三角形。带宽翻倍至 250 Hz(从 -125 Hz 到 125Hz)。通常,两个任意信号相乘的带宽是各个带宽的总和。这是正弦和余弦乘法定律的一个简单结果:你只得到和频和差频。
  5. 50():这是一个简单的比例因子,不会改变相位或幅度的形状。

所以总的来说,我们预计频谱是三角形的(在双线性图上),从 -125 Hz 到 +125 Hz,总带宽为 250 Hz。

为此编写 Matlab 代码并不像看起来那么简单。代码本身很简单,但是您必须选择采样率和适当的时间轴。为此,您需要首先评估信号的一般形状。例如,时域信号在技术上从并且以 = 10s 为中心。,真的不会做的伎俩。所以本质上你必须在编写代码之前进行理论分析(这往往是 DSP 中反复出现的主题 :-))+tt = 0:.01:5

% 1000 HZ sample rate, since we now the BW is smaller than 500 Hz
fs = 1000; 
% pick a good time length. Because of the time shift we need significantly more
% than 10s. Technically the sinc() has inifite length so we need to extend
% it far enough to cover the vast part of the energy AND we need to start
% at negative times, not at t = 0;
n = 2^16; % that's about 60s. Should be plenty
t = (-n/2:n/2-1)'/fs;   % time axis in seconds, symmetric around t = 0;
x = 50*sinc(125*(t-10)).^2;
% frequency axis:
f0 = fs/n;  % frequency resoution in Hz
faxis = (-n/2:n/2-1)'*f0;   % frequency axis in Hz seconds, symmetric around f = 0;
fx = fft(x);
plot(faxis,circshift(abs(fx),n/2));
title('Spectrum of 50*sinc(125*(t-10)).^2');
xlabel('Frequency in Hz');