【问题标题】:How to get the full Fourier spectrum in MATLAB?如何在 MATLAB 中获得完整的傅里叶谱?
【发布时间】:2018-02-09 04:47:59
【问题描述】:

我创建了一个 6 位量化器并通过它传递一个信号,但是当我绘制 DFT 时,它在 200 MHz 处达到峰值,然后停止;我没有看到整个频谱。是什么阻止我在我的代码中获得更高频率的其余点?

这是我的代码:

bits = 6; %6-bit
fs = 400e6; %sampling frequency
amp = 1; %amplitude
f = 200e6; %actual frequency
vpp = 2; peak-to-peak voltage
LSB = vpp/(2^bits); %least-significant bit
cycles = 1000;
duration = cycles/f;
values = 0:1/fs:duration;
party = LSB:LSB:(vpp-LSB); %partition
blocker = 0:1:(2^bits - 1); %codebook
biblocker = fliplr(decimaltobinary(blocker)); %I created a function that converts decimal to binary
qtone = amp + amp*sin(2*pi*f*values); %tone
[index, q] = quantization(qtone,party,blocker); %I created a quantizing function
ftq = fft(q)/length(q);                                         % Fourier Transform (Scaled)
qf = linspace(0, 1, fix(length(q))/2+1)*(fs/2);                     % Frequency Vector
qi = 1:length(qf);                                      % Index Vector
qa = abs(ftq(qi))*2/.7562;
figure
plot(qf/1e6, qa)                                % One-Sided Amplitude Plot
xlim([100 500]);
xlabel('Frequency [MHz]')
ylabel('Amplitude')

这是我得到的:

【问题讨论】:

  • 在我看来,您正在绘制一半的样本,如果您期望更高的频率,也许您计算 qf 错误?您确实有一个错字:fix(length(q))/2+1 应该是 fix(length(q)/2)+1。但似乎linspace 不在乎它不是一个整数值。
  • @CrisLuengo 这是 qf!将其更改为 qf = linspace(0, 1, fix(length(q)))*(fs);谢谢!

标签: matlab signal-processing fft


【解决方案1】:

由于您选择了采样频率 fs = 400e6 即 400 MHz,因此您只能观察到高达 200e6 的频谱,即采样频率的一半。您可以使用 Nyquist Sampling Theorem 阅读其背后的理论。

作为一种解决方案,您需要将要在频谱上观察到的频率设置为两倍。不可能观察到整个频率,你需要设置一个有限的频率限制。

【讨论】:

    【解决方案2】:

    对于基带采样数据,频谱中高于一半采样率的所有内容都是多余的,只是低于一半采样率的频谱的别名。所以没有必要重复显示相同的光谱。

    在有限的时间长度内(小于地球年龄等)进行采样时,您必须以高于信号中最高频率两倍的速率进行采样。 2X(200MHz 信号为 400Msps)通常不起作用。

    【讨论】:

    • “经常”->“从不”。奈奎斯特频率与 0 频率混叠。该频率下的一小部分功率被视为直流分量,这部分的大小取决于相位。
    • 根据允许的误差范围,在 DFT/采样孔径中精确整数周期的完美余弦波可能会起作用,具体取决于相位和采样抖动。不太可能,但综合可能。
    • 完美余弦给出了 100% 的功率进入 Nuquist 频率而 0% 出现混叠的确切相位。但是,如果您稍微移动一下,您就会开始出现混叠。在任何实际情况下,您都无法将信号与采样系统同步得足够好,以至于看不到任何混叠。
    • 另外,正弦分量(在 fs/2 处或附近)不与 DC 混叠。它以其自身的复共轭为别名,从而导致自抵消。
    • 确实如此。好收获!
    【解决方案3】:
    qf = linspace(0, 1, fix(length(q)))*(fs);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多