- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
import Cocoa
import Accelerate
let filePath = Bundle.main.path(forResource: "sinusoid", ofType: "txt")
let contentData = FileManager.default.contents(atPath: filePath!)
var content = NSString(data: contentData!, encoding: String.Encoding.utf8.rawValue) as? String
var idx = content?.characters.index(of: "\n")
idx = content?.index(after: idx!)
repeat {
//let fromIndex = index(from: )
content = content?.substring(from: idx!)
idx = content?.characters.index(of: "\n")
idx = content?.index(after: idx!)
} while content!.characters.contains("%")
let regex = try? NSRegularExpression(pattern: "[ ]+", options:[])
let delimiter = ","
var modifiedString = regex?.stringByReplacingMatches(in: content!, options: [], range: NSRange(location: 0, length: (content! as NSString).length), withTemplate: delimiter)
let lines = modifiedString?.components(separatedBy: "\n")
var s = [Double]()
for var line in lines! {
if !line.isEmpty {
let data = line.components(separatedBy: ",")
s.append(Double(data[1])!)
}
}
let length = vDSP_Length(pow(2, floor(log2(Float(s.count)))))
let L = Int(length)
// zrop or zop?
// zrop covers real to complex, and zop covers complex
// length must be a power of 2 or specific multiples of powers of 2 if size is at least 4
let setup = vDSP_DFT_zrop_CreateSetupD(nil, length, vDSP_DFT_Direction.FORWARD)
var inputReal = UnsafeMutablePointer<Double>.allocate(capacity: L)
var inputImaginary = UnsafeMutablePointer<Double>.allocate(capacity: L)
var outputReal = UnsafeMutablePointer<Double>.allocate(capacity: L)
var outputImaginary = UnsafeMutablePointer<Double>.allocate(capacity: L)
for i in 0..<L {
inputReal[i] = s[i]
inputImaginary[i] = 0.0
}
vDSP_DFT_ExecuteD(setup!, inputReal, inputImaginary, outputReal, outputImaginary)
for i in 0..<L {
print("\(outputReal[i]) + \(outputImaginary[i])i")
}
输入文件“sinusoid.txt”位于以下链接中 https://dpaste.de/M1VD
输入文件数据由频率分别为 50 和 120 的两个正弦波组成。Matlab 代码生成以下链接中给出的正确输出:
当对Matlab的结果进行缩放并获取幅度时,它正确地显示频率为50时的幅度为0.7,频率为120时的幅度为1。
clear all; close all; clc;
data = load('sinusoid.txt');
S = data(:,2);
Fs = 1000;
Y = fft(S);
L = length(S);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
plot(f,P1)
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')
与 Matlab 输出相比,Swift 代码输出完全不同且无法识别,无论应用什么缩放因子以及是否应用实数到复数或复数到复数转换:
有什么想法吗?
最佳答案
您的 2 FFT 的长度不同,因此结果当然不会匹配。您还将不同数量的数据传递给 2 个 FFT。
打印出 FFT 长度和输入数据向量以调试代码。在比较结果之前确保输入匹配。
此外,Apple 的 Accelerate/vDSP FFT 可以使用 2 的幂以外的长度(也允许使用 3 或 5 因子的长度)。
另外,请注意,Matlab 索引数组从 1 开始,而不是从 0 开始,这在 C 和 Swift 函数中更为常见。
关于swift - Swift 中的 DFT 结果与 MATLAB 中的不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41925773/
假设一个数字序列(波状数据)。然后我执行 DFT(或 FFT)变换。我想要实现的下一步是找到与数据中包含的实际频率相对应的频率。正如我们所知,DFT 输出具有实部和虚部 a[i] 和 b[i]。如果我
我正在尝试在频域中执行逆滤波和伪逆滤波。 但是我在访问 DFT 系数和之后乘以 DFT 矩阵时遇到问题,因为我得到了复数,因此实际上是两个矩阵...... 基本上逆向过滤执行 F = G/H, 其中
对于我的项目,我必须对大型 2D 输入矩阵进行 DFT,对其进行处理,然后使用 IDFT 将其转换回来,并将结果与输入矩阵进行比较。我的问题出在 2D DFT 步骤中。我使用一个小的简单数据集编写
我有一个场景,我必须从未知的 excel 文件和未知的选项卡中获取数据。所以我创建了一个包含 50 列的表。 问题是进入第二个循环后 ssis 包没有进展。第一个循环获取文件名,第二个循环获取该文件中
我正在尝试用 Java 编写一个小型离散傅立叶变换,以查找清晰的 400 Hz 正弦信号中的幅度谱(1 秒为 pcm 带符号短) 首先我计算复数值的 DFT: public void berechne
我们需要在 GSL 中更改/重新实现标准的 DFT 实现,即 int FUNCTION(gsl_dft_complex,transform) (const BASE data[],
注意:这个问题最初是在 OpenCV forum 上提出的几天前。 我正在构建一个广泛使用二维 dft、离散傅立叶变换的图像处理程序。我正在尝试加速以实时运行。 在该应用程序中,我仅使用由矩形 ROI
我正在编写一个非常简单的就地 DFT。我正在使用此处显示的公式: http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition与
我试图通过 Matlab 中的 DFT(数字傅里叶变换)使用相关性来比较 2 个信号的相似程度,但相关函数给出的结果并不是真正可预测的。例如,如果我比较那两对信号: 相关性 1 和 2 相关性 3 和
更多细节:我开始写我的“学士学位论文”这将是与图像压缩相关的东西 我想知道您是否知道有任何尝试使用 PNG 格式的方波傅里叶级数(变换)作为滤波器而不是 haar 小波?会有什么好处吗? 如果您对我的
在这个 DFT 上我一直在用头撞墙。它应该打印出:8,0,0,0,0,0,0,0 但我得到的是 8,然后是非常非常小的数字。这些是舍入误差吗?有什么我可以做的吗?我的 Radix2 FFT 给出了正确
我想要质心的坐标并且我已经计算了 DFT(用于不同的目的)。我看过一些幻灯片,暗示可以通过查看矩阵的第一个值来粗略估计质心。代码基于:http://docs.opencv.org/doc/tutori
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve t
我正在尝试对两个单独的图像进行逐点乘法傅立叶变换,然后再转换回普通图像。我不太熟悉在 OpenCV 中使用傅立叶变换,但这就是我目前所拥有的。显示输出的最后一行导致类型为“System.Runtime
我正在尝试在我的 C++ 代码中使用 FFTW3,并且我想使用 scipy.fftpack.fft 在 python 中完成同样的事情 用于真正的一维信号。我只是制作一维信号并从信号中找到频率。我不知
我正在进行一项作业,以 20kHz 的采样频率对频率为 500Hz 的方波执行 200 点 DFT,其幅度在 0 和 20 之间交替。 我正在使用 C++,我已经想出了如何编写 DFT 方程的代码,我
我最近在我的 Ubuntu 16.04 机器上重新编译了 OpenCV 3.2.0 以包含 CUDA。出于某种原因,cv::dft() 现在对特定图像大约需要 30 秒,而不是编译前的 5 秒。这是灾
我正在研究图像频率过滤的 GPU 实现。我的代码在 CPU 上运行良好(我使用了类似 this 的东西),但我花了一整天时间尝试在 GPU 上进行同样的工作——但没有成功。我想在频域中应用一个滤波器,
我创建了一个简单的积分函数和 DFT 函数,可以将它们与我编写的其他代码一起使用。 from math import sin,pi from time import time def aintegra
我使用以下代码计算图像与指定内核(在我的例子中是高斯内核)的卷积。每次我得到不同的结果,结果图像甚至不接近我在空间域中通过卷积获得的图像。首先我认为问题出在图像的数据类型上。我将它们更改为 32 和
我是一名优秀的程序员,十分优秀!