реклама на сайте
подробности

 
 
> ЦОС. Пытаюсь понять принцип цифровой фильтрации сигнала.
b_of_b
сообщение Aug 9 2007, 17:39
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 6-08-07
Пользователь №: 29 606



ЦОС. Пытаюсь понять принцип цифровой фильтрации сигнала. Подскажите пожалуйста правильна ли в принципе моя логика.
Код на MATLAB

1. Создадим сигнал
for q=1:1:1024;
mass(q)=sin(2*pi/512*q); % 512 Гц
mass(q)=mass(q)+sin(2*pi/256*q);% 256 Гц
mass(q)=mass(q)+sin(2*pi/128*q);% 128 Гц
mass(q)=mass(q)+sin(2*pi/64*q); % 64 Гц
mass(q)=mass(q)+sin(2*pi/32*q); % 32 Гц
mass(q)=mass(q)+4;
end;
plot (mass);

2. Проанализируем сигнал с помощью ДПФ
dp=fft(mass); % ДПФ
Am=sqrt(real(dp).^2 + imag(dp).^2)/512; % Амплитуда
%(Первая из них видимо – постоянная, а дальше по частотам ? )
plot(Am(1:256));
%title('Frequency content of y'); xlabel('frequency (Hz)');
Как корректно отобразить амплитудно-частотный график ?

3. Создадим произвольный фильтр с помощью fdatool (лишь бы наглядно давил какой-то диапазон)
Через экспортирование (File->Export…) получаем коэффициенты фильтра:
FiL = [
1.0000 -0.0000 -1.0000 1.0000 -0.7044 0.7096 1.0000 1.6212 1.0000 1.0000 -0.0894 0.7528
1.0000 -1.9288 1.0000 1.0000 -1.2281 0.8118 1.0000 1.1771 1.0000 1.0000 0.3301 0.8700
1.0000 -1.8281 1.0000 1.0000 -1.5012 0.9159 1.0000 0.9892 1.0000 1.0000 0.5205 0.9619
1.0000 -1.7785 1.0000 1.0000 -1.6154 0.9770
];
for q=1:1:42; FiL2(q)=FiL(q); end;
for q=43:1:1024; FiL2(q)=0; end;
Здесь я расширяю размерность фильтра до размерности сигнала – это нужно ?

4. Отфильтруем сигнал - сворачиваем сигнал с фильтром
w = conv(mass,FiL2);
dp2=fft(w); % ДПФ
Am2=sqrt(real(dp2).^2 + imag(dp2).^2)/512;
plot(Am2(2:50));
clear d Am dp mass w FiL dp2 Am2;

I. Смысл моего примера (вопроса) в том, что я сгенерировал, как мне кажется, чистейший сигнал: частота дискретизации кратная частотам заложенным в сигнале. Как я думал на амплитудно-частотном графике должен был бы получиться "аккуратный частокол" с единичными амплитудами (а у меня первый коэффициент куда-то ввысь улетает постоянно). Да и формулу нахождения амплитуд я «подгонял под ответ». Затем я собирался создать фильтр (какие коэффициенты выдает тулза Матлаба fdatool я не знаю (кстати в чем (какая прога или тулза) лучше всего фильтры проектировать)), который наглядно «сбивает» какие-то частоты. Коэффициенты фильтра я получил и свернул их с сигналом. Результат стал анализировать с помощью ДПФ – который вывел мне какие-то еще левые частоты, а «сбиваемые» частоты в большинстве случаев «не пострадали». Вот я и спрашиваю: что я не так делаю и может где уже статья есть по данному вопросу (Читать книги типа Айфичера у меня уже нервов не хватает).

II. А первый коэффициент после выполнения ДПФ (для сигнала) является уже частотой или это какая-то постоянная величина не имеющая отношения к спектру, которая как-то отображается на графике (каково ее место на амплитудно-частотном график ) ?

III. Амплитуда высчитывается по такой формуле как у меня (в разных книгах - разные формулы)
Am=sqrt(real(dp).^2 + imag(dp).^2)/512;

Амплитуда = квадратный корень (сумма квадратов действительной и мнимой части ДПФ) / половину частоты дескритизации ?

IV. А почему фильтрацию сигнала не делают по такой схеме: в результате ДПФ получаем значения частот и амплитуд, значит "ненужные" (фильтруемые) частоты можно просто выкинуть, а затем через функцию синуса создать уже отфильтрованный сигнал.

ЗЫ: Я и с MATLAB и с ЦОС работаю впервые
ЗЗЫ: Если есть какая-либо статься написанная по такой схеме (как создать, проанализировать и увидеть ) подскажите пожалуйста.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shasik
сообщение Aug 10 2007, 05:48
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Цитата(b_of_b @ Aug 9 2007, 20:39) *
mass(q)=sin(2*pi/512*q); % 512 Гц
mass(q)=mass(q)+sin(2*pi/256*q);% 256 Гц


Уверены, что частота 512 и 256 Гц?

1. Про герцы речь даже не идет. Есть только частота дискретизации в герцах, остальное пляшет относительно нее. Т.е. Ваши 1024 отсчетов могли бы быть получены и с fd=1000 Гц, и с fd=10000000 Гц. Общий вид спектра (при такой генерации сигнала) не изменился бы. Еще Альберт в своей теории доказал,что все относительно. smile.gif
2. Почему у Вас за период наблюдения (1024 отсчета) влазит 2 периода синуса с частотой 512 Гц, и целых 4 периода синуса с частотой 256 Гц? Поняли в чем смысл? Другими словами, все наоборот: то, что вы считатете 512 Гц - на самом деле fd/512 и т.д.

Далее по тексту: первый коэффициент это не частота (!), как в прочем и остальные коэффициенты. Коэффициенты fft - амплитуда (в вашем случае) определенной частотной составляющей в спектре сигнала. Т.е. первый коэффициент, говоря по-русски, это амплитуда синуса с частотой 0. На счет графика спектра сигнала - очень много возможностей. В matlab'е очень хороший help. Далее: фильтрацию в частотной области (с помощью fft) делают. Увы, Вы не первый...

Кстати, даже если сигнал одни только синусы, спектр же такого сигнала не всегда одни только красивые "палки". При недосточном частотном разрешении гармоники могут накладываться друг на друга и т.д., и т.п.

Книги? Статьи? Их море. А начинать ЦОС рекомендую с бессмертного творения Рабинера и Голда. Есть на ftp/
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 11:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016