4 svar
110 visningar
AstridG är nöjd med hjälpen
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 966
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 9362
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 Avbryt
Close