#matlab #fft #equation-solving
#matlab #БПФ #решение уравнений
Вопрос:
Восстановление исходного сигнала из частот, амплитуды и фазы, полученных после выполнения fft.
Приветствую
Я пытаюсь восстановить сигнал на основе частоты, амплитуды и фазы, полученных после выполнения БПФ сигнала, но когда я пытаюсь объединить данные БПФ (частоту, амплитуду и фазу) обратно, чтобы посмотреть, получу ли я аналогичный сигнал, шаблон немного отклоняется. Я думаю, что это связано с моей формулой, которая может быть немного неверной.
Формула, которую я использую для объединения данных, является:
amplitude*sin(2*pi*time*frequency phase) amplitude*cos(2*pi*time*frequency phase);
Пожалуйста, обратите внимание:
На данный момент я не хочу использовать IFFT из-за того, что я буду редактировать амплитуду и частоты до завершения вычислений
Изображение графика приведено ниже. Верхний — это исходный сигнал, а нижний — сигнал, созданный с помощью уравнения. Если вы хотите знать, я использую matlab, но я думаю, что проблема в уравнении.
tia
Комментарии:
1. Можете ли вы объяснить это немного лучше? Уравнение даст только одну синусоидальную волну, но здесь явно происходит что-то более сложное. Есть ли у вас серия БПФ, чтобы амплитуда, частота и фаза постоянно менялись?
2. Амплитуда @AAT, частота и т.д., Вероятно, являются матрицами
3. @tstenner — хорошая идея, это очень вероятно — возможно, Рик подтвердит.
4. вы хотя бы пробовали ifft, чтобы посмотреть, что вы получаете (для сравнения с вашей процедурой)?
5. @AAT да, амплитуда, частота и фаза являются матрицами.
Ответ №1:
IFFT является эффективной реализацией следующего преобразования:
N-1
x[n] = SUM X[k] exp(j*2*pi*n*k/N)
k=0
где X[k]
ваши результаты FFT (комплексные амплитуды) и x[n]
ваши выборки во временной области. Для входных данных только реального типа это можно переписать в терминах cos
и sin
(или в терминах cos
с phase
термином), но обычно проще просто придерживаться сложного представления.
[Это может быть сильно векторизовано, но я оставлю это на ваше усмотрение!]
Комментарии:
1. Технически это вообще не выполняется. Но это приводит к тому же результату, что и этот. 🙂
Ответ №2:
Я не понимаю, почему вы хотите, чтобы в вашем уравнении были как sin, так и cos-члены: этого должно хватить…
amplitude*sin(2*pi*time*frequency phase);
Использование терминов sin и cosine, если в FFT нет чего-то странного, вызовет проблемы с масштабированием и сдвигом фазы. Однако я не знаю, объяснило бы это искажение, которое вы видели. Это может быть связано с размерами блоков FFT, которые вы использовали.
Комментарии:
1. На самом деле, он, вероятно, хочет просто
cos
.2. @Oli все, что было нужно, это изменить его с sin на cos thanks…it кажется, это всегда простые вещи 🙂
3. @Rick — рад слышать, что это сработало. @Oli — хорошее решение, я всегда начинаю с sin() , а затем понимаю, что cos() — это то, чего я хотел!
4. все, что было необходимо, это изменить его с sin на cos благодаря амплитуде cos(2 * pi время * частота фаза)