|
Сдвиг сигнала на небольшое время (меньше интервала дискретизации). |
|
|
|
 |
Ответов
|
Nov 20 2008, 13:33
|

Эксперт
    
Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183

|
Цитата(AlexOr @ Nov 20 2008, 15:44)  Как осуществить сдвиг сигнала во временной области на небольшое время с наименьшими потерями по точности? Речь о временном ряде ограниченном по длине таким образом, что количество отсчетов кратно 2 в целой степени.
Время дискретизации - Td; Требуемый сдвиг - Tsh; Число отсчетов - N;
Есть идея для сдвига на произвольное время Tsh: 1. сделать дискретное преобразование Фурье 2. перевести полученные комплексные коэффициенты в показательную форму 3. изменить показатель(фазу) каждого коэффициента на соответствующий угол. 4. сделать обратное дискретное преобразование Фурье
Показатель(фазу) менять на величину k * 2 * PI * Tsh/ (Td * N), где k – номер коэффициента ДПФ. Таким образом показатель нулевого коэффициента не меняется, а первый и остальные меняются. Собственно тут производится сдвиг на одинаковое время всех спектральных составляющих сигнала.
Насколько правильна или неправильна такая идея? Может быть есть другие варианты? Оно может и правильно, только сдвиг наверно получется циклическим )) Обычно делают не так: 1. Если нужно сдвигать на фиксированую дельту лучшие результаты получаются если применить полиморфную фильтрацию. Вставляют нули между реальными отсчетами и фильтруют хорошим НЧ фильтром - получается интерполяция на более мелкую сетку. Потом обратно прорежают под другой фазой (или даже частотой) 2. Если нужно двигать на произвольную дельту используют сплайн интерполяцию чаще кубическую. В-сплайны
|
|
|
|
|
Nov 20 2008, 13:44
|
Частый гость
 
Группа: Свой
Сообщений: 89
Регистрация: 30-12-04
Из: Санкт-Петербург
Пользователь №: 1 754

|
Цитата(fontp @ Nov 20 2008, 23:33)  Оно может и правильно, только сдвиг наверно получется циклическим )) Циклически даже хорошо. Главное чтоб это было правильно в принципе...
|
|
|
|
|
Nov 20 2008, 15:28
|
Частый гость
 
Группа: Свой
Сообщений: 89
Регистрация: 30-12-04
Из: Санкт-Петербург
Пользователь №: 1 754

