Я создал графический интерфейс, в котором я могу фильтровать сигналы, используя нулевую и минимальную фазы фильтров на определенных частотах. Если я хочу избежать эффектов Гиббса, я использую окна взвешивания на фильтрах (нулевая и нулевая фазы).У меня есть ощущение, что окна взвешивания не применяются, и частоты сигналов не меняются на частотах фильтров, но все это работает, тогда я выполняю это только в file.m, кроме GUI. Так почему же не взвешивают окнаприменять?
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global select N contents contents2
select=get(hObject,'Value');
switch select
case 1
%Hamming window
for k=1:1:N
handles.w(k)=(0.54-0.46*cos(2*pi*k/N));
end
case 2
%Hann window
for k=1:1:N
handles.w(k)=0.5*(1-cos(2*pi*k/N));
end
case 3
%Triangle window
for k=1:1:N
handles.w(k)=1-abs((k-(N-1)/2)/N/2);
end
case 4
%Cosine window
for k=1:1:N
handles.w(k)=cos(pi*k/(N-1)-pi/2);
end
case 5
%Blackman window
a0=0.42;
a1=0.5;
a2=0.08;
for k=1:1:N
handles.w(k)=a0-a1*cos(2*pi*k/(N-1))+a2*cos(4*pi*k/(N-1));
end
case 6
%Rectangle window
for k=1:1:N
handles.w(k)=1;
end
end
if contents2==1%если первый сигнал
if contents==1%если нуль фазовый
handles.zerofilterw=fft(handles.zerofilter.*handles.w);
handles.fftsig1=fft(handles.sig1);
handles.filtersig1=handles.zerofilterw.*handles.fftsig1;
handles.filtsig1=real(ifft(handles.filtersig1));
axes(handles.axes1);plot(handles.t-0.5,handles.filtsig1)
title('After zero phase Filtering signal 1')
grid on
axes(handles.axes2);plot(handles.nyqvuist,fftshift(abs(handles.filtersig1)));
title('After filtering in zero phase frequency domain1')
grid on
else
handles.minfilterw=fft(handles.minfilter.*handles.w);
handles.fftsig1=fft(handles.sig1);
handles.filtersig1=handles.minfilterw.*handles.fftsig1;
handles.filtsig1=real(ifft(handles.filtersig1));
axes(handles.axes1);plot(handles.t-0.5,handles.filtsig1)
title('After min phase Filtering signal 1')
grid on
axes(handles.axes2);plot(handles.nyqvuist,fftshift(abs(handles.filtersig1)));
title('After filtering in min phase frequency domain1')
grid on
end
else
if contents==1%если нуль фазовый
handles.zerofilterw=fft(handles.zerofilter.*handles.w);
handles.fftsig2=fft(handles.sig2);
handles.filtersig2=handles.zerofilterw.*handles.fftsig2;
handles.filtsig2=real(ifft(handles.filtersig2));
axes(handles.axes1);plot(handles.t-0.5,handles.filtsig2)
title('After zero phase Filtering signal 2')
grid on
axes(handles.axes2);plot(handles.nyqvuist,fftshift(abs(handles.filtersig2)));
title('After filtering in zero phase frequency domain2')
grid on
else
handles.minfilterw=fft(handles.minfilter.*handles.w);
handles.fftsig2=fft(handles.sig2);
handles.filtersig2=handles.minfilterw.*handles.fftsig2;
handles.filtsig2=real(ifft(handles.filtersig2));
axes(handles.axes1);plot(handles.t-0.5,handles.filtsig2)
title('After min phase Filtering signal 2')
grid on
axes(handles.axes2);plot(handles.nyqvuist,fftshift(abs(handles.filtersig2)));
title('After filtering in min phase frequency domain2')
grid on
end
end
guidata(hObject,handles);