- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个与 matlab help page 上完全相同的对数线性调频信号.
t = 0:0.001:10; % 10 seconds @ 1kHz sample rate
fo = 10; f1 = 400; % Start at 10Hz, go up to 400Hz
X = chirp(t,fo,10,f1,'logarithmic');
figure(2);
spectrogram(X,256,200,256,1000,'yaxis');
然后我使用以下代码将它带到频域,该代码适用于我的其他应用程序。
fft_prep = fftshift(fft(X));
fft_mag = abs(fft_prep);
pos_fft = fft_mag(1:ceil(length(fft_mag)/2));
db_fft = 20*log10(pos_fft);
figure(1);
plot(db_fft);
我很惊讶地看到下图似乎令人兴奋 1kHz-5kHz:
我不太熟悉 matlab 中的 chirp 函数,想知道是否有人看到我遗漏的明显东西。欢迎任何其他指点。
最佳答案
chirp
函数没问题...
您只需要根据频率值绘制 db_fft,而不是向量索引 =)。
plot(linspace(fo,f1,length(db_fft)), db_fft);
我还测试了使用我的其他 FFT 方法计算信号的 FFT,它们也指示了 0 到 400 Hz 之间的范围。
更新:
IMO,我发现不以 dB 或功率(周期图)为单位绘制在视觉上更容易。这是一个很好的例子和我计算时域信号 FFT 的转到方法:mathworks.se/help/matlab/ref/fft.html
回复:
经过一番思考,我同意我上面的回答是不正确的,但不是因为你所说的原因。频域中的 x 轴不应达到线性调频脉冲的实际长度(或一半、双倍频或类似的长度)。频域中的 x 轴应达到信号采样率 (Fs/2) 的一半,您有义务确保以两倍于您希望/希望的最大频率的采样频率对信号进行采样解决。
换句话说,假设您的 FFT 与时域信号的长度相同/两倍/一半是不正确的,因为我们可以选择任意数量的频率仓来表示 FFT,最佳实践是长度 = N ^2(2 的幂)用于快速计算。想一想,为什么在计算 FFT 时甚至需要知道时间值?你不知道!您只需要采样频率(应该设置为 Fs = 1000 btw,而不是 Fs = 0.001)。
那我上面的回答是不正确的,应该是:
plot(linspace(0, Fs/2, length(db_fft)), db_fft)
您写的不是 Fs/2,而是 length(t)/(2*Tfinal)。它(几乎)与 Fs/2 的值相同,但它不是正确的处理方式=)。
这是我的 goto FFT 方法(值不是以 dB 为单位)。
function [X,f] = myfft(x,Fs,norm)
% usage: [X, f] = myfft(x,Fs,norm);
% figure(); plot(f,X)
% norm: 'true' normalizes max(amplitude(fft))=1, default=false.
if nargin==2
norm=false;
end
L = length(x); NFFT = 2^nextpow2(L);
f = Fs/2*linspace(0,1,NFFT/2+1);
%f =0:(Fs/NFFT):Fs/2;
X = fft(x,NFFT)/L; X = 2*abs(X(1:NFFT/2+1));
if norm==true; X = X/max(abs(X)); end
end
这是 [Xfft, f] = myfft(X,Fs) 的结果图;情节(f,Xfft);请注意,根据 NyQuist 定理,返回频率仓向量具有 max(f) = Fs/2(无法解析任何高于 Fs/2 的频率)。
关于Matlab 绘图对数线性调频幅度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15401123/
所以,我有一个 Triangle->AABB 碰撞算法,我让它返回 AABB 碰撞的三角形。我希望三角形的 3 个 vector 和运动的方向/幅度能让我确定一个偏转 vector ,这样当你以一个角
我希望我能找到一种方法从 python 中的 mp3 中获取振幅数据。与 audacity 类似,但我不想要视觉效果,一个简单的值数组就可以了。当声音变大时,我希望我的代码在某些时候对声音使用reac
在 OpenCV 中,如何计算 Mat 中的平均梯度强度和平均梯度方向? 我已经通过谷歌搜索找到了以下方法,但我想在继续下一步之前确认我确实在正确地执行此操作。 这是正确的吗? Mat img = i
我想在 java 中为麦克风创建一个音频电平表来检查输入的音量。它应该看起来像操作系统之一。我不是在问 gui。它只是计算 产生的字节流中的音频电平 n = targetDataLine.read(
我正在开发一个应用程序,该应用程序既可以录制音频文件,也可以选择在录制完成后播放该文件。 UI 有一个 EQ 组件,该组件相对于当前录音幅度进行动画处理。我已经通过 MediaRecorder.get
我读过两篇关于从 AudioInputStream 中提取样本并将其转换为 dB 的文章。 https://stackoverflow.com/a/26576548/8428414 https://s
我的目标是在 OpenCV 中获取图像的DFT。 使用 dft 函数,我能够计算它,然后通过计算它的大小来绘制它(然后,应用对数并最终对其进行归一化,以便绘制介于 0 和 1 之间的值) . 我的结果
我的目标是在 OpenCV 中获取图像的DFT。 使用 dft 函数,我能够计算它,然后通过计算它的大小来绘制它(然后,应用对数并最终对其进行归一化,以便绘制介于 0 和 1 之间的值) . 我的结果
我正在从事一个 Python 项目,该项目模拟振动弦产生的声音。如果对于给定的字符串,我已经确定了运动的傅里叶变换,则可以通过简单的操作将这些结果更改为显示每个(音频)频率幅度的数据。 是否可以使用
我使用 apache commons 数学库来转换我的音频样本缓冲区上的 FFt 和 IFFT。 FFT 的输出给了我一组复数。频率在中间镜像。样本缓冲区大小为 4096 个样本,我得到 2048 个
我是一名优秀的程序员,十分优秀!