2015-11-09 5 views
1

У меня есть сигнал x [n], преобразованный с использованием fft и извлеченный доминирующей частотой путем сортировки амплитудного отклика. Рассчитано среднее значение avg = mean(xn), где xn - матрица 1x3142, содержащая данные сигнала.Приблизительный сигнал с использованием среднего значения и доминирующей частоты

Как использовать эту информацию для построения приближения исходного сигнала? Я честно не знаю, как это сделать. Мысль об использовании ifft, но я не знаю, как, как предполагается, мне тогда помогают средние значения и доминирующая частота.

Исходный сигнал:

enter image description here

Amplitude Ответ:

enter image description here

+0

Лучшее, что вы собираетесь с этим подходом, это синусоида, частота которого имеет наибольшую амплитудную характеристику. Это не будет правильно восстанавливаться с использованием сложных переменных данных. У вас есть пример сигнала, который мы видим? Я серьезно не вижу, как просто использовать среднее значение (которое в данном случае является смещением по постоянному току), а доминирующая частота поможет в достоверном восстановлении исходного сигнала. – rayryeng

+0

@rayryeng Добавлены графики исходного сигнала, а также амплитудный отклик в вопросе. Я не понимаю, как я должен аппроксимировать исходный сигнал, и именно поэтому я спрашиваю. – Lightvvind

+0

BTW, если у вас есть сложные переменные данные, компонент с самым сильным ответом, скорее всего, будет 0 Гц/DC. Возможно, вам захочется найти два самых больших компонента ... или, возможно, взять первый компонент и найти среднее из следующих 10 верхних компонентов ... или что-то в этом роде. Но да, я не вижу этого, как это можно сделать, просто используя доминирующую частоту и среднее значение. Лучшее, что вы получите, это синусоида на этой доминирующей частоте, вертикально компенсированная средним значением, если только это не так. Это имеет смысл для вас? Если да, я напишу ответ. – rayryeng

ответ

3

ОК, так вот моя провалил попытка сделать это. То, что вам нужно сделать, это построить спектр и определить самый большой пик - это среднее значение, а также второй по величине пик, который даст вам доминирующую частоту. Я заметил, что время выборки между точками не является постоянным, но будем надеяться, что это не мешает вещам, и это должно дать нам хороший сигнал.

BTW, я увеличил размер точки для БПФ, чтобы увеличить разрешение спектра, чтобы мы могли лучше понять, где находятся пики. Таким образом, давайте построим спектр и убедиться, что мы сдвигать спектр таким образом, что центральная частота находится в середине, а не слева:

N = 4096; %// FFT point size 
F = fft(ssd(:,2), N); 
Fs = fftshift(F); 
mag = abs(Fs); %// Magnitude spectrum shifted 
plot(1:N, abs(mag)); %// Plot the spectrum 

Это то, что мы получаем, и я добавил в некоторых данных курсоры, чтобы помочь проиллюстрировать мою точку зрения:

enter image description here

Обратите внимание, что я вручную досматриваемого, где пики, потому что их сортировки и выбрав самый большой компонент не лучший способ делать вещи. Самый большой пик, очевидно, является значением постоянного тока, но большие значения, которые следуют за наибольшим пиком, могут не обязательно давать вам правильные результаты, как вы можете видеть здесь. Поэтому вы можете запустить его с помощью алгоритма обнаружения максимума, чтобы получить доминирующий пик, но я собираюсь избежать этого, чтобы дать вам результат.

Как видите, в смещенном спектре точки в точках 2018 и 2080 соответствуют нашим доминирующим пикам, а точка на 2049 - смещение/среднее значение постоянного тока. Таким образом, создайте новый сигнал, в котором мы будем копировать только эти три местоположения в частотной области, отменить сдвиг, взять инверсию, а также закрыть любые остаточные мнимые компоненты.

Вы также заметите, что длина вывода - это размер точки FFT. Вы хотите, чтобы удалить из дополнительных вывода и показывать только до тех пор, пока первоначальный сигнал содержит:

%// Create blank array 
out_reconstruct = zeros(N,1); 

%// Copy values over from shifted spectrum 
out_reconstruct([2018 2049 2080]) = Fs([2018 2049 2080]); 

%// Reconstruct in time domain and cap 
out_reconstruct = real(ifft(ifftshift(out_reconstruct))); 
out_reconstruct = out_reconstruct(1:size(ssd,1)); 

%// Plot 
plot(ssd(:,1), ssd(:,2), ssd(:,1), out_reconstruct); 

Мы получаем это:

enter image description here

Как вы можете видеть, это ISN Хорошая реконструкция. В ваших данных существует высокая изменчивость, и поэтому для восстановления этих данных недостаточно одной доминирующей синусоиды. Тем не менее, среднее значение более или менее в порядке, а колебания между оригиналом и реконструированными одинаковы .... поэтому доминирующий материал работает, но высокая изменчивость здесь не моделируется.

+0

Wow. Спасибо, это действительно полезно. – Lightvvind

+0

Нет проблем. Не уверен, что это ответ, который вы ищете! – rayryeng

+0

Ну, я не могу думать ни о чем другом, и я застрял на этом около 1 дня. Поэтому я буду использовать это и посмотреть, как это происходит! – Lightvvind

Смежные вопросы