【问题标题】:Matlab FFT2 normalization after processing处理后的Matlab FFT2归一化
【发布时间】:2016-04-29 03:47:36
【问题描述】:

我正在尝试了解 MATLAB FFT 标准化的工作原理。

让我们讨论以下示例。

%%
sum2D = @(a) sum(reshape(a,1,[]));             % sum elements in 2D matrix

a = [0 0 0; 1 2 1; 1 1 1; 1 1 1; 0 0 0]

f1 = fft2(a)

m = [0 32 0; 0 0 0; 0 1 0; 0 2 0; 0 0 0]

fs = m.*fftshift(f1);
fs = fs./sqrt(numel(fs));

fm = ifft2(fs);
fm = fm.*sqrt(numel(fm))

% imshow(abs(fs))

norm(a(:))^2,norm(fs(:))^2,norm(fm(:))^2

sum2D(abs(a).^2)
sum2D(abs(fs).^2)
sum2D(abs(fm).^2)
sum2D(abs(fp).^2)

如果 m = 1,则归一化有效,并且初始信号 fft 和反 fft 中的能量相同。但是,如果我将 fft 乘以某个向量 m 后的信号,那么我不知道如何再次对其进行归一化。

如果与m相乘后能量会发生变化,还是我做错了什么。

【问题讨论】:

    标签: matlab fft normalization ifft


    【解决方案1】:

    是的,将频率乘以矩阵m 会改变能量。您放大了一些频率并杀死了其他频率:这很可能使信号更强或更弱。举个简单的例子,假设m 的所有条目都等于 2:然后将信号加倍,将其能量乘以 4。对于通用乘数 m,对能量的影响将取决于信号是什么。

    如果你真的希望fm 拥有与a 相同的能量,那就这样吧:

    fm = fm*norm(a(:))/norm(fm(:));
    

    直接回答“FFT 归一化的工作原理”:应用fft2 将能量乘以矩阵的元素数。函数ifft2fft2 的倒数,它将能量除以元素的数量。因此,如果您在fft2 之后使用ifft2 并且不关心诸如fs 之类的中间结果,则不需要对sqrt(numel(...)) 进行任何除法或乘法运算。

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 2016-02-10
      • 2015-10-02
      相关资源
      最近更新 更多