4 svar
131 visningar
AstridG behöver inte mer hjälp
AstridG 66
Postad: 6 nov 2020 16:44

Matlab rms och Fft.

Hej 

Jag behöver hjälp med att få rätt rms genom ändra amplituden på fft. 

i rms jag får en värde på 64.

freq=10; % frequency of stimuli
fs = 1024; % Sample frequency (Hz)
Ts = 1/fs; % Sampling period
dt = 0:Ts:4-Ts; % 4 sec sample
x = sqrt(2)*sin(2*pi*freq*dt);
m = length(x); % Window length
n = pow2(nextpow2(m)); % Transform length
y = fft(x,n); % DFT
rms = abs(rms(y));
Peter 1023
Postad: 6 nov 2020 22:46

Ja, du har helt korrekt beräknat rms av DFT:n av x. Så, varför tycker du att 64 är fel? Vad frågar de efter? Förstår du vad du beräknar?

AstridG 66
Postad: 7 nov 2020 01:09
Peter skrev:

Ja, du har helt korrekt beräknat rms av DFT:n av x. Så, varför tycker du att 64 är fel? Vad frågar de efter? Förstår du vad du beräknar?

Correct the amplitude of the “fft” output to give correct r.m.s. values in the
spectrum. 

De därför jag blir förvirrad 

Dr. G 9500
Postad: 7 nov 2020 08:16

Man kan välja om man vill "flytta" en konstant från fouriertransformen till inverstransformen.

Möjligen vill du dela med sqrt(length(dt)).

Jag brukar transformera något med känd transform, t.ex exp(-t.^2), och se att allt blir som förväntat, inklusive skalningen. 

AstridG 66
Postad: 7 nov 2020 12:32
Dr. G skrev:

Man kan välja om man vill "flytta" en konstant från fouriertransformen till inverstransformen.

Möjligen vill du dela med sqrt(length(dt)).

Jag brukar transformera något med känd transform, t.ex exp(-t.^2), och se att allt blir som förväntat, inklusive skalningen. 

Hur gör jag det? till exempel fft(x,n)/sqrt(length(dt))? jag fick rms = 1 efter göra så här. de samma värde som i sinus rms innan fft :D de borde stämma eller hur?

Svara
Close