Điều gì là tốt hơn: lên hoặc xuống?


13

Tôi muốn so sánh hai tín hiệu hoặc đường cong. một đường cong được lấy mẫu ở 30 Hz một mẫu đường cong ở 2000 Hz

Thật không may, họ có tỷ lệ mẫu khác nhau. Cái đầu tiên được lấy mẫu ở tần số 30 Hz, cái thứ hai ở 2000 Hz. Matlab có chức năng 'lấy mẫu lại' và tôi nghĩ, điều này sẽ giúp việc so sánh dễ dàng hơn nhiều.

Câu hỏi của tôi là: Liệu khôn ngoan hơn khi hạ thấp đường cong thứ hai hay lật ngược đường cong thứ nhất?

Chỉnh sửa: Tôi đã làm như tôi đã nói. Trong hình bên trái là các đường cong ban đầu. Các đường cong bên phải được ghép lại. Trên cùng bên phải là upampling, dưới cùng bên phải là downsampling.

Tôi biết các đường cong có chiều dài khác nhau, khi được ghép lại. Tuy nhiên, tín hiệu thứ hai sẽ bị cắt theo chiều dài tín hiệu đầu tiên. so sánh


1
Tôi nêu lên câu hỏi của bạn. Mà bạn nghĩ là khôn ngoan hơn.

nếu độ chính xác rất cao không thành vấn đề (trong trường hợp này tôi nghĩ là không) thì bạn có thể giảm mẫu, đặc biệt là nếu nó làm cho quá trình nhanh hơn rất nhiều và bạn coi trọng thời gian của mình tại nơi làm việc
user1306322

@Stanley Pawlukiewicz, rõ ràng, tôi mất tất cả các đỉnh nhỏ bằng cách lấy mẫu xuống. Vì vậy, upampling có thể là con đường để đi. Sau đó, một lần nữa tôi không cần những đỉnh nhỏ. Tôi thậm chí đã nghĩ về việc làm mịn tín hiệu thứ hai. Vì vậy, trong trường hợp của tôi, nó có thể không thực sự quan trọng nếu tôi lấy mẫu lên hoặc xuống.
NelsonOrange

Anymore phản hồi và câu trả lời cần thiết?
Laurent Duval

Câu trả lời:


18

Nói ngắn gọn:

  • Upsampling : không / không nên mất thông tin (nếu được thực hiện một cách khôn ngoan), thì an toàn hơn ,
  • Downsampling : có thể mất thông tin (nếu được thực hiện không chính xác), nhưng hiệu quả hơn về mặt tính toán .

Vì vậy, nếu bạn so sánh dữ liệu ở các tỷ lệ khác nhau và trong giai đoạn đánh giá khi người ta cố gắng xác định cách thực hiện so sánh (tính năng nào được so sánh, với số liệu nào, như bên ngoài, như độ chính xác, hiệu quả, độ mạnh, v.v.), a Cách tiếp cận đầu tiên rất cơ bản sẽ là lấy mẫu cả hai tín hiệu bằng một yếu tố số nguyên để điều hòa việc lấy mẫu của chúng . Ở đây, điều này khá OK, 6000 Hz có thể hoạt động cho cả hai.

Những lý do có thể là, đối với thực hành DSP:

  • với việc lấy mẫu số nguyên, bạn không bắt buộc phải sử dụng các kỹ thuật lọc phức tạp và phép nội suy tuyến tính đơn giản rất dễ dàng. Hãy nhớ rằng mặc dù upampling thêm một số thông tin.
  • với các tín hiệu có cùng tỷ lệ, bạn có thể trích xuất các tính năng và so sánh chúng: nhiễu, biến thiên, độ dốc, đạo hàm, v.v. Bạn có thể áp dụng hiệu chỉnh tỷ lệ / bù chính xác (chúng không có cùng biên độ), sử dụng tuyến tính hoặc không biên độ biến đổi tuyến tính (Fourier, v.v.) để kiểm tra xem các tính năng tương tự có tồn tại trong các miền khác nhau không
  • ở giai đoạn này, bạn sẽ có thể định lượng và định lượng các tính năng / số liệu cần thiết để xây dựng thuật toán của mình. Và bạn có thể ước tính những gì bạn có thể mất từ ​​cả hai dữ liệu. Chẳng hạn, bạn có thể tạo thuật toán của mình và xem mức độ mạnh mẽ để báo hiệu việc lấy mẫu xuống và bạn có thể đi được bao xa. Ở đây, thuật toán của bạn bắt đầu hiệu quả hơn.

