Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 105

/ вопрос решён /

Здравствуйте!
Сегодня, благодаря некоторым товарищам, решил вопрос инверсии спектра сигнала. Но у меня возникла новая проблема - смещение (сдвиг) спектра сигнала на определенную частоту. По поиску ничего стоящего не нашел, и вот опять решил обратиться к спецам.
Вопрос такой: необходимо сдвинуть спектр сигнала на определенную частоту. Как возможно это реализовать?

Buczhack Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Buczhack (статус: Посетитель)
Вопрос отправлен: 19 марта 2011, 17:37
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 24 марта 2011, 11:11; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 21 марта 2011, 11:40 [#1]:

прямое преобразование фурье, потом массив сдвигаем вправо или влево (смотря куда нужно) и обратное преобразование фурье.
Галочка "подтверждения прочтения" - вселенское зло.
Buczhack

Buczhack (статус: Посетитель), 21 марта 2011, 13:49 [#2]:

Спасибо, сегодня буду пробовать.
Buczhack

Buczhack (статус: Посетитель), 23 марта 2011, 21:39 [#3]:

Получил массив через прямое БПФ. Я так понял, до обратного преобразования БПФ надо сдвинуть массив?
For i := 0 to d-1 do
  Begin
// Инверсия спектра
    if odd(i)=true then
        signal[i]:=aData[i]
    else
        signal[i]:=-aData[i];
    Application.ProcessMessages();
    Form1.ProgressBar1.Position:=round((i/d)*100);
 end;
 
// Прямое ДПФ
FastFourierTransform(Signal, 256, False);
 
For i := 0 to M-1 do
  begin
    rf:=SampleRate/N*i;
    lk:=K* 1E-6;
//////////////////////////////////
//
//////////////////////////////////
    if Signal[i] > lk then Memo1.Lines.Add( Format('%6d: F=%11.4f A1=%11.6f ', [i,rf,Signal[i]/K]));
    Application.ProcessMessages();
    Form1.ProgressBar1.Position:=round((i/M)*100);
  end;
 
//Обратное ДПФ
FastFourierTransform(Signal, 256, True);
 
//Выходной массив для записи в wav файл
For i := 0 to d-1 do
  Begin
    bData[i]:=Round(signal[i]);
  end;

Может кто-либо поможет сдвинуть массив?
Вадим К

Вадим К (статус: Академик), 24 марта 2011, 11:11 [#4]:

не понимаю, в чем проблема сдвинуть массив.
например, сдвинуть на два элемента вправо
for i := high(massiv) - 2 downto 0 do
  massiv[i+2] := massiv[i];
massiv[1] := 0;
massiv[0] := 0;
Галочка "подтверждения прочтения" - вселенское зло.

31 марта 2011, 17:45: Статус вопроса изменён на решённый (изменил автор вопроса — Buczhack)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:40
Выполнено за 0.03 сек.