matlab - 使用内置 Matlab fft/ifft 函数和频域/时域积分/微分进行幅度变化
问题描述
在我的一个项目中使用 matlab fft 函数时,我得到了令人困惑的结果,并且想了解原因。
我已经在测量速度上实现了傅里叶变换(通过使用 matlab fft 函数) ,然后将该信号整合到频域中(通过除以 i*omega)。然后,我使用内置的 matlab ifft 函数将信号带回时域。然后我在时域中区分信号(使用 diff 函数),这意味着我应该得到与原始速度信号相同的信号。
我确实得到了相同的形状。但是,我没有得到相同的值......有谁知道为什么会这样?我怎样才能克服这个问题来恢复我的原始信号?
speed_spectrum = zeros(sampsize,length(x));
sampsize = double(sampsize);
window = hanning(sampsize); % hanning window
%Find size of file, delta T, sampling freq and delta F
deltat=1/sampfreq; %Seconds
deltaf=sampfreq/sampsize; %Hertz
%Creating frequency and time vectors
freq=0:deltaf:(sampsize-1)*deltaf;
time=0:deltat:(sampsize-1)*deltat;
在这里,我在我的速度信号上实现了 fft:
for z2 = 1:length(x) %Each matrix corresponds to measurement at point x(z2) along the beam
for z=1:navg
speed_spectrum(:,z2) = speed_spectrum(:,z2) + (fft(data(:,z2,z).*window))./navg;
end
end
我将我的信号整合到频域中:
for z2 = 2:length(omega)
position_spectrum(z2,:) = speed_spectrum(z2,:)/(1i * omega(z2));
end
我应用 ifft 将我的位置信号带回时域:
position_tdomain = ifft(position_spectrum(:,:));
然后我区分位置信号以返回我的速度信号:
speed_tdomain = diff(position_tdomain);
由于应用了汉宁窗,因此在窗口形式中看到如此大的差异是正常的。
但是当放大时,在中心附近(汉宁窗等于或接近 1),我们可以观察到相同的形状,但幅度不同:
这是由于频域的积分,然后是时域的微分,还是 fft 和 ifft 函数?
解决方案
推荐阅读
- java - 在 Java 中将 Nan 值替换为 0
- javascript - 错误:ERR_CERT_AUTHORITY_INVALID with fetch () in web
- jquery - 如何使用上个月和特定日期的选择
- terraform - Terraform 计划错误:不支持的参数
- azure - Azure AD SCIM:来自 Azure AD 的自定义 SCIM 应用程序的禁用请求问题
- google-ads-api - 是否可以在某个日期范围内每天获取 Google Ads 指标数据?
- jackson-databind - 如何使用 Jackson ObjectMapper 2.12 启用 ALLOW_NON_NUMERIC_NUMBERS?
- spring - Spring Boot 和 thymeleaf 分页和排序
- performance - 加速 CSV Powershell 脚本
- c# - 我正在尝试从 sql 数据库登录,但不断收到此错误