Увеличение частоты сигнала

#matlab #signal-processing #octave

#matlab #обработка сигналов #октава

Вопрос:

Приветствую всех

Я вернулся назад и использовал повторную выборку (из набора инструментов обработки сигналов) и repmat, но я замечаю, что для некоторых значений строки не совпадают с частотой дискретизации, см. Ссылку на Изображение ниже. обратите внимание, что верхнее значение изображения для строк равно 1000, а нижнее изображение — rows = 1008. Это происходит, когда я изменяю значения resample и repmat (freq_new), но только для определенных значений. Как я могу это правильно исправить? Я мог бы просто удалить все после 1000, но я не уверен, ошибка ли это или просто способ повторной выборки / repmat работает. PS: использование matlab / octave

http://dl.dropbox.com/u/6576402/questions/rows_different.png

Вот тестовый код, который я использовал для тестирования этого

 %resample_repmat signal
clear all, clf
Fs = 1000; % Sampling rate
Ts = 1/Fs; %sampling interval
t=0:Ts:1-Ts; %sampling period

freq_orig=1;
y=sin(2*pi*t*freq_orig)'; %gives a short wave

freq_new=9;
y2=resample(y,1,freq_new); %resample matrix
y3=repmat (y2,freq_new,1); %replicate matrix

[r_orig,c_orig] = size(y) %get orig number of rows and cols
[r_new,c_new] = size(y3) %get new number of rows and cols

subplot(2,1,1),plot(y),title('Orginal signal')
title(['rows=',num2str(r_orig),' cols=',num2str(c_orig)])
subplot(2,1,2),plot(y3),title('New signal')
title(['rows=',num2str(r_new),' cols=',num2str(c_new)])
  

Комментарии:

1. В комментарии к вашему предыдущему вопросу вы сказали, что хотите линейный сдвиг всех частотных компонентов, но подобная передискретизация даст вам логарифмический сдвиг частоты, т. е. величина сдвига частоты каждого компонента будет пропорциональна исходной частоте каждого компонента.

Ответ №1:

Поскольку ваш исходный сигнал имеет длину 1000 выборок, его повторная выборка с периодом в 9 раз короче даст вам 111,111111… выборки за один цикл. Matlab округляет это число до 112. Подумайте об этом. Если бы ваши циклы имели длину 111 сэмплов, ваша полная волна имела бы длину 999 сэмплов. Поскольку длина стека составляет 112 выборок, когда вы соединяете девять из них вместе, получается сигнал длиной в 1008 выборок. Невозможно увеличить его до 1000, потому что вы имеете дело с дискретными временами. Код правильный, он делает то, что должен. Физически невозможно точно уместить 9 идентичных циклов чего-либо в 1000 дискретных выборок. Я надеюсь, что это поможет.

В качестве альтернативы, вы можете попробовать сначала повторить свою начальную волну девять раз, а затем выполнить ее повторную выборку. Ваши циклы не были бы идентичными, но они бы хорошо вписались в 1000 выборок.

Я надеюсь, что это поможет = )

Комментарии:

1. спасибо, что сделали это 🙂 Я просто сделал то, что вы сказали, и изменил / отменил их на строки y2= repmat (y, freq_new,1); %replicate matrix y3=resample(y2,1,freq_new); %resample matrix