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

 
 
 
Reply to this topicStart new topic
> изменить частоту дискретизации, matlab
Mad_max
сообщение Apr 20 2012, 09:56
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



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

Испытательное воздействие - синусоида оцифрованная 16кГц.
Код
>> fs = 16000;
>> t = 0:1/fs:1;
>> x = (0.5)*sin(2*pi*800*t);

Модель (не в matlab) - фильтр дециматор, коэффициенты которого посчитаны исходя из следующей спецификации, частота оцифровки 16кГц, частота среза 1кГц, коэффициент децимации 8.
Подтянув результат фильтрации обратно в matlab, вижу что синусоида "улетела" на 800*8 = 6.4кГц.
Я так понимаю, что надо matlab'у сообщить, что sample rate этих данных не 16кГц а 2кГц.
Попытка вида
Код
>> fs = 2000;
>> t = 0:1/fs:1;

результата не дает, только меняет шаг сетки.

Как все же решить эту проблему?

Go to the top of the page
 
+Quote Post
slash_spb
сообщение Apr 20 2012, 12:31
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 20-03-06
Пользователь №: 15 425



Цитата(Mad_max @ Apr 20 2012, 13:56) *
Подскажите правильно ли я еду...
Задача такова, создать в matlab испытательное воздействие, прогнать через модель, заново подтянуть в matlab и посмотреть результат.

Испытательное воздействие - синусоида оцифрованная 16кГц.
Код
>> fs = 16000;
>> t = 0:1/fs:1;
>> x = (0.5)*sin(2*pi*800*t);

Модель (не в matlab) - фильтр дециматор, коэффициенты которого посчитаны исходя из следующей спецификации, частота оцифровки 16кГц, частота среза 1кГц, коэффициент децимации 8.
Подтянув результат фильтрации обратно в matlab, вижу что синусоида "улетела" на 800*8 = 6.4кГц.
Я так понимаю, что надо matlab'у сообщить, что sample rate этих данных не 16кГц а 2кГц.
Попытка вида
Код
>> fs = 2000;
>> t = 0:1/fs:1;

результата не дает, только меняет шаг сетки.

Как все же решить эту проблему?


А что вы хотите увидеть в итоге? Прикрепите пожалуйста файл с вернувшейся синусойдой.
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Apr 20 2012, 13:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Цитата(slash_spb @ Apr 20 2012, 16:31) *
А что вы хотите увидеть в итоге? Прикрепите пожалуйста файл с вернувшейся синусойдой.

Ну вот тут вопрос, должен ли я увидеть ту же синусоиду или в модели надо ставить интерполятор и тогда уже в matlabe я получу ту же синусоиду.
Смущает то, что если сделать в matlab
Код
y = filter(a,1,x);

Синусоида не "улетает".

Файл смогу только в понедельник прикрепить.
Go to the top of the page
 
+Quote Post
slash_spb
сообщение Apr 20 2012, 14:20
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 20-03-06
Пользователь №: 15 425



Цитата(Mad_max @ Apr 20 2012, 17:05) *
Ну вот тут вопрос, должен ли я увидеть ту же синусоиду или в модели надо ставить интерполятор и тогда уже в matlabe я получу ту же синусоиду.
Смущает то, что если сделать в matlab
Код
y = filter(a,1,x);

Синусоида не "улетает".

Файл смогу только в понедельник прикрепить.


Спектр до:

Код
fs = 16000;
t = 0:1/fs:1;
x = (0.5)*sin(2*pi*800*t);
plot([0:fs/(length(x)-1):fs],abs(fft(x)))



Спектр после децимации:
Код
x2 = x(1:8:end);
fs_dec = 2000;
plot([0:fs_dec/(length(x2)-1):fs_dec],abs(fft(x2)))


Частота синусойды не изменилась)

Сообщение отредактировал slash_spb - Apr 20 2012, 14:21
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Apr 20 2012, 14:34
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Если спектр построить при fs = 16000, то как раз получим синусоиду на 800*8=6.4кГц.
Но для Фурье в явном виде задается частота дискретизации сигнала.
Но нужен сигнал во временном домене.
Go to the top of the page
 
+Quote Post
slash_spb
сообщение Apr 23 2012, 10:51
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 20-03-06
Пользователь №: 15 425



Цитата(Mad_max @ Apr 20 2012, 18:34) *
Если спектр построить при fs = 16000, то как раз получим синусоиду на 800*8=6.4кГц.
Но для Фурье в явном виде задается частота дискретизации сигнала.
Но нужен сигнал во временном домене.


Интерполируем сигнал, или передескритезируем с частотой fs=16000.

Код
x2_1 = repmat(x2',1,8)'; x2_1 = x2_1(:);
plot([0:fs/(length(x2_1)-1):fs],abs(fft(x2_1)));


x2_1 - сигнал во временном домене. А на спектре видим размножение спектра относительно частоты дискретизации fs_dec.

А вот строить спектр сигнала и не верно указывать его частоту дискретизации не стоит. Так что нет никакой 6.4кГц. Вот если бы мы действительно изменили бы частоту дискретизации продецимированного сигнала с fs_dec до fs, тогда да. Но в реальном времени такое не возможно.

Сообщение отредактировал slash_spb - Apr 23 2012, 10:55
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Apr 24 2012, 07:32
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Прикрепил файл с дампом.
Подтянуть можно так
Код
function B = recal_data(elements,N)
% elements - number of elements in load file
% N - bit width
    fid = fopen('output','r');
    A = fscanf(fid, '%x ', elements);
    fclose(fid);

    C = reshape(A,1,elements);

    B = tc2dec(C,N);    
end

function B = tc2dec(C,N)
    K = length(C);
    for i = 1 : K,
        if ( C(i) > (2^(N-1) - 1) )
            B(i) = C(i) - 2^N;
            B(i) = B(i)/(2^(N - 1));
        else
            B(i) = C(i);
            B(i) = B(i)/(2^(N - 1));
        end
    end    
end

%B = recal_data(1500,16);

Возвращаясь к началу поста, хотелось бы посмотреть сигнал в matlab во временном домене.
Но для этого нужно поменять sample rate.
Прикрепленные файлы
Прикрепленный файл  output.txt ( 9.37 килобайт ) Кол-во скачиваний: 27
 
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:18
Рейтинг@Mail.ru


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