Matlab实现快速傅里叶逆变换

2022-07-27 08:55:40 浏览数 (1)

昨晚分享了matlab的快速傅里叶变换,应群友要求,分享一下快速傅里叶逆变换

昨晚文章:Matlab实现傅里叶变换

Matlab实现快速傅里叶逆变换通过ifft函数。


语法

X = ifft(Y) X = ifft(Y,n) X = ifft(Y,n,dim) X = ifft(___,symflag)


说明

X = ifft(Y) 使用快速傅里叶变换算法计算 Y 的逆离散傅里叶变换。X 与 Y 的大小相同。

  • 如果 Y 是向量,则 ifft(Y) 返回该向量的逆变换。
  • 如果Y 是矩阵,则 ifft(Y) 返回该矩阵每一列的逆变换。
  • 如果 Y 是多维数组,则 ifft(Y) 将大小不等于 1 的第一个维度上的值视为向量,并返回每个向量的逆变换。

X = ifft(Y,n) 通过用尾随零填充 Y 以达到长度 n,返回 Y 的 n 点傅里叶逆变换。

X = ifft(Y,n,dim) 返回沿维度 dim 的傅里叶逆变换。例如,如果 Y 是矩阵,则 ifft(Y,n,2) 返回每一行的 n 点逆变换。

X = ifft(___,symflag) 指定 Y 的对称性。例如,ifft(Y,'symmetric') 将 Y 视为共轭对称。

示例

向量的逆变换,时空采样数据与频率采样数据间的傅里叶变换及其逆变换。

创建一个向量并计算其傅里叶变换。

代码语言:javascript复制
X = [1 2 3 4 5];
Y = fft(X)
Y = 1×5 complex

  15.0000   0.0000i  -2.5000   3.4410i  -2.5000   0.8123i  -2.5000 - 0.8123i  -2.5000 - 3.4410i
代码语言:javascript复制
计算 Y 的逆变换,结果与原始向量 X 相同。
代码语言:javascript复制
ifft(Y)
ans = 1×5

     1     2     3     4     5

多写几句,基于傅里叶结果来重构信号,基本思想是通过傅里叶变换得到的主频幅值和相位得到正弦信号,并叠加重构。

代码语言:javascript复制
Fs = 1000;            % Sampling frequency                    
T = 1/Fs;             % Sampling period       
L = 1500;             % Length of signal
t = (0:L-1)*T;        % Time vector

构造一个信号,其中包含幅值为 0.7 的 50 Hz 正弦量和幅值为 1 的 120 Hz 正弦量。

代码语言:javascript复制
S = 0.7*sin(2*pi*50*t)   sin(2*pi*120*t);
代码语言:javascript复制
plot(1000*t(1:50),S(1:50))
xlabel('t (milliseconds)')
ylabel('X(t)')
代码语言:javascript复制
Y = fft(S);
f = Fs*(0:(L/2))/L;
P2 = abs(Y/L);
P1 = P2(1:L/2 1);
P1(2:end-1) = 2*P1(2:end-1);

plot(f,P1) 
title('Single-Sided Amplitude Spectrum of S(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')
代码语言:javascript复制
ph=angle(Y(1:L/2));
ph=ph*180/pi;
figure
plot(f(1:L/2),ph(1:L/2));
xlabel('频率/hz'),ylabel('相角'),title('相位谱');
grid on;
代码语言:javascript复制
[pks,locs] = findpeaks(P1);
[b,index] = sort(pks);
num = 1;
amp = b(end-num:end)
fre = f(locs(index(end-num:end)))
deg = ph((index(end-num:end)))
S1 = zeros(1,L);
for i = 1:length(amp)
    S1 = S1   amp(i)*sin(2*pi*fre(i)*t abs(deg(i))/180*pi);
end
figure
plot(t,S,'b',t,S1,'r')

这种方法其实看起来效果不太好,理论上可以,难得在于得到相位信息,如果得到准确的相位信息,则结果如下图,完美拟合上。

0 人点赞