2013-08-12 7 views
0

matlab에서 주어진 주파수에 대한 감쇠 정현파의 감쇠 상수 값을 찾는 방법은 무엇입니까?주어진 주파수에 대한 감쇠 된 사인파 감쇠 계수 MATLAB

t=0:1e-6:0.1; 
f= 500000; 
y=sin(2*pi*f*t).*exp(-d*t); 

나는 "D"

+0

안녕하세요, 'd'값은 시스템에 따라 다릅니다. 컨텍스트를 좀 더 알려주시겠습니까? – MattG

+1

당신의 질문이 맞습니까? 주어진 주파수에서'd'를 풀고 싶다면'y'는 무엇입니까? 당신은 제약이 없습니다. 그렇지 않으면 방정식은 기본 대수를 사용하여'd'에 대해 풀 수 있습니다. 특정 파형이있는 경우 [로그 감소 방법] (http://en.wikipedia.org/wiki/Logarithmic_decrement)을 살펴볼 수 있습니다. 그렇지 않으면, 이것이 Matlab 질문인지 확신 할 수 없습니다. – horchler

+0

커브 피팅에 대한 질문이 있습니다. http://stackoverflow.com/questions/16110185/how-to-fit-a-curve-to-a-damped-sine-wave-in-matlab (@wakjah 대답 참조) . – marsei

답변

3

당신에게 봉투 당신의 진동 기능의 찾을 먼저 필요 (기능 당신의 사인을 진폭 - 변조)에 대한 방정식 위의 해결하고자합니다. 예를 들어, 신호를 정류 한 후 저역 통과 필터링을 실시하지만, 나는 빠르고 더러운 최대를 선택한다. 엔벨로프를 찾으면 지수 함수를 적용하는 다양한 방법이 있습니다. 다시 한번 봉투의 로그에 일차 polyfit을 수행하기 위해 빠른 &을 선택했습니다. 아래의 코드는 여러분이 제시 한 간단한 예제에서 작동하지만 오프셋이있는 경우 작동하지 않을 수 있습니다. n 등을 선택하면 잡음이 발생합니다. 또한 잡음이있는 측정의 경우 최상의 결과를 얻을 수 없습니다. 지수 형 감쇠와는 시정 tau = 1/d를 정의하는 것이 일반적이다

fsamp = 1e5; 
tmax = 0.1; 
t=0:1/fsamp:tmax; 
f = 12e3; %should be smaller than fsamp/2! 
tau = 0.0765; 
y=sin(2 * pi * f * t) .* exp(-t/tau); 

%calculate running maximum 
n = 20; %number of points to take max over 
nblocks = floor(length(t)/n); 
trun = mean(reshape(t(1:n*nblocks), n, nblocks), 1); %n-point mean 
envelope = max(reshape(y(1:n*nblocks), n, nblocks), [], 1); %n-point max 

%quick and dirty exponential fit, not the proper way in case of noise 
p = polyfit(trun, log(envelope), 1); 
tau_fit = -1/p(1); 
k_fit = exp(p(2)); 

plot(t, y, trun, envelope, 'or', t, k_fit * exp(-t/tau_fit), '-k') 
title(sprintf('tau = %g', tau)) 

참고.

+1

니스. 당신은 무엇이 요구되었는지 알았을 것입니다. 'envelope = abs (hilbert (y));'도 사용할 수 있습니다 (전체 기간을 사용하거나 출력을 트리밍하는 데주의를 기울여야 함). – horchler