|
Вопрос # 5 105/ вопрос решён / |
|
Здравствуйте!
Сегодня, благодаря некоторым товарищам, решил вопрос инверсии спектра сигнала. Но у меня возникла новая проблема - смещение (сдвиг) спектра сигнала на определенную частоту. По поиску ничего стоящего не нашел, и вот опять решил обратиться к спецам.
Вопрос такой: необходимо сдвинуть спектр сигнала на определенную частоту. Как возможно это реализовать?
 |
Вопрос задал: Buczhack (статус: Посетитель)
Вопрос отправлен: 19 марта 2011, 17:37
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 24 марта 2011, 11:11; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 21 марта 2011, 11:40 [#1]:
прямое преобразование фурье, потом массив сдвигаем вправо или влево (смотря куда нужно) и обратное преобразование фурье.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Buczhack (статус: Посетитель), 21 марта 2011, 13:49 [#2]:
Спасибо, сегодня буду пробовать.
|
|
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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|