нахождение частоты сигнала без использования БПФ - PullRequest
0 голосов
/ 04 марта 2019

У меня синусоидальный сигнал с шумом, в котором число точек шума на одно колебание должно быть одинаковым в моем коде (пять точек на одно колебание), я хочу каждый раз менять число колебаний: 2,3,4… .15(в моем коде изменяющий "случайный" вариант)

При каждом числе колебаний я извлекаю амплитуду как функцию частоты <к сожалению, для нескольких колебаний FFT не сработает, слишком мало точек в сигнале, поэтому я должен подогнать сигнал (синус с шумом) к синусоиде, чтобы сравнить частоту нового сигнала с частотой синусоиды </p>

см. мой код, как я могу сделать подгонку, такЯ могу извлечь частоту сигнала?

  %my code
  random=40;
  f=5; % the frequency of the sine wave also the number of points per 
     oscillation

  %the number of oscillation is random/f

  t = (1:random)';
  X = ones(random,2);


  y_1= sin((2*pi)/f*t);
  X(:,2) = y_1;
  y=y_1+randn(random,1);
  y = y(:);
  beta = X\y;
  yhat = beta(1)+beta(2)*sin((2*pi)/f*t);
 figure
 plot(t,y,'.b','markersize',12);
 hold on
 plot(t,yhat,'r','linewidth',2);

1 Ответ

0 голосов
/ 05 марта 2019

Это распространенная проблема.Пожалуйста, попробуйте ссылки ниже или другие на Stackoverflow.В вашем случае у вас довольно много выбросов, поэтому вы используете такие методы, как RANSAC, чтобы выбросить их.

https://www.mathworks.com/matlabcentral/answers/121579-curve-fitting-to-a-sinusoidal-function

https://www.mathworks.com/matlabcentral/answers/195371-sine-curve-fitting-for-the-given-data

...