|
|
  |
Перенос спектра в Matlab |
|
|
|
Mar 7 2011, 18:03
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 16-02-11
Пользователь №: 63 022

|
Здравствуйте! Возникла проблема. Реализую перенос спектра sin на 0-ю частоту. Для этого умножаю на экспоненту. Вопрос, почему из за переноса изменяются амплитудные соотношения?Совсем немного,но меняются!ведь по идее должны изменяться только частоты гармоник и все. Код привожу ниже Fs=10*10^3; f1=2*10^3;
t=0:1/Fs:1; signal=1*sin(2*pi*f1*t); y1=fft(signal);
figure(1) plot(abs(y1)),grid
s1=signal.*exp(j*2*pi*f1*t); figure(2) y2=fft(s1); plot(abs(y2)),grid Спасибо!
|
|
|
|
|
Mar 7 2011, 20:34
|
Местный
  
Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066

|
Цитата(deneb13 @ Mar 7 2011, 21:03)  Здравствуйте! Возникла проблема. ... Как было уже сказано, это из-за погрешности FFT. А точнее из-за того, что Вы FFT берете от 10001 точки, в этом случае частотный спектр имеет шаг дискретизации 10кГц/10001 = 0.9999Гц и сигнал частотой 2кГц попадает между двумя спектральными отсчетами. Это и приводит к погрешности измерения амплитуды. Замените строчку "t=0:1/Fs:1" на "t=0:1/Fs:1-1/Fs", это решит проблему.
|
|
|
|
|
Mar 8 2011, 17:04
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 16-02-11
Пользователь №: 63 022

