2011-09-20 3 views
1

디지털 신호 처리 과정에서 몇 가지 연습을해야하며 몇 가지 문제가 있습니다.MATLAB에서 필터의 전달 함수는 어떻게 계산합니까?

약간의 노이즈가 추가 된 주어진 파일 (signal.wav 이름 신호 x(n))이 있는데 iIam이 일부 정보를 찾도록 요청했습니다. 추가 된 노이즈는 η(n) = sin8000πn입니다. 따라서 처리중인 신호는 s(n) = x(n) + η(n)

입니다. 잡음을 제거하기 위해 order = 2 및 차단 주파수 = 2000hz 인 저역 통과 버터 필터를 적용합니다.

필터와 H(z) 함수에서 전달 함수 H(s)을 찾고 싶습니다. 음, 필자는 쌍 선형 변환을 적용해야하지만 iIdont는 MATLAB을 사용하여이를 수행하는 방법을 알고 있습니다.

누구든지 해결할 수 있습니까? 당신은 위상과 진폭을 추정하고 시간 영역에서 신호에서 추가 된 노이즈 성분을 빼기 만하면 신호의 원치 않는 구성 요소의 주파수를 알고 있기 때문에 여기에

내 코드

[y, fs, nbits] = wavread('signal.wav'); 

% Playing the file 
disp('-> Playing at the original sample rate...'); 
sound(y, fs); 

fprintf('------------------------------------------\n'); 
% Sampling frequency 
fprintf('-> Sample frequency is:  %f.\n', fs); 

% Print the min and max values of the audio data. 
fprintf('-> The maximum data value is %f.\n', max(y)); 
fprintf('-> The minimum data value is %f.\n', min(y)); 
fprintf('------------------------------------------\n'); 

order = 2; 
sampling_freq = fs; 
cut_off_freq = 2000; 

[butter_a, butter_b] = butter(order,cut_off_freq/(sampling_freq/2)); 
%[butter_a, butter_b] = butter(order,cut_off_freq/(sampling_freq)); 

subplot(211), plot(y); 
subplot(212), plot(filter(butter_a,butter_b,y)); 

sound(filter(butter_a,butter_b,y),fs); 
+0

ITYM * 전달 함수 * ("전송 함수"가 아님)? http://dsp.stackexchange.com에서 프로그래밍 관련보다 DSP 관련성이 높기 때문에이 질문을하는 것이 좋습니다. –

+0

죄송합니다. 모국어로 번역하려했습니다. 나는 전달 함수를 의미했다. –

답변

2

아날로그 필터의 주파수 응답/전달 함수 (예 : H(s))를 계산하려면 freqs을 사용해야합니다. 그래서이 경우, 다음과 같은 것이 있습니다 :

freqs(butter_b,butter_a,200); 

은 200 개의 주파수 포인트에서 필터에 대한 주파수 및 위상 응답을 그릴 것입니다. 계산해야 할 점의 벡터를 제공 할 수도 있습니다 (링크 된 문서 참조). 디지털 필터의 전달 함수


(즉 H(z)) freqz를 사용한다. 구문은 다음과 같습니다.

freqz(butter_b,butter_a,[],fs) 

이전과 같이 주파수 및 위상 응답을 다시 플롯합니다. 다시 말하지만 링크 된 문서를 읽고 올바르게 사용하십시오.

+0

감사합니다. 신호의 실제 샘플 수이므로 200에서 148864 만 변경했습니다. 이제 또 다른 문제가 있습니다. 음모는 저에게 주파수 x 10^4를주었습니다. 그래서 2000hz 대신에 2 x 10^4 = 20000hz의 컷오프를 봅니다. –

+0

아, 문제가 무엇인지 알 수 있습니다. 당신의 코드에서'버터'에 대한 출력은'[b, a]'즉 분자 계수를 먼저 수집해야합니다. 주문을 취소했습니다. 이것을 뒤집어서 시도해보십시오. 2kHz에서 컷오프를 얻어야합니다. – abcd

0

입니다 솔루션을 얻으십시오.

사인의 위상과 진폭을 평가하는 데는 여러 가지 방법이 있습니다. 내가 Goertzel 알고리즘을 시도하는 것이 좋습니다.

+0

전에 내가 말했듯이 저역 통과 버터 필터를 사용하여 잡음을 제거합니다. 운동은 그렇게 말한다. –

관련 문제