Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中仅绘制FFT的一半_Matlab_Fft - Fatal编程技术网

在matlab中仅绘制FFT的一半

在matlab中仅绘制FFT的一半,matlab,fft,Matlab,Fft,我想在一个图中显示振幅和频率。它只显示两半。(我的声音长度为1秒!) 现在它仍然显示了两面,有人知道为什么吗?没有得到正确结果的原因是,与采样频率(44.1 kHz)相比,FFT产生的总点数混淆了 FFT计算的默认点数等于输入信号的长度。因此,如果您的信号data_pow2有128个点,那么输出也将有128个点。通过为FFT指定一个附加参数,可以手动指定所需的FFT点数: B = fft(A, N); 这里,N是您希望FFT具有的点数。不指定此选项将假定您希望总点数为输入的长度。因此,您实际需

我想在一个图中显示振幅和频率。它只显示两半。(我的声音长度为1秒!)


现在它仍然显示了两面,有人知道为什么吗?

没有得到正确结果的原因是,与采样频率(44.1 kHz)相比,FFT产生的总点数混淆了

FFT计算的默认点数等于输入信号的长度。因此,如果您的信号
data_pow2
有128个点,那么输出也将有128个点。通过为FFT指定一个附加参数,可以手动指定所需的FFT点数:

B = fft(A, N);
这里,
N
是您希望FFT具有的点数。不指定此选项将假定您希望总点数为输入的长度。因此,您实际需要做的是将
N
改为信号的长度。因此,您需要执行以下操作:

[x1,fs_orig,nbits]=wavread('Mysong.wav');
N = numel(x1);

在执行
wavread
后声明
。因此,如果你说你的信号是1秒,那么这意味着元素的总数应该是44100。当您使用
wavread
读取信号时,验证
N
等于44100

X\u mags2
在代码中未定义。我假设它存储了频率分解的大小。你能更新你的代码,让我们看看你的声明吗?考虑清理你的代码,以消除一些无关的部分。我可以看到一些没有增加您的问题的行。使用rms编辑它和使用dataOut ^2是一样的,对吗?不,这并不不幸。我从一个曲目中删去了1秒。@user4390280-您的采样频率是多少?是不是
44100
?因为如果你得到的信号长度是
88200
,这意味着你要删除两秒钟的数据,而不是一秒钟,如果
numel(x1)=88200
,你的采样频率是44.1khz,那可能是我的错误,有没有办法根据样本量计算采样频率?@user4390280-没有。获得的样本数与采样频率无关。顺便说一句,您对wavread的调用已经给出了采样频率。这是
wavread
的第二个输出参数,作为
fs\u orig
。然而,我告诉你,你只需要把信号的长度除以2。您正在以默认方式调用
fft
,这将为您提供总点数作为信号长度。如果你想画出光谱的一半,只需将长度除以2即可。我不知道你怎么不让它工作。还是我的录音有误?因为我应该有44100个样本/秒,每个样本16位,并且需要选择其中的一秒。
[x1,fs_orig,nbits]=wavread('Mysong.wav');
N = numel(x1);