|
Уже... Все работает на ура. C# Код using System; using System.Collections.Generic; using System.Text; using AP;
namespace _27corrector { class Misc {
//Сдвиг сигнала на произвольную величину //x - сигнал //offs - сдвиг выраженный в отсчетах public static double[] ShiftSignal(double[] x, double offs) { int N = x.Length; Complex[] s = new Complex[N]; for (int n = 0; n < N; n++) s[n].real = x[n]; s = Misc.DFT(s); // int j = N - 1; for (int k = 1; k < N / 2 + 1; k++) { double fi = System.Math.Atan2(s[k].image, s[k].real); double mod = AP.Math.AbsComplex(s[k]); fi += k * offs * 2 * System.Math.PI / N; s[k].real = mod * System.Math.Cos(fi); s[k].image = mod * System.Math.Sin(fi); // if (j != 0) { s[j].real = s[k].real; s[j].image = -s[k].image; } j--; } s = Misc.IDFT(s); double[] result = new double[N]; for (int n = 0; n < N; n++) result[n] = s[n].real; return result; }
//Прямое преобразование Фурье public static Complex[] DFT(Complex[] x) { int N = x.Length; Complex[] X = new Complex[N]; for (int k = 0; k < N; k++) { for (int n = 0; n < N; n++) { double fi = -2 * System.Math.PI * k * n / N; Complex e = new Complex(System.Math.Cos(fi), System.Math.Sin(fi)); X[k] += x[n] * e; } } return X; }
//Обратное преобразование Фурье public static Complex[] IDFT(Complex[] X) { int N = X.Length; Complex[] x = new Complex[N]; for (int n = 0; n < N; n++) { for (int k = 0; k < N; k++) { double fi = 2 * System.Math.PI * k * n / N; Complex e = new Complex(System.Math.Cos(fi), System.Math.Sin(fi)); x[n] += X[k] * e; } x[n] /= N; } return x; } } }
Сообщение отредактировал AlexOr - Nov 20 2008, 15:29
|
|
|
|
Сообщений в этой теме
AlexOr Сдвиг сигнала на небольшое время (меньше интервала дискретизации). Nov 20 2008, 12:44  alex_os Цитата(AlexOr @ Nov 20 2008, 16:44) Цикли... Nov 20 2008, 14:06   niksfromru Цитата(AlexOr @ Nov 20 2008, 19:28) Уже..... Jun 16 2010, 09:03 Stanislav Цитата(fontp @ Nov 20 2008, 16:33) Оно мо... Nov 24 2008, 22:29  petrov Цитата(Stanislav @ Nov 25 2008, 01:29) Сд... Nov 25 2008, 08:58   Stanislav Цитата(petrov @ Nov 25 2008, 11:58) Слишк... Nov 25 2008, 09:12   Stanislav Цитата(petrov @ Nov 25 2008, 11:58) Слишк... Nov 26 2008, 22:40 vadkudr А Fractional Delay Filters не пробовали? Nov 24 2008, 14:47 Fat Robot http://www.acoustics.hut.fi/~vpv/publicati...icass... Nov 24 2008, 19:28 ivan219 AlexOr
А в исходниках на Delphi есть??? Nov 24 2008, 21:13 GetSmart Применение для сдвига прямого и обратного FFT веро... Nov 24 2008, 21:46 fontp Цитата(GetSmart @ Nov 25 2008, 00:46) При... Nov 26 2008, 08:12 GetSmart Цитата(fontp)Вот! Вы наверно открыли самый мед... Nov 26 2008, 09:00 fontp Цитата(GetSmart @ Nov 26 2008, 12:00) Кро... Nov 26 2008, 09:40  Stanislav Цитата(fontp @ Nov 26 2008, 12:40) ...Вот... Nov 27 2008, 01:24   fontp Отвечу в Вашем стиле. Векторным многокомпонентным ... Nov 27 2008, 11:39    Stanislav Цитата(fontp @ Nov 27 2008, 14:39) 1. Это... Nov 27 2008, 18:28     blackfin Цитата(Stanislav @ Nov 27 2008, 21:28) А ... Nov 27 2008, 19:15      Stanislav Цитата(blackfin @ Nov 27 2008, 22:15) Быс... Nov 27 2008, 19:59       blackfin Цитата(Stanislav @ Nov 27 2008, 22:59) Бу... Nov 28 2008, 02:51        Stanislav Цитата(blackfin @ Nov 28 2008, 05:51) Не ... Nov 28 2008, 07:06     fontp Цитата(Stanislav @ Nov 27 2008, 21:28) Гд... Nov 28 2008, 08:35      Stanislav Цитата(fontp @ Nov 28 2008, 11:35) O... Nov 28 2008, 08:41       fontp Цитата(Stanislav @ Nov 28 2008, 11:41) Та... Nov 28 2008, 08:44        Stanislav Цитата(fontp @ Nov 28 2008, 11:44) это кт... Nov 28 2008, 08:49         fontp Цитата(Stanislav @ Nov 28 2008, 11:49) Та... Nov 28 2008, 08:52          Stanislav Цитата(fontp @ Nov 28 2008, 11:52) Вы сам... Nov 28 2008, 08:56      Stanislav Цитата(fontp @ Nov 28 2008, 11:35) Расска... Nov 28 2008, 08:46       fontp Цитата(Stanislav @ Nov 28 2008, 11:46) Пр... Nov 28 2008, 08:48        blackfin Цитата(fontp @ Nov 28 2008, 11:48) Ладно.... Nov 28 2008, 11:17     fontp Цитата(Stanislav @ Nov 27 2008, 21:28) Гд... Nov 28 2008, 08:56     Fat Robot грозный Stanislav такой грозный. pic related.
Ц... Nov 28 2008, 11:12 GetSmart Цитата(fontp)Соответственно, если для эффективност... Nov 26 2008, 11:23 petrov Цитата(GetSmart @ Nov 26 2008, 14:23) Син... Nov 26 2008, 11:35 GetSmart Цитата(petrov)Обрезанный синк и есть ФНЧ только пл... Nov 26 2008, 11:56 petrov Цитата(GetSmart @ Nov 26 2008, 14:56) Sin... Nov 26 2008, 12:08 GetSmart Цитата(petrov)Вы понимаете что происходит со спект... Nov 26 2008, 13:09 petrov Цитата(GetSmart @ Nov 26 2008, 16:09) Не ... Nov 26 2008, 13:42 GetSmart petrov, Вы на вопрос не ответили. Вопросом на вопр... Nov 26 2008, 13:56 petrov Цитата(GetSmart @ Nov 26 2008, 16:56) pet... Nov 26 2008, 14:23 Leka А зачем синк обрезать? Свернуть с дираковской греб... Nov 26 2008, 19:50 Leka Имел в виду, что произведению прямоугольника на гр... Nov 26 2008, 23:15 GetSmart Цитата(Leka)А зачем синк обрезать? Свернуть с дира... Nov 27 2008, 03:28 Leka Цитата(Stanislav @ Nov 27 2008, 04:24) Бр... Nov 27 2008, 11:36 GetSmart Цитата(fontp)не говоря уже о том, что одно время т... Nov 27 2008, 11:55 fontp Цитата(GetSmart @ Nov 27 2008, 14:55) Нел... Nov 27 2008, 12:12 GetSmart Цитата(Leka)Дискретизация реального сигнала - уже ... Nov 27 2008, 15:16 GetSmart А я предлагаю заяву написать коллективную на Напол... Nov 28 2008, 02:37 anton Зря читал последние два листа (по теме было сказан... Nov 29 2008, 19:57 Stanislav Цитата(Fat Robot @ Nov 28 2008, 14:12) гр... Nov 29 2008, 22:45 fontp Сбой в Матрице. Дежавю.
4 месяца было:
Пост отред... Dec 1 2008, 08:34 Stanislav Цитата(fontp @ Dec 1 2008, 11:34) Сбой в ... Dec 1 2008, 16:28 ClockworkOrange 2 Stanislav Dec 19 2008, 12:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|