zoukankan      html  css  js  c++  java
  • DSP

    具有指定采样率的偶数长度输入

    对于一个采样率为 1 kHz 的偶数长度信号,分别使用 fft 和 periodogram 获得其周期图。比较二者的结果。

    创建一个含 N(0,1) 加性噪声的 100 Hz 正弦波信号。采样频率为 1 kHz。信号长度为 1000 个采样点。使用随机数生成器的默认设置以获得可重现的结果。

    rng default
    Fs = 1000;
    t = 0:1/Fs:1-1/Fs;
    x = cos(2*pi*100*t) + randn(size(t));

    使用 fft 获取周期图。信号是偶数长度的实数值信号。由于信号是实数值信号,您只需要对正负频率之一进行功率估计。
    为了保持总功率不变,将同时在两组(正频率和负频率)中出现的所有频率乘以因子 2。零频率 (DC) 和 Nyquist 频率不会出现两次。绘制结果。
    N = length(x);
    xdft = fft(x);
    xdft = xdft(1:N/2+1);
    psdx = (1/(Fs*N)) * abs(xdft).^2;
    psdx(2:end-1) = 2*psdx(2:end-1);
    freq = 0:Fs/length(x):Fs/2;

    计算并使用 periodogram 绘制周期图。二者的结果相同。

    periodogram(x,rectwin(length(x)),length(x),Fs)

    具有归一化频率的输入

    通过 fft 为使用归一化频率的输入生成周期图。创建一个带 N(0,1) 加性噪声的正弦波信号。该正弦波的角频率为 π/4 弧度/采样点。使用随机数生成器的默认设置以获得可重现的结果。

    rng default
    n = 0:999;
    x = cos(pi/4*n) + randn(size(n));

    使用 fft 获取周期图。信号是偶数长度的实数值信号。由于信号是实数值信号,您只需要对正负频率之一进行功率估计。为了保持总功率不变,将同时在两组(正频率和负频率)中出现的所有频率乘以因子 2。零频率 (DC) 和 Nyquist 频率不会出现两次。绘制结果。

    N = length(x);
    xdft = fft(x);
    xdft = xdft(1:N/2+1);
    psdx = (1/(2*pi*N)) * abs(xdft).^2;
    psdx(2:end-1) = 2*psdx(2:end-1);
    freq = 0:(2*pi)/N:pi;

    计算并使用 periodogram 绘制周期图。二者的结果相同。

    periodogram(x,rectwin(length(x)),length(x))

    具有归一化频率的复数值输入

    使用 fft 为具有归一化频率的复数值输入生成周期图。采用一个带 N(0,1) 复噪声的复指数信号,角频率为 π/4 弧度/采样点。采用随机数生成器的默认设置,以获得可重现的结果。

    rng default
    n = 0:999;
    x = exp(1j*pi/4*n) + [1 1j]*randn(2,length(n))/sqrt(2);

    使用 fft 获得周期图。由于输入是复数值,此处求 [0,2π) 弧度/采样点区间内的周期图。绘制结果。

    N = length(x);
    xdft = fft(x);
    psdx = (1/(2*pi*N)) * abs(xdft).^2;
    freq = 0:(2*pi)/N:2*pi-(2*pi)/N;

    使用 periodogram 获取并绘制周期图。比较 PSD 估计。

    periodogram(x,rectwin(length(x)),length(x),'twosided')

    Reference

      1. MathWorks





  • 相关阅读:
    EventLog实现事件日志操作
    可否控制<link type=text/css rel=stylesheet href=style.css>
    强制IE浏览器或WebBrowser控件使用指定版本显示网页2
    C#中的@符号
    C#运算符大全_各种运算符号的概述及作用
    调试时设置条件断点
    C语言:用字符读取流和输出流来读写入数据。(文本文件)
    建立完整的单向动态链表(包括初始化、创建、插入、删除、查找、销毁、输出)
    C语言:创建动态单向链表,创建完成后,输出每一个节点的数据信息。
    C语言:使用realloc函数对malloc或者calloc动态分配的内存大小进行扩展
  • 原文地址:https://www.cnblogs.com/zzyzz/p/13463490.html
Copyright © 2011-2022 走看看