Почему не применяются весовые окна? - PullRequest
0 голосов
/ 10 марта 2019

Я создал графический интерфейс, в котором я могу фильтровать сигналы, используя нулевую и минимальную фазы фильтров на определенных частотах. Если я хочу избежать эффектов Гиббса, я использую окна взвешивания на фильтрах (нулевая и нулевая фазы).У меня есть ощущение, что окна взвешивания не применяются, и частоты сигналов не меняются на частотах фильтров, но все это работает, тогда я выполняю это только в 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);
...