|
Спасибо огромное!действительно помогло! Если можно, ответьте пожалуйста еще на один вопрос. Наверно опять проблема в погрешности fft, но тогда не понимаю, почему она возникает. С этим же сигналом, после фильтрации, выполняю обратный перенос на первоначальную частоту. Амплитуда опять меняется. Длины векторов остаются прежними. Что опять было упущено? Код прилагаю Fs=10*10^3; f1=2*10^3; f2=4*10^3; t=0:1/Fs:1-1/Fs; signal=1*sin(2*pi*f1*t)+2*sin(2*pi*f2*t); y1=fft(signal); figure(1) plot(abs(y1)),grid title('Спектр исходного сигнала'); s1=signal.*exp(-j*2*pi*f1*t); figure(2) y2=fft(s1); plot(abs(y2)),grid title('Спектр перенесенного сигнала'); B1=[0.000074867323718623291 0.000029843947016906191 0.000035649251137170525 0.000042091749772785898 0.000049207651685282051 0.000057025721074006166 0.000065579982606295609 0.000074894688600103538 0.000084998464592263249 0.000095906944599545826 0.00010764057377583412 0.00012020685903585766 0.00013362042900918558 0.00014788529717745042 0.00016301296552518509 0.00017900206017028612 0.00019585384356087681 0.00021355033345440522 0.00023207543321342132 0.00025139354695834167 0.00027147928036987378 0.00029229420683612908 0.00031381075827335641 0.00033597892536717954 0.00035874915207741365 0.00038204131310657659 0.00040578976612778761 0.00042991522772108071 0.00045436483596751089 0.00047904333427598982 0.00050384929579228282 0.00052863752153019803 0.00055333850511602887 0.00057786619647086498 0.00060210611510683437 0.0006257905071241995 0.00064900905656298583 0.00067146426488381777 0.00069307362108383518 0.00071371214273047146 0.00073320062701199738 0.00075142572778662492 0.00076821265544567776 0.00078343209641189076 0.00079691819245689447 0.0008085381039427609 0.00081813426609220782 0.00082557461176558104 0.00083070708850672937 0.00083340327735858914 0.00083352260465997428 0.00083095026276507012 0.00082556391924235831 0.00081726029275528485 0.00080593050712979731 0.00079148599522964802 0.0007738417585242208 0.00075293820561771814 0.00072871712417941971 0.00070113590200281811 0.00067015698634955963 0.00063576966644221988 0.00059798041723357963 0.00055680986912850182 0.00051228299703510137 0.00046444844677513198 0.00041338731501109667 0.00035918843129745774 0.00030194252247403786 0.00024177341975123654 0.00017885598182614156 0.000113306600823241 0.000045333361450898598 -0.000024869351949700824 -0.000097103599499594588 -0.00017111187096671693 -0.00024666699809691337 -0.00032348451646964198 -0.00040129972048327968 -0.00047980547332992493 -0.00055870331403961237 -0.00063766033643191202 -0.00071635231963890027 -0.00079442819345953986 -0.00087154701127434156 -0.00094734204318419027 -0.0010214560517119006 -0.0010935128252451962 -0.0011631496035010649 -0.0012299924905660802 -0.0012936801049696345 -0.0013538395168376132 -0.0014101167323676916 -0.0014621561022228591 -0.001509623166065856 -0.0015521807461206609 -0.0015895143416746335 -0.0016213205887912342 -0.0016473241868954092 -0.0016672543865457272 -0.0016808686184831172 -0.0016879494710142569 -0.0016883117045997894 -0.0016817789958335427 -0.0016682176295261186 -0.0016475294459246312 -0.0016196272022528976 -0.0015844757988635676 -0.0015420758109769049 -0.0014924412224791917 -0.0014356555425266994 -0.0013718032498286298 -0.0013010394487680812 -0.0012235320329592899 -0.0011395078131137791 -0.0010492133697008541 -0.00095294911593929671 -0.00085103874162868699 -0.00074385900503890368 -0.00063180747056448285 -0.00051533159990874123 -0.00039489798082718256 -0.00027102046219501839 -0.00014423261171928799 -0.000015107192143127688 0.00011576835014704229 0.00024776794565646359 0.00038025412485131652 0.00051255881681363938 0.00064401087734885208 0.00077391268795518411 0.00090156324510963168 0.0010262451175025195 0.0011472502297884227 0.0012638570940360445 0.0013753543177702373 0.0014810315797351504 0.0015801993917129518 0.0016721654941180143 0.0017562700070420914 0.0018318714495729322 0.0018983499480612295 0.001955115604617092 0.0020016210874932226 0.0020373357023431358 0.0020617968844452677 0.0020745577194886465 0.0020752427668374626 0.0020635077831940296 0.0020390777645383951 0.0020017215556572092 0.0019512785593668654 0.0018876379184231378 0.00181076522969225 0.0017206794094045876 0.0016174801503727888 0.0015013219439372187 0.0013724410035904861 0.0012311356991687385 0.0010777854567875196 0.00091282935024940249 0.00073678829856948342 0.00055024358978284697 0.00035385856813305495 0.00014835278897694663 -0.000065477663074763916 -0.00028678000255334582 -0.00051462874765795794 -0.00074805087988135809 -0.00098600485267714174 -0.0012274029075307119 -0.0014711000738689599 -0.001715917082149265 -0.0019606173227907416 -0.0022039393041064555 -0.0024445823154837826 -0.0026812209683040001 -0.0029125026476055651 -0.0031370686755146132 -0.0033535313249636353 -0.0035605194051896976 -0.0037566406312513341 -0.0039405274575157303 -0.004110810694194075 -0.004266150890035114 -0.0044052253371144896 -0.00452675145053082 -0.0046294747186861962 -0.0047121940643470245 -0.0047737470119906299 -0.004813040330222243 -0.0048290301594689439 -0.0048207490678348949 -0.0047872940617394782 -0.0047278489212654352 -0.0046416710564801374 -0.0045281149425436956 -0.0043866162362661155 -0.0042167179759658125 -0.0040180521133887058 -0.0037903617578293621 -0.0035334877881856596 -0.0032473894309709458 -0.0029321244684466911 -0.002587872236078986 -0.0022149177580068837 -0.0018136676421232414 -0.0013846306049196367 -0.00092844222474954496 -0.00044583971879492545 0.000062320900346972839 0.00059507946179006342 0.0011513620223204378 0.0017300003802191962 0.002329709842908615 0.0029491251376265581 0.0035867707448209128 0.0042410962523754371 0.0049104570303590027 0.0055931368835668918 0.0062873399938202052 0.0069912108562696761 0.0077028263936973936 0.0084202192531677243 0.0091413635116792211 0.0098642072937224021 0.010586655725801431 0.011306599068558625 0.012021904004335312 0.012730436769847217 0.013430055818563241 0.014118637311338231 0.014794062900710676 0.015454250025499331 0.016097139668424538 0.016720721187340245 0.017323024712336078 0.017902147059561155 0.018456238197103358 0.018983528040541858 0.019482317990833237 0.01995100336042771 0.020388059889961278 0.02079207270759072 0.021161720312999361 0.0214957976242044 0.021793207009755969 0.02205297610813545 0.022274244895276123 0.022456291164941175 0.022598506895452168 0.0227004288620027 0.022761715857729192 0.022782168419279283 0.022761715857729192 0.0227004288620027 0.022598506895452168 0.022456291164941175 0.022274244895276123 0.02205297610813545 0.021793207009755969 0.0214957976242044 0.021161720312999361 0.02079207270759072 0.020388059889961278 0.01995100336042771 0.019482317990833237 0.018983528040541858 0.018456238197103358 0.017902147059561155 0.017323024712336078 0.016720721187340245 0.016097139668424538 0.015454250025499331 0.014794062900710676 0.014118637311338231 0.013430055818563241 0.012730436769847217 0.012021904004335312 0.011306599068558625 0.010586655725801431 0.0098642072937224021 0.0091413635116792211 0.0084202192531677243 0.0077028263936973936 0.0069912108562696761 0.0062873399938202052 0.0055931368835668918 0.0049104570303590027 0.0042410962523754371 0.0035867707448209128 0.0029491251376265581 0.002329709842908615 0.0017300003802191962 0.0011513620223204378 0.00059507946179006342 0.000062320900346972839 -0.00044583971879492545 -0.00092844222474954496 -0.0013846306049196367 -0.0018136676421232414 -0.0022149177580068837 -0.002587872236078986 -0.0029321244684466911 -0.0032473894309709458 -0.0035334877881856596 -0.0037903617578293621 -0.0040180521133887058 -0.0042167179759658125 -0.0043866162362661155 -0.0045281149425436956 -0.0046416710564801374 -0.0047278489212654352 -0.0047872940617394782 -0.0048207490678348949 -0.0048290301594689439 -0.004813040330222243 -0.0047737470119906299 -0.0047121940643470245 -0.0046294747186861962 -0.00452675145053082 -0.0044052253371144896 -0.004266150890035114 -0.004110810694194075 -0.0039405274575157303 -0.0037566406312513341 -0.0035605194051896976 -0.0033535313249636353 -0.0031370686755146132 -0.0029125026476055651 -0.0026812209683040001 -0.0024445823154837826 -0.0022039393041064555 -0.0019606173227907416 -0.001715917082149265 -0.0014711000738689599 -0.0012274029075307119 -0.00098600485267714174 -0.00074805087988135809 -0.00051462874765795794 -0.00028678000255334582 -0.000065477663074763916 0.00014835278897694663 0.00035385856813305495 0.00055024358978284697 0.00073678829856948342 0.00091282935024940249 0.0010777854567875196 0.0012311356991687385 0.0013724410035904861 0.0015013219439372187 0.0016174801503727888 0.0017206794094045876 0.00181076522969225 0.0018876379184231378 0.0019512785593668654 0.0020017215556572092 0.0020390777645383951 0.0020635077831940296 0.0020752427668374626 0.0020745577194886465 0.0020617968844452677 0.0020373357023431358 0.0020016210874932226 0.001955115604617092 0.0018983499480612295 0.0018318714495729322 0.0017562700070420914 0.0016721654941180143 0.0015801993917129518 0.0014810315797351504 0.0013753543177702373 0.0012638570940360445 0.0011472502297884227 0.0010262451175025195 0.00090156324510963168 0.00077391268795518411 0.00064401087734885208 0.00051255881681363938 0.00038025412485131652 0.00024776794565646359 0.00011576835014704229 -0.000015107192143127688 -0.00014423261171928799 -0.00027102046219501839 -0.00039489798082718256 -0.00051533159990874123 -0.00063180747056448285 -0.00074385900503890368 -0.00085103874162868699 -0.00095294911593929671 -0.0010492133697008541 -0.0011395078131137791 -0.0012235320329592899 -0.0013010394487680812 -0.0013718032498286298 -0.0014356555425266994 -0.0014924412224791917 -0.0015420758109769049 -0.0015844757988635676 -0.0016196272022528976 -0.0016475294459246312 -0.0016682176295261186 -0.0016817789958335427 -0.0016883117045997894 -0.0016879494710142569 -0.0016808686184831172 -0.0016672543865457272 -0.0016473241868954092 -0.0016213205887912342 -0.0015895143416746335 -0.0015521807461206609 -0.001509623166065856 -0.0014621561022228591 -0.0014101167323676916 -0.0013538395168376132 -0.0012936801049696345 -0.0012299924905660802 -0.0011631496035010649 -0.0010935128252451962 -0.0010214560517119006 -0.00094734204318419027 -0.00087154701127434156 -0.00079442819345953986 -0.00071635231963890027 -0.00063766033643191202 -0.00055870331403961237 -0.00047980547332992493 -0.00040129972048327968 -0.00032348451646964198 -0.00024666699809691337 -0.00017111187096671693 -0.000097103599499594588 -0.000024869351949700824 0.000045333361450898598 0.000113306600823241 0.00017885598182614156 0.00024177341975123654 0.00030194252247403786 0.00035918843129745774 0.00041338731501109667 0.00046444844677513198 0.00051228299703510137 0.00055680986912850182 0.00059798041723357963 0.00063576966644221988 0.00067015698634955963 0.00070113590200281811 0.00072871712417941971 0.00075293820561771814 0.0007738417585242208 0.00079148599522964802 0.00080593050712979731 0.00081726029275528485 0.00082556391924235831 0.00083095026276507012 0.00083352260465997428 0.00083340327735858914 0.00083070708850672937 0.00082557461176558104 0.00081813426609220782 0.0008085381039427609 0.00079691819245689447 0.00078343209641189076 0.00076821265544567776 0.00075142572778662492 0.00073320062701199738 0.00071371214273047146 0.00069307362108383518 0.00067146426488381777 0.00064900905656298583 0.0006257905071241995 0.00060210611510683437 0.00057786619647086498 0.00055333850511602887 0.00052863752153019803 0.00050384929579228282 0.00047904333427598982 0.00045436483596751089 0.00042991522772108071 0.00040578976612778761 0.00038204131310657659 0.00035874915207741365 0.00033597892536717954 0.00031381075827335641 0.00029229420683612908 0.00027147928036987378 0.00025139354695834167 0.00023207543321342132 0.00021355033345440522 0.00019585384356087681 0.00017900206017028612 0.00016301296552518509 0.00014788529717745042 0.00013362042900918558 0.00012020685903585766 0.00010764057377583412 0.000095906944599545826 0.000084998464592263249 0.000074894688600103538 0.000065579982606295609 0.000057025721074006166 0.000049207651685282051 0.000042091749772785898 0.000035649251137170525 0.000029843947016906191 0.000074867323718623291]; B=B1'; z=filtfilt(B,1,s1); y2(10:(length(y2)-10))=0; figure(3) plot(abs(y2)),grid s_f = ifft(y2); title('Спектр фильтрованного сигнала ОБНУЛЕНИЕМ'); s_obr=z.*exp(j*2*pi*f1*t); spektr=fft(s_obr); figure(4) plot(abs(spektr)),grid title('Спектр обратного переноса сигнала'); rez=signal-s_obr; spektr_rez=fft(rez); z0=fft(z); figure(5) plot(abs(z0)),grid title('Спектр фильтрованного сигнала'); figure(6) plot(abs(spektr_rez)),grid title('КОМПЕНСАЦИЯ'); Спасибо! P.S. Извините за возможно глупые вопросы-Matlab в стадии начального освоения
|
|
|
|
|
Mar 8 2011, 17:24
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 16-02-11
Пользователь №: 63 022