Một khi bạn đã dành thời gian cho việc đó, bạn sẵn sàng bắt đầu lại từ đầu và quyết định xem bạn có nên từ chối hay không, với phương pháp nào, v.v. để đạt được cả sự an toàn và hiệu quả .

Để cung cấp giải pháp thay thế, nếu bạn quyết định so sánh dữ liệu trên miền Fourier, bạn có thể dễ dàng truyền hai tín hiệu có độ dài và tốc độ lấy mẫu khác nhau cho cùng một số hệ số Fourier, giúp so sánh trong miền tần số.


14
Downsampling sẽ hầu như luôn mất thông tin, ngay cả khi nó không được thực hiện một cách không khôn ngoan. Tuy nhiên, việc mất thông tin thực sự có thể là một điều khôn ngoan, vì vậy ...
rẽ trái vào

@leftaroundabout Trong trường hợp cạnh nào có thể downsampling không bị mất thông tin?
Willem

2
@leftaroundabout Tôi không đồng ý. Mất thông tin luôn tệ hơn là giữ nó. Điều khôn ngoan duy nhất là biết thông tin nào cần vứt đi để thể hiện tín hiệu tốt hơn, chứ không phải mất thông tin.
AlexTP

5
@Willem: Là một trường hợp cực kỳ rõ ràng, tín hiệu DC có thể được ghép xuống một mẫu. Nói chung, bất kỳ tín hiệu nào không có thành phần nào vượt quá giới hạn Nyquist (mới) đều có thể được ghép xuống một cách an toàn.
MSalters

1
Có thể lập luận rằng không có thông tin nào bị mất từ ​​tín hiệu DC thành tín hiệu 1 mẫu vì bạn có thể chuyển đổi trở lại thành tín hiệu giống với tín hiệu gốc từ 1 mẫu. Có thể lập luận rằng thông tin bị mất bởi vì nếu bạn đưa tín hiệu mẫu 1 cho một người mà không có thêm thông tin và hỏi "Điều này có đại diện cho tín hiệu DC không?" câu trả lời sẽ là "Không biết, không đủ thông tin với một mẫu".
SE vi phạm bản quyền

7

Nếu bạn sử dụng một hàm như âm mưu (x, y), cách dễ nhất để hiển thị chúng trên cùng một biểu đồ là chỉ đơn giản là không lấy mẫu lại bất kỳ trong số chúng, mà chỉ cần điền vào mỗi vectơ x với các giá trị phù hợp cho mỗi tín hiệu, vì vậy cả hai đều xuất hiện ở nơi bạn muốn trên màn hình

Bạn cũng có thể thiết lập cốt truyện để có hai trục x khác nhau (một cho mỗi đường cong) với các nhãn và truyền thuyết khác nhau nếu bạn muốn.

Bây giờ, về việc lấy lại mẫu. Tôi sẽ sử dụng Fs cho tần suất lấy mẫu.

Tín hiệu được lấy mẫu không thể chứa các thành phần tần số trên Fs / 2. Nó là bandlrict.

Ngoài ra, tín hiệu chỉ chứa các thành phần tần số lên đến tần số F có thể được biểu diễn chính xác ở tốc độ lấy mẫu là 2F.

