Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/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-缩放y轴_Matlab_Signal Processing_Fft - Fatal编程技术网

Matlab-FFT-缩放y轴

Matlab-FFT-缩放y轴,matlab,signal-processing,fft,Matlab,Signal Processing,Fft,作为数据基础,我测量了记录的电压数据。 现在将使用Matlab执行FFT。 我有以下问题: -FFT后,纵坐标轴上有什么单位?还有伏特? -如何正确缩放?通过隐藏负频率(奈奎斯特),我实际上必须将振幅加倍,对吗? -我是否必须用20*log10(FFT)再次乘以FFT的所有值,以db表示纵坐标 非常感谢您的支持! 坦率的 Matlab示例: load('TimeDomain.mat')%loading of the time domain signal L=2500; %length of th

作为数据基础,我测量了记录的电压数据。 现在将使用Matlab执行FFT。 我有以下问题: -FFT后,纵坐标轴上有什么单位?还有伏特? -如何正确缩放?通过隐藏负频率(奈奎斯特),我实际上必须将振幅加倍,对吗? -我是否必须用20*log10(FFT)再次乘以FFT的所有值,以db表示纵坐标

非常感谢您的支持! 坦率的

Matlab示例:

load('TimeDomain.mat')%loading of the time domain signal
L=2500; %length of the signal
Fs=500000;%sampling frequency
N=2^nextpow2(L);%scale factor
t=(0:L-1)*10^-3;%time domain array
f=linspace(0,Fs/2,length(t));%frequency domain array 

FFT=abs(fft(Timedomain,N));   
figure(1)
plot(f,FFT(1:2500))

是,在FFT之后,纵坐标轴的单位仍然是伏特。 您可以通过除以信号的采样数来缩放它,然后您确实可以乘以2(分别表示频率
0
Fs/2
的第一个和最后一个元素除外),如果您想在正侧绘制所有频谱

然后,如果你想在dB中绘图,你可以使用应用你所说公式的函数

我在你的代码中发现了一些奇怪的地方,所以我建议进行一些修复。我的
时域
信号是1 V下的100 kHz正弦信号

Fs = 500000;                    % sampling frequency
L = 2500;                       % length of the signal
t = (0:L-1)/Fs;                 % time domain array
f = linspace(0, Fs/2, L/2+1);   % frequency domain array

Timedomain = cos(2*pi*100000*t); % Input signal

FFT = abs(fft(Timedomain)/L);
FFT(2:L/2) = 2*FFT(2:L/2);

%% Plots
subplot(2,1,1);
plot(f, FFT(1:L/2+1)); xlabel('Frequency (Hz)'); ylabel('Tension (V)');
subplot(2,1,2);
plot(f, mag2db(FFT(1:L/2+1))); xlabel('Frequency (Hz)'); ylabel('Tension (dBV)');
这将返回:


是,FFT后,纵坐标轴的单位仍为伏特。 您可以通过除以信号的采样数来缩放它,然后您确实可以乘以2(分别表示频率
0
Fs/2
的第一个和最后一个元素除外),如果您想在正侧绘制所有频谱

然后,如果你想在dB中绘图,你可以使用应用你所说公式的函数

我在你的代码中发现了一些奇怪的地方,所以我建议进行一些修复。我的
时域
信号是1 V下的100 kHz正弦信号

Fs = 500000;                    % sampling frequency
L = 2500;                       % length of the signal
t = (0:L-1)/Fs;                 % time domain array
f = linspace(0, Fs/2, L/2+1);   % frequency domain array

Timedomain = cos(2*pi*100000*t); % Input signal

FFT = abs(fft(Timedomain)/L);
FFT(2:L/2) = 2*FFT(2:L/2);

%% Plots
subplot(2,1,1);
plot(f, FFT(1:L/2+1)); xlabel('Frequency (Hz)'); ylabel('Tension (V)');
subplot(2,1,2);
plot(f, mag2db(FFT(1:L/2+1))); xlabel('Frequency (Hz)'); ylabel('Tension (dBV)');
这将返回:


Debian上的八度音阶需要
控件
包才能获得
mag2db
。它可以与
apt get install octave control
一起安装。为了使用它,它必须加载
pkg load control
。Debian上的Octave要求
control
包获得
mag2db
。它可以与
apt get install octave control
一起安装。为了使用它,它必须加载
pkg负载控制