|
Исходная задача: сигнал есть сумма полезной составляющей и помехи. Перенести сумму на 0-ю частоту, отфильтровать та мпомеху, затем помеху перенести на первоначальную частоту и вычесть из исходной суммы отфильтрованную помеху.т.е. получается простая модель компенсатора
|
|
|
|
|
Mar 8 2011, 17:38
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 16-02-11
Пользователь №: 63 022

|
Это задание на курсовой. Нужно сделать именно компенсатор помех, работающий по такому методу. В дальнейшем вместо полезного сигнала будет шпс.Сейчас проверяю методику на более простом примере
То есть, получается что данное изменение амплитуды есть погрешность вычислений, которое никак не обойти?Верно?
|
|
|
|
|
Mar 8 2011, 17:44
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
QUOTE (deneb13 @ Mar 8 2011, 20:38)  Это задание на курсовой. Нужно сделать именно компенсатор помех, работающий по такому методу. В дальнейшем вместо полезного сигнала будет шпс.Сейчас проверяю методику на более простом примере Возможно и есть такие компенсаторы, но с какими-нибудь тонкостями в реализации, я не знаю, это пусть более опытные товарищи расскажут. QUOTE (deneb13 @ Mar 8 2011, 20:38)  То есть, получается что данное изменение амплитуды есть погрешность вычислений, которое никак не обойти?Верно? Обратите внимание, что после фильтрации не только амплитуда изменилась, но и появились дополнительные частоты, посмотрите на временное представление сигнала на всех стадиях и увидите, где именно все пошло не так. Это не совсем погрешность вычислений уже, это просто фильтр не идеален (и 500+ порядок - это редко когда применимо в жизни) и неидеальность фильтра накладывается на результат.
|
|
|
|
|
Mar 8 2011, 18:16
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 16-02-11
Пользователь №: 63 022