Lưu ý rằng biểu diễn "chính xác" này là toán học, không trực quan. Để thể hiện hình ảnh tốt, có 5-10 mẫu mỗi chu kỳ (do đó không có thành phần tần số đáng chú ý nào trên Fs / 10 hoặc hơn) thực sự giúp não kết nối các dấu chấm. Xem hình này: cùng một tín hiệu, đường cong dưới có tốc độ mẫu thấp hơn, không bị mất thông tin vì tần số thấp hơn Fs / 2 nhưng nó vẫn trông giống như crap.

nhập mô tả hình ảnh ở đây

Đó là tín hiệu chính xác mặc dù. Nếu bạn chồng chéo (tái cấu trúc) cái ở phía dưới bằng bộ lọc chân thành, bạn sẽ có được cái ở trên cùng.

Decimation (downsampling) sẽ gập lại tất cả các thành phần tần số cao hơn Fs / 2 mới vào tín hiệu. Đây là lý do tại sao chúng ta thường đặt một bộ lọc thông thấp dốc trước bộ giải mã. Ví dụ, để giảm mẫu từ Fs = 2000 Hz xuống Fs = 30 Hz, trước tiên, chúng tôi sẽ áp dụng đường thông thấp thứ tự cao với mức cắt một chút dưới 15 hz và chỉ sau đó giảm dần.

Tuy nhiên, bộ lọc này sẽ đưa ra các vấn đề phản hồi nhất thời, nó sẽ có độ trễ pha ở một số tần số nhất định và nó có thể thay đổi khía cạnh trực quan của tín hiệu của bạn, điều mà bạn không muốn làm nếu ý tưởng là so sánh trực quan với chúng. Quy tắc trên được áp dụng, không lấy mẫu quá nhiều, luôn giữ Fs ở tần số quan tâm cao nhất 5-10 lần nếu bạn muốn hình dạng tín hiệu có ý nghĩa gì đó. Đây là lý do tại sao phạm vi 200 MHz cần lấy mẫu ở tốc độ 1-2 Gsps.

Câu hỏi của tôi là: Liệu khôn ngoan hơn khi hạ thấp đường cong thứ hai hay lật ngược đường cong thứ nhất?

Như đã nói ở trên, khôn ngoan nhất là không gây rối với dữ liệu và chỉ đơn giản là trình bày chúng với trục x của riêng chúng trên cùng một biểu đồ.

Chuyển đổi tỷ lệ lấy mẫu sẽ được yêu cầu trong một số trường hợp. Ví dụ: để giảm số lượng điểm, giảm sử dụng bộ nhớ, làm cho nó nhanh hơn ... hoặc để làm cho cả hai tín hiệu sử dụng cùng tọa độ "x" để thực hiện các phép tính trên chúng.

Trong trường hợp này, bạn cũng có thể sử dụng một F trung gian, lấy mẫu tín hiệu có F cao và lấy mẫu tín hiệu có F thấp. Hoặc chỉ cần hạ thấp mẫu có Fs cao.

Lưu ý các tiêu chí Nyquist và không chọn tốc độ mẫu quá thấp hoặc bạn sẽ mất độ trung thực của hình dạng sóng trên tín hiệu Fs cao, bạn sẽ nhận được dịch pha vì bộ lọc thông thấp, v.v. Hoặc nếu bạn biết nội dung tần số cao là không đáng kể, bạn có thể đưa ra lựa chọn sáng suốt. Tôi

Nếu bạn sử dụng phép nội suy tuyến tính để làm cho tọa độ "x" khớp, hãy nhớ rằng nó cũng cần Fs khá cao. Nội suy sẽ hoạt động trên tín hiệu hàng đầu trong âm mưu ở trên, nó sẽ không hoạt động trên tín hiệu ở phía dưới. Tương tự nếu bạn quan tâm đến min, max và như vậy.

