Hallo ich habe ein verauschtes, periodisches Signal und möchte das
Rauschen dort herausfiltern mithilfe der Fouriertransformation und
inverse fft.
Matlab Code:
1 | fourier_samples = load('data_ha.mat');
|
2 | four_sa= fourier_samples.data;
|
3 |
|
4 | Fs = 4347828; %Abtastfrequenz
|
5 |
|
6 | plot(four_sa)
|
7 |
|
8 | [y_freq,freq_rng] = pos_fft(four_sa, Fs);
|
9 | figure
|
10 | plot(freq_rng,abs(y_freq))
|
11 | xlim([0,10000])
|
12 |
|
13 | [pks,loc] = findpeaks(abs(y_freq), 'MinPeakHeight', 0.001, 'MinPeakDistance', 0.15);
|
14 |
|
15 |
|
16 | y_freq(1:241) = 0+0*1i;
|
17 | y_freq(243:723) = 0+0*1i;
|
18 | y_freq(725:1206) = 0+0*1i;
|
19 | y_freq(1208:1688) = 0+0*1i;
|
20 | y_freq(1670:2170) = 0+0*1i;
|
21 | y_freq(2172:end-2172) = 0+0*1i;
|
22 | y_freq(end-240:end) = 0+0*1i;
|
23 | y_freq(end-722:end-242)= 0+0*1i;
|
24 | y_freq(end-1205:end-724)= 0+0*1i;
|
25 | y_freq(end-1687:end-1207)= 0+0*1i;
|
26 | y_freq(end-2169:end-1689)= 0+0*1i;
|
27 |
|
28 | y_freq_1 = reshape(y_freq,1,length(y_freq));
|
29 | y_freq_2 = flip(y_freq);
|
30 | y_freq_2 = reshape(y_freq_2,1,length(y_freq_2));
|
31 |
|
32 | y_freq = [y_freq_1 y_freq_2];
|
33 |
|
34 | figure
|
35 |
|
36 |
|
37 | new = ifft(y_freq);
|
38 | new = real(new);
|
39 |
|
40 | plot(new)
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 | Funktion:
|
47 |
|
48 | function[X,freq] = pos_fft(x,Fs)
|
49 |
|
50 | N = length(x);
|
51 | k = 0:N-1;
|
52 | T = N/Fs;
|
53 | freq = k/T;
|
54 | X = fft(x)/N;
|
55 | cutOff = ceil(N/2);
|
56 | X = X(1:cutOff);
|
57 | freq = freq(1:cutOff);
|
Leider bekomme ich nicht das gewünschte Ergebnis, obwohl mit das
Amplitudenspektrum ausgeben lasse und mir die einzelnen Peaks
rausfiltere .
Um dann die restlichen Frequenzen auf Null zu setzen und ifft
anzuwenden, damit ich anschließend das Signal ohne Rauschen darstellen
kann.
Woran könnte das liegen?
MFG