Я решил следующие вопросы для вычислительного задания, я получил очень плохой класс (67%). Я хотел бы понять, как правильно выполнять эти вопросы, в частности Q1.b и Q3. Пожалуйста, будьте как можно более подробными, я бы очень хотел понять мои сообщения.Вычислительная физика, анализ БПФ
Создать данные (синусоидальные функции). Используйте fft для анализа: a) Суперпозиция трех волн с постоянными, но разными частотами b) Волна, частота которой зависит от времени График, частоты выборок, амплитуда и спектры мощности с соответствующими осями.
Используйте 3 волны из упражнения 1a), но измените их на одну и ту же частоту, фазу и амплитуду. Загрязняют каждый из них с последовательно увеличивающимися суммами случайным, гауссовским распределенным шумом. 1) Выполните БПФ на суперпозиции трех волн, загрязненных шумом. Анализ и построение вывода. 2) Отфильтруйте сигнал с помощью функции Гаусса, постройте «чистую» волну и проанализируйте результат . Является ли результирующая волна 100% чистой? Объясните.
#1(b)
tmin = -2*pi
tmax - 2*pi
delta = 0.01
t = arange(tmin, tmax, delta)
y = sin(2.5*t*t)
plot(t, y, '-')
title('Figure 2: Plotting a wave whose frequency depends on time ')
xlabel('Time (s)')
ylabel('Y(t)')
show()
#b.2
Fs = 150.0; # sampling rate
Ts = 1.0/Fs; # sampling interval
t = np.arange(0,1,Ts) # time vector
ff = 5; # frequency of the signal
y = np.sin(2*np.pi*ff*t)
n = len(y) # length of the signal
k = np.arange(n)
T = n/Fs
frq = k/T # two sides frequency range
frq = frq[range(n/2)] # one side frequency range
Y = np.fft.fft(y)/n # fft computing and normalization
Y = Y[range(n/2)]
#Time vs. Amplitude
plot(t,y)
title('Figure 2: Time vs. Amplitude')
xlabel('Time')
ylabel('Amplitude')
plt.show()
#Amplitude Spectrum
plot(frq,abs(Y),'r')
title('Figure 2a: Amplitude Spectrum')
xlabel('Freq (Hz)')
ylabel('amplitude spectrum')
plt.show()
#Power Spectrum
plot(frq,abs(Y)**2,'r')
title('Figure 2b: Power Spectrum')
xlabel('Freq (Hz)')
ylabel('power spectrum')
plt.show()
#Exercise 3:
#part 1
t = np.linspace(-0.5*pi,0.5*pi,1000)
#contaminating our waves with successively increasing white noise
y_1 = sin(15*t) + np.random.normal(0,0.2*pi,1000)
y_2 = sin(15*t) + np.random.normal(0,0.3*pi,1000)
y_3 = sin(15*t) + np.random.normal(0,0.4*pi,1000)
y = y_1 + y_2 + y_3 # superposition of three contaminated waves
#Plotting the figure
plot(t,y,'-')
title('A superposition of three waves contaminated with Gaussian Noise')
xlabel('Time (s)')
ylabel('Y(t)')
show()
delta = pi/1000.0
n = len(y) ## calculate frequency in Hz
freq = fftfreq(n, delta) # Computing the FFT
Freq = fftfreq(len(y), delta) #Using Fast Fourier Transformation to #calculate frequencies
N = len(Freq)
fr = Freq[1:len(Freq)/2.0]
A = fft(y)
XF = A[1:len(A)/2.0]/float(len(A[1:len(A)/2.0]))
# Amplitude spectrum for contaminated waves
plt.plot(fr, abs(XF))
title('Figure 3a : Amplitude spectrum with Gaussian Noise')
xlabel('frequency')
ylabel('Amplitude')
show()
# Power spectrum for contaminated waves
plt.plot(fr,abs(XF)**2)
title('Figure 3b: Power spectrum with Gaussian Noise')
xlabel('frequency(cycles/year)')
ylabel('Power')
show()
# part 2
F_v = exp(-(abs(freq)-2)**2/2*0.5**2)
spectrum = A*F_v #Applying the Gaussian Filter to clean our waves
new_y = ifft(spectrum) #Computing the inverse FFT
plot(t,new_y,'-')
title('A superposition of three waves after Noise Filtering')
xlabel('Time (s)')
ylabel('Y(t)')
show()
Добро пожаловать на переполнение стека. Вы спрашивали грейдера, что вы сделали неправильно? Обычно мы не отвечаем на такие широкие вопросы, как «почему я получил плохой класс по этой сложной многочастной задаче?» Голосование закрывается. – Beta
Лучший способ, вероятно, приятно спросить своего учителя/ТП, в чем проблема. –
Я думаю, что вопрос хорошо поставлен, и ошибки (отклонения от задачи) довольно легко увидеть. Я бы рекомендовал несколько раз повторить одну и ту же задачу, чтобы действительно понять идею БПФ, тот факт, что БПФ на реальной функции будет симметричным по положению/отрицательным частотам, поэтому можно просто сохранить положительные частоты. Самое главное - признать, что интервал частот является инверсией временного диапазона, а частотный диапазон (neg + pos вместе) является инверсией временного интервала. Таким образом, теорема выборки точно выполняется на частотах, которые предлагает FFT для вычисления. – roadrunner66