我有这个代码,但它会随机返回0到1050左右的随机频率.请你帮我理解为什么会这样.
我的数据长度为1024,采样率为8192,数据是一个填充了麦克风输入数据的短阵列.
float *iSignal = new float[2048];
float *oSignal = new float[2048];
int pitch = 0;
for(x=0;x<=1024;x++) {
iSignal[x] = data[x];
}
fft(iSignal,oSignal,1024); //Input data, output data, length of input and output data
for(int y=0;y< 2048;y+=2) {
if((pow(oSignal[y],2)+pow(oSignal[y+1],2))>(pow(oSignal[pitch],2)+pow(oSignal[(pitch)+1],2))) {
pitch = y;
}
}
double pitchF = pitch / (8192.0/1024);
printf("Pitch: %f\n",pitchF);
Run Code Online (Sandbox Code Playgroud)
谢谢,
尼尔.
编辑:更改了代码,但它仍然返回随机频率.
我想在MATLAB中使用fft来分析保存为excell文件的一些实验数据.我的代码:
A=xlsread('Book.xls'); G=A'; x=G(2, : );
N=length(x);
F=[-N/2:N/2-1]/N;
X = abs(fft(x-mean(x),N))
X = fftshift(X);
plot(F,X)
Run Code Online (Sandbox Code Playgroud)
但它绘制了一个具有大0Hz错误分量的图形,我的真实频率约为395Hz,并且未在绘制的图形中显示.请告诉我有什么问题.
任何帮助,将不胜感激.
我使用Apple的Accelerate Framework(在iOS设备上执行)成功实现了采用数组数据并对其运行快速傅里叶变换的代码.
我现在的问题是频率轴的比例是多少?结果在某些频率范围内具有预期的峰值,但我不确定频率应该是多少.Accelerate Framework的FFT函数接收一个数组并吐出一个具有相同(或更多)数据点的数组.是否假设所有这些点在时间上是等间隔的?它不采用采样频率或时间变量作为输入.频率轴的比例(即每个点上的频率增量)只是采样周期除以2*Pi(或类似的东西?)我在文档中找不到很多信息.我一直在网上寻找类似的问题,但没有找到任何东西.
这在某种程度上是一个数学问题,尽管它在很大程度上取决于Accelerate Framework的实现.
谢谢
在上一个问题中,我曾问过为什么我不能简单地否定源时域幅度值来产生破坏性噪声信号?
其中一张海报说,虽然简单地产生反极性(否定)信号在理论上是有效的,但在实践中它是不可能的
所以我问,主动噪声消除的基本方法(以某种半技术方式)是什么?
其次,为什么大多数关于这个主题的文献都在频域?
我使用fftw/C++和在线计算器计算了数组{1,2,3,4,5,6}的FFT(http://calculator-fx.com/calculator/fast-fourier-transform-calculator-fft/ 1d离散傅立叶变换).结果似乎有点不同.
fftw输出:
Run Code Online (Sandbox Code Playgroud)0 21.000000 0.000000 1 -3.000000 5.196152 2 -3.000000 1.732051 3 -3.000000 0.000000 4 0.000000 0.000000 5 0.000000 0.000000
在线计算器输出:
Run Code Online (Sandbox Code Playgroud)21 + 0j -3 + 5.196152j -3 + 1.732051j -3 + 0j -3 - 1.732051j -3 - 5.196152j
如上所示,fftw的后两个结果变为零.无法弄清楚为什么.有人可以帮帮我吗?谢谢.
[编辑] cpp代码:
int main()
{
fftw_complex *out;
fftw_plan plan;
double arr[]={1,2,3,4,5,6};
int n = sizeof(arr)/sizeof(double);
out = (fftw_complex*)fftw_malloc ( sizeof ( fftw_complex ) * n );
plan = fftw_plan_dft_r2c_1d ( n, arr, out, FFTW_ESTIMATE );
fftw_execute ( …Run Code Online (Sandbox Code Playgroud) 我试图比较一个cosinus的matlab fft和两个不同的零填充.我认为它不会改变频率响应,但是当我叠加两条曲线时,频率不一样.我想我做两个fft的方式有问题吗?
Fe = 8000;
F = 1680;
w = 2*pi*F;
N = 50;
P = 50;
T = 1/Fe;
t = (0:T:P*T);
x = real(exp(i*w*t))
x_reduced = x(1:P)
X = fft(x_reduced,N)
N = 1000;
Y = fft(x_reduced,N)
plot(abs(Y))
hold on
plot(abs(X),'*')
Run Code Online (Sandbox Code Playgroud)
提前致谢
我正在制定一个与确定销售动态相关的项目.这就是我的数据库看起来像http://imagizer.imageshack.us/a/img854/1958/zlco.jpg.有三列:
产品 - 介绍产品组
自产品推出以来的一周时间(周),前26周
Sales_gain - 产品销售如何按周变化
在数据库中有3302个观测值= 127个时间序列
我的目标是将时间序列分组,这些组将向我展示不同的销售动态.在聚类之前,我想使用快速傅立叶变换来改变向量上的时间序列并考虑幅度等,然后使用距离算法和分组产品.
这是我第一次处理FFT和聚类,所以如果有人指出步骤,我将不胜感激,我必须在使用FFT之前/之后对销售动态进行分组.我想在R中执行所有步骤,所以如果有人键入我应该使用哪些程序来执行所有步骤,那将会非常棒.
这就是我的时间序列现在的样子http://imageshack.com/a/img703/6726/sru7.jpg
请注意,我对时间序列分析相对较新(这就是为什么我不能把我的代码放在这里),所以你可以在R中提供的任何清晰度或任何你可以推荐的有效完成这项任务的包都将受到赞赏.
PS而不是FFT我在这里找到了DWT的代码 - > www.rdatamining.com/examples/time-series-clustering-classification但不能在我的数据库和时间序列中使用它(建议R在26周后分析新的时间序列).可以向我解释一下吗?
我有两个浮点值列表,一个表示时间,另一个表示从示波器获取的电压值(我假设)。我必须绘制一个振幅频谱图,但是我不确定我需要使用什么功能以及需要给它提供什么参数,我尝试了fft(u),但是没有用。
感谢您的帮助,如果需要更多信息,请告诉我。
我得到了所有像素的RGB值
R=[],
G=[],
B=[]
图片中的数组.它们是包含数组的8位[0-255]值.我需要使用傅里叶变换以有损方法压缩图像.
N将是像素数.n是我的数组.什么是k和想象j?
我可以将这个等式实现为编程语言并获取压缩的图像文件吗?
或者我需要将转换方程用于不同的值而不是RGB?
我有一个有限的系统,并希望在STM32F103C8中实现FFT,而无需任何额外的内存缓冲区.
所以我想知道如果我有一个2592x1944x8bit大小的一个图像需要多少内存?
实际上,我希望有一个过程如
原始图像---> FFT --->模糊---> IFFT --->修改后的图像
在STM32F103C8上FFT的内存要求是什么?