|
Спасибо!
Taradov Alexander, по вашему совету функцию filtfilt изменила на firls(). Помеха отфильтровалась. Теперь ее уровень значительно ниже! Предполагаю, что связано с методом фильтрации. Вы не могли бы подсказать, каким еще методом можно воспользоваться, возможно он даст более лучшие результаты?
|
|
|
|
|
Mar 8 2011, 18:25
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
QUOTE (deneb13 @ Mar 8 2011, 21:16)  Taradov Alexander, по вашему совету функцию filtfilt изменила на firls(). Помеха отфильтровалась. Хм, это как? filtfilt() фильтрует, а firls() выдает коэффициенты фильтра, они для разного предназанчены. Для физически реализуемой фильрации есть функция filter(). Покажите код, так будет проще. Потом, какая помеха ожидается? Отфильтровать один синус - это не то же самое, что убрать широкополосный шум.
|
|
|
|
|
Mar 8 2011, 18:47
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 16-02-11
Пользователь №: 63 022

|
Помеха в дальнейшем так и будет sin-узкополосная.Сигнал будет широкополосный. Извините,запутала вас. До этого я коэффициенты фильтра рассчитывала с помощью fdatool, а сейчас сделала с помощью firls() . Фильтрация осуществлена с помощью filter(). Привожу код Fs=10*10^3; f1=2*10^3; f2=4*10^3; t=0:1/Fs:1-1/Fs;
signal=1*sin(2*pi*f1*t)+2*sin(2*pi*f2*t); y1=fft(signal);
figure(1) plot(abs(y1)),grid title('Спектр исходного сигнала');
s1=signal.*exp(-j*2*pi*f1*t); figure(2) y2=fft(s1); plot(abs(y2)),grid title('Спектр перенесенного сигнала');
f=[0 0.1 0.15 1]; a=[1 1 0 0]; b=firls(80,f,a);
B=b'; z=filter(B,1,s1);
y2(10:(length(y2)-10))=0; figure(3) plot(abs(y2)),grid s_f = ifft(y2); title('Спектр фильтрованного сигнала ОБНУЛЕНИЕМ');
s_obr=z.*exp(j*2*pi*f1*t); spektr=fft(s_obr); f_spektr=angle(s_obr); figure(4) plot(abs(spektr)),grid title('АХ обратного переноса сигнала');
rez=signal-s_obr; spektr_rez=fft(rez);
z0=fft(z); figure(5) plot(abs(z0)),grid title('Спектр фильтрованного сигнала');
figure(6) plot(abs(spektr_rez)),grid title('КОМПЕНСАЦИЯ');
|
|
|
|
|
Mar 8 2011, 19:15
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 16-02-11
Пользователь №: 63 022