Và ... lưu ý rằng oversampling / upampling cũng sẽ gây rối với phản ứng nhất thời, ít nhất là về mặt trực quan. Ví dụ: nếu bạn chồng chéo một bước, bạn sẽ nhận được rất nhiều tiếng chuông do đáp ứng xung của bộ lọc chân thành. Điều này là do bạn nhận được tín hiệu giới hạn băng tần và một bước đẹp với các góc vuông thực sự có băng thông vô hạn.

Tôi sẽ lấy một sóng vuông làm ví dụ. Hãy suy nghĩ về tín hiệu được lấy mẫu ban đầu: 0 0 0 1 1 1 0 0 0 1 1 1 ... Bộ não của bạn nhìn thấy một sóng vuông.

Nhưng thực tế là bạn nên hình dung mỗi mẫu dưới dạng một dấu chấm, và không có gì giữa các dấu chấm. Đó là toàn bộ điểm lấy mẫu. Không có gì giữa các mẫu. Vì vậy, khi sóng vuông này được ghép lại bằng cách sử dụng phép nội suy chân thành ... có vẻ buồn cười.

nhập mô tả hình ảnh ở đây

Đây chỉ đơn giản là đại diện trực quan của sóng vuông được phân cách bằng dải. Các wiggles kinda tồn tại ... hoặc có thể không. Không có cách nào để biết liệu chúng có ở đó trong tín hiệu ban đầu hay không. Trong trường hợp này, giải pháp sẽ là thu được sóng vuông ban đầu với tốc độ lấy mẫu cao hơn để có độ phân giải tốt hơn ở cạnh, lý tưởng là bạn muốn có một số mẫu trên cạnh của mình để nó không còn bị mất một bước băng thông nữa. Sau đó, khi quá mức tín hiệu như vậy, kết quả sẽ không có tạo tác trực quan.

Dù sao. Như bạn có thể thấy ... chỉ lộn xộn với các trục x. Nó đơn giản hơn nhiều.


4

Downsampling mất thông tin. Upsampling là lossless khi hệ số là một số nguyên (bạn cũng nhớ yếu tố này), nhưng một số thông tin bị mất khi yếu tố không phải là số nguyên. Về mặt lý thuyết, Upsampling có thể mất nhiều thông tin hơn so với downsampling, vì các yếu tố lấy mẫu rất cụ thể.

Bạn nên sử dụng cái nào? Nó phụ thuộc vào mức độ chắc chắn bạn cần.

Nếu bạn không cần sự chắc chắn về mặt toán học và chỉ muốn một heuristic, downsampling sẽ nhanh hơn và upampling chính xác hơn .

Nếu bạn cần đặt giới hạn về tính chính xác của tính toán của mình: có thể nhưng tôi không thể giúp bạn điều đó.


+1, vì bạn đã quản lý để thu thập một vài thông tin quan trọng trong một câu trả lời rất súc tích.
dsp_user

3

Nó phụ thuộc vào ý của bạn bằng cách "so sánh" và "khôn ngoan hơn". Điều khôn ngoan, không khó trong Matlab, là làm cả hai cách và tự quyết định.

Trên thực tế, nếu bạn sửa đổi câu hỏi của mình bằng kết quả từ cả hai cách tiếp cận, tôi sẽ nêu lên câu hỏi của bạn và nhiều người sẽ thấy nó thú vị, và rất có thể giúp tìm ra "so sánh"


1

Tôi muốn chỉ ra một vấn đề xảy ra khi thực hiện upampling có thể rất quan trọng trong hoạt động này. Khi một tín hiệu được ghép lại và các điểm cuối dữ liệu nằm xa các giá trị 0 thì hiệu ứng cạnh sẽ diễn ra. Trong kinh nghiệm thực tế, hiệu ứng không mong muốn này nên được loại bỏ. Tôi chia sẻ với cộng đồng này một bài luận ngắn với hình ảnh và mã tôi đã viết về nó có thể giúp hiểu.

https://medium.com/@davidpinyol91/edge-effects-when-resampling-a-signal-on-matlab-how-to-solve-it-cc6458ab1306

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.