matlab中使用fft(x)方法求得的64点的频率输出是否倒序的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中使用fft(x)方法求得的64点的频率输出是否倒序的?相关的知识,希望对你有一定的参考价值。
因为我用VHDL中IP核产生的结果与matlab基本相近,但是符号上有一些区别,所以我认为可能是倒序输出的,是这样子吗?
还是fft算法本身算出来就是倒序的,主要是我将来要用相位,正负号影响蛮大的,谢谢
而Matlab利用的是软件算法,输入输出都是正位序的,以FFT8为例,输入输出的脚标顺序都是0,1,2,3,4,5,6,7.
使用IP core之前最好参考一下data sheet.追问
我在IP核设置选项中选择正序输出,在matlab中未设置,这两个输出结果反而是不一样的,如果我在VHDL中设置反序输出的话,就和matlab中一样了?
这是怎么回事
我没用过这个IP,因为都是自己写的.可能正序输出的话,输入相当于被认为是反序了,我建议你IP核中选择反序输出,然后为了和Matlab对应,把Matlab的结果做如下操作:
n=6;
y = zeros(2 ^ n, 1);
for k = 0 : 2^n-1
kchar = dec2bin(k,n);
lchar = kchar(n:-1:1);
l = bin2dec(lchar);
y(k+1) = x(l+1);
end
当然你对不上也有可能是因为有scale的缘故.你看一下,如果输入第一个数和输出第一个数之间的延时的时钟周期大概比FFT点数多一点,例如64点FFT,延时在80以内,基本上就是输入输出有一个是认为是逆序了,延时的时钟周期跟2倍FFT点数差不多,基本上可以认为他处理中已经把逆位序给倒过来了.
非常感谢,方便给个QQ么,以后还有fpga的问题请教,我的QQ:57354738,
追答287449986
参考技术A fft的频谱是关于中间点左右对称的,64位的话一般只画1:32个点,即plot(fs/N*(1:N/2),2*abs(fft(y)/L))。假设数据长度是L个点。(L≤N)后面32个点可以认为是负频率部分的。
如何在 MATLAB 中设计窄带阻滤波器
【中文标题】如何在 MATLAB 中设计窄带阻滤波器【英文标题】:How to design a narrow band stop filter in MATLAB 【发布时间】:2014-08-27 04:51:49 【问题描述】:我是使用 Matlab 进行信号处理的新手。我有一个包含 10000 个点的信号。进行 FFT 后,我发现位于 3 附近的频点应该被移除。我使用 Kaiser 窗设计了一个 FIR 带阻滤波器。我尝试将窗口长度增加到大约 512 或更高,并且还增加了 fir1 中的顺序。但是,归一化的阻带总是接近 0。我认为 FIR 的阶数非常大会带来一些问题。是否有其他方法可以设计窄带阻滤波器并保持相位不变?谢谢大家! 我的代码如下所示:
win=kaiser(513,10);
b=fir1(512,[2.8/1000,3.3/1000],'stop',win);
y=filtfilt(b,1,x); % x is input signal which length is 10000
【问题讨论】:
【参考方案1】:对于零相位数字滤波,matlab 中有 filtfilt。
一些过滤器具有不同练习可接受的相位变化, 您可以尝试使用 iir 过滤器,例如 matlab 中的 butterworth 过滤器。
[b,a] = 黄油(n,Wn,'stop')
【讨论】:
以上是关于matlab中使用fft(x)方法求得的64点的频率输出是否倒序的?的主要内容,如果未能解决你的问题,请参考以下文章