|
Например,в Тузове "Стат.теория приема сложных сигналов",1977 г.,стр.128.Встречала еще в некоторых книгах,к сожалению, названия не вспомню,за последнее время много информации перечитала. Для шпс сигнала в принципе метод не планировала менять. Т.е.предполагала просто к сигналу прибавить sin,а дальше действовать по тому же алгоритму. Почему fft нежелательно использовать, не могли бы объяснить?
Хочу еще задать вопрос:почему в аплитудах sin я указываю 1 и 2, а на графиках они отображаются с амплитудами 5000 и 10000.из за чего это?
|
|
|
|
|
Mar 8 2011, 19:31
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
QUOTE (deneb13 @ Mar 8 2011, 22:10)  Например,в Тузове "Стат.теория приема сложных сигналов",1977 г.,стр.128. Хм, ну книжки 77 года я сейчас икать не буду, конечно  QUOTE (deneb13 @ Mar 8 2011, 22:10)  Почему fft нежелательно использовать, не могли бы объяснить? В первую очередь потому, что FFT вещь блочная, причем FFT не очень хорошо сохраняет временное представление сигнала, после его обраюотки в чатотной области. В частности - Ваш пример, где фильтрация достигается путем зануления некоторых компонент в частотной области и обратным преобразованием, так не делают в жизни. Это работает для суммы двух синусов, но не более. Я бы рекомендовал экспериментировать сразу на более или менее реальном сигнале, так как синусы (да еще с очень красиво подогнанными частотами под окно FFT) не репрезентативны. Ваш метод в реальности исказит сигнал так, что демодулятору скорее самому проще с помехой будет справиться, чем после такой фильтрации. QUOTE (deneb13 @ Mar 8 2011, 22:15)  Хочу еще задать вопрос:почему в аплитудах sin я указываю 1 и 2, а на графиках они отображаются с амплитудами 5000 и 10000.из за чего это? FFT в матлабе не нормализованное, результат нужно делить на длинну выборки / 2. И еще, сразу делайте модель так, чтобы в нее можно было потенциально подставить выборку любой длинны. В Вашем случае получается, что берется FFT сразу от всего сигнала, так не получится сделать на практике, размер блока скорее всего не будет превышать 16384 или около того. Вот это сразу заложите в модель. И даже на 2-х синусах с текущим подходом возникнут проблемы.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|