Hi guys, The Linearity property of Fourier transform says: z(t)=af1(t)+bf2(t) the linear combination of the terms is unaffected by the transform. Z(ω)=aF1(ω)+bF2(ω) and Z(ω) = FFT{ z(t) }. I synthesised a signal, sn as follows. I want to remove the mean values in the signal. According to the Fourier transform property, FFT{x-mean(x)} = FFT{x}-FFT{mean(x)} the left hand side should equal to the right hand side. But my simulation suggested they are different. Can anyone sports any mistakes I've made? Cheers, ---------------------------- Code Starts Here ---------------------------- %% Load FMCW data clear all; close all; clc; fs = 1; % We use scaleed samling rate here NFFT = 2048; scale = @(y) 10*log10(abs(y)); n = 0:149; s = 2*sin(2*pi*0.2*n'); r = 10*sin(2*pi*0.15*n'); % Generate Data and Visulize it for jj = 1:37 v = 0.3*randn(150,1); sn(:,jj) = s + v; rn(:,jj) = r + v; end sn (:,1:10) = rn(:,1:10); sn (:,11:end) = sn(:,11:end) + rn(:,11:end); % Unless you want to visualize the signal :-) % for jj = 1:37 % [Sn(:,jj),f] = periodogram(sn(:,jj),[],NFFT,fs); % end % figure; % subplot(121); plot(f,scale(Sn(:,2))) % subplot(122); imagesc(scale(Sn)); colorbar ii = 2; %% Time Domain sn_bg = sn-repmat(mean(sn,2),1,37); [P_bg_1, f] = periodogram(sn_bg(:,ii),hamming(size(sn_bg,1)),NFFT,fs); %% Freq Domain for jj = 1:size(sn,2) [Psn_0(:,jj), f] = periodogram(sn(:,jj),hamming(size(sn,1)),NFFT,fs); end P_bg_2 = Psn_0-repmat(mean(Psn_0,2),1,37); P_bg_2 = P_bg_2(:,ii); %% Comparisons figure; plot(f,scale(P_bg_1),'r-'); % title('Per-Ham, Mean Removal'); hold on; plot(f,scale(P_bg_2),'b--') legend('FFT(x-mean(x))','FFT(x) - FFT(mean(x))')
should FFT{x-mean(x)} = FFT{x}-FFT{mean(x)} ?
Started by ●August 28, 2010
Reply by ●August 28, 20102010-08-28
Yes. Time to check your code. Also, complicated code like that is pretty lazy dude! I wouldn't even read it. Easier to write something simpler like this which makes the point: x=rand(64,1); y(1:64)=mean(x); %did you do this? Easy mistake to not do this..... y=y'; x1=x-y; xdiff=x-y-x1 fx=fft(x); fy=fft(y); fx1=fft(x1); fdiff=fx-fy-fx1 Shows that the functions are equal in time and equal in frequency because their differences are zero (or as close as one can get numerically). Fred
Reply by ●August 28, 20102010-08-28
Hi, x-mean(x) ?? If the x is a sample value, then mean(x) is x :-) This means mean(x) = x Then x-mean(x) = ZERO --> FFT(x) = FFT(mean(x)) ;-) BR, SPHiNX>Yes. Time to check your code. > >Also, complicated code like that is pretty lazy dude! I wouldn't even >read it. Easier to write something simpler like this which makes thepoint:> >x=rand(64,1); >y(1:64)=mean(x); %did you do this? Easy mistake to not do this..... >y=y'; >x1=x-y; >xdiff=x-y-x1 >fx=fft(x); >fy=fft(y); >fx1=fft(x1); >fdiff=fx-fy-fx1 > >Shows that the functions are equal in time and equal in frequency >because their differences are zero (or as close as one can getnumerically).> >Fred >
Reply by ●August 29, 20102010-08-29
On 08/28/2010 11:03 AM, thedean515 wrote:> Hi guys, > > The Linearity property of Fourier transform says: > > z(t)=af1(t)+bf2(t) > > the linear combination of the terms is unaffected by the transform. > Z(ω)=aF1(ω)+bF2(ω) > > and > > Z(ω) = FFT{ z(t) }. > > I synthesised a signal, sn as follows. I want to remove the mean values in > the signal. According to the Fourier transform property, > > FFT{x-mean(x)} = FFT{x}-FFT{mean(x)} > > the left hand side should equal to the right hand side. But my simulation > suggested they are different. > > Can anyone sports any mistakes I've made? > > Cheers, > > ---------------------------- Code Starts Here ----------------------------(and gets snipped) I see windowing in the code -- if you're windowing x you need to subtract the mean _after_ windowing; subtracting the mean, then windowing, means that instead of finding fft(x - mean(x)) you're finding fft((x - mean(x)) .* window). I think you'll find that fft(mean(x) * window) has energy at a lot more places than fft(mean(x)) does. Try _just_ what you're talking about above, without windowing. Then go from there. If there's still issues, then make sure they're not numeric. -- Tim Wescott Wescott Design Services http://www.wescottdesign.com Do you need to implement control loops in software? "Applied Control Theory for Embedded Systems" was written for you. See details at http://www.wescottdesign.com/actfes/actfes.html
Reply by ●August 29, 20102010-08-29
Tim Wescott wrote:> > Try _just_ what you're talking about above, without windowing. Then go > from there. >Good advice. Or, just window the sequence before doing anything else and proceed from there just as intended without further consideration of the window - it's just a new sequence to deal with. Fred
Reply by ●September 6, 20102010-09-06
On Aug 28, 2:03 pm, "thedean515" <jiangwei0515@n_o_s_p_a_m.gmail.com> wrote:> Hi guys, > > The Linearity property of Fourier transform says: > > z(t)=af1(t)+bf2(t) > > the linear combination of the terms is unaffected by the transform. > Z(ω)=aF1(ω)+bF2(ω) > > and > > Z(ω) = FFT{ z(t) }. > > I synthesised a signal, sn as follows. I want to remove the mean values in > the signal. According to the Fourier transform property, > > FFT{x-mean(x)} = FFT{x}-FFT{mean(x)} > > the left hand side should equal to the right hand side. But my simulation > suggested they are different. > > Can anyone sports any mistakes I've made? > > Cheers,The most egregious mistake you made was wasting helpers time by separately sending identical posts to comp.dsp and comp.soft-sys.matlab. Next time use a single submission with a comma separated distribution list; e.g., Newsgroups: comp.dsp, comp.soft-sys.matlab. Greg Heath
Reply by ●September 7, 20102010-09-07
On 06/09/10 9:43 PM, Greg Heath wrote:> Next time use a single submission with a comma separated > distribution list; e.g., > > Newsgroups: comp.dsp, comp.soft-sys.matlab.Technical note: there should not be any spaces between the list of newsgroups. Newsgroups: comp.dsp,comp.soft-sys.matlab Your posting software might be forgiving and fix this for you, but the technical standards say that the spaces must not be there.