真实数据FFT与重构频基问题

56次观看(过去30天)
大家好,感谢您的时间。
我希望执行FFT并重建由脚本生成的信号'eta' http://benjaminbiegel.com/files/oceanWaveGeneration.zip
三个主要问题:
  1. 采样率和频率间隔产生和绘制FFT是不正确的
  2. 挣扎于信号重建,不知道如何获得原始(随机)信号
  3. 图轴值似乎完全超出范围…
在来这里之前,我看过很多相关的网站帖子和试验。你能给我一个有意义的解决方案吗?可能还会指出概念上的错误。
多谢。
尝试代码
% t是时间序列,在上面的脚本中定义
fs = 1/Ts;% Ts在上面的脚本中定义
X = eta;% eta是用于变换和重建的原始信号
X = fft(X);
N =长度(x)%,因此频率序列的长度等于时间序列的长度,以正确地绘制X
C = (-1 * fs) / 2:fs / n:fs / 2 - fs / n;%生成频率序列,在频域绘制X
杂志= abs (X);
ph =角(X);
rec =杂志。* exp(我* ph值);
rec =传输线(rec);
%%用于绘图的伪代码
原始信号百分比
情节(t, x)
%级
情节(c, fftshift (abs (X))
%相位响应
情节(c,角(X))
%傅里叶谱的实部
情节(c,真正的(X))
%重建信号
情节(t, rec)
震级重建百分比
情节(ifftshift (ifftn (mag)))
相位重建百分比
情节(传输线(exp(我* ph值)))
1评论
Vimal kumar chawda
Vimal kumar chawda 2021年6月24日
您的资料不完整,能否重新表述数据和问题

登录评论。

答案(1)

大卫Goodmanson
大卫Goodmanson 2021年6月28日
嗨Vmat。
我相信,对于“rec”,你可能会混淆时域和频域。下面的代码使用rec作为时域数量,使用rec_f作为频域数量。
首先,时间轴和频率轴都只依赖于Ts,所以如果缩放看起来是错误的,你将不得不回到原始论文并验证Ts。频率缩放c是正确的,尽管从排版上看,我认为下面代码中的内容更清晰。
对于频域的幅值,你可以用
X = fft(X)/n;
这很常见。这就需要ifft乘以n来弥补1/n。
为了在时域中重建某个东西而分别对大小或相位进行ifft是行不通的。它只适用于对复数rec_f求ifft。
Ts = 1e-3;%任意
fs = 1/Ts;
N = 1000;
t = (0:n-1)* t;
x = sin(100*(t/Ts).²/n²);
图(1)
情节(t, x);网格
X = fft(X);
%生成频率序列,在频域绘制X
C = -fs/2: fs/n: fs/2-fs/n;
mag = abs(X);
ph =角度(X);
Rec_f = mag.*exp(i*ph);
原始信号百分比
图(1)
情节(t, x);网格
%频域图
注意,由于x是实数,mag和real是f和的偶函数
角和象是f的奇函数
%级
图(2)
情节(c, fftshift (abs (X)));网格
%相位响应
图(3)
情节(c, fftshift(角(X)));网格
%傅里叶谱的实部
图(4)
情节(c, fftshift(真正的(X)));网格
%傅里叶谱的虚部
图(5)
情节(c, fftshift(图像放大(X)));网格
%的时域重构
Rec = ifft(rec_f);
图(6)
情节(t x, t,矩形,“o”);网格%比较

类别

了解更多傅里叶分析与滤波帮助中心而且文件